Iptables端口(流量)转发


简介

如何实现两台机器之间的流量转发?假设服务器集群都在内网,其中一台可以对外提供服务,那么如果想要外界的网络能直接访问到内部机器,可以通过这种方式,可以在外网机器上安装iptables将固定端口的流量转发到内网的服务上。这种方式也可绕过防火墙,访问到外网。

CentOS 7 安装并启用 Iptables

    yum install iptables iptables-services -y
    systemctl start iptables.service
    systemctl enable iptables.service

清空 Iptables 默认规则并保存

    iptables -F
    iptables -X
    iptables -Z
    service iptables save

开启系统内核转发

    echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
    sysctl -p /etc/sysctl.conf

设置转发规则

    iptables -t nat -A PREROUTING -p tcp --dport [本机端口号] -j DNAT --to-destination [目标IP:端口]
    iptables -t nat -A PREROUTING -p udp --dport [本机端口号] -j DNAT --to-destination [目标IP:端口]
    iptables -t nat -A POSTROUTING -p tcp -d [目标IP] --dport [目标端口号] -j SNAT --to-source [本机主网卡IP]
    iptables -t nat -A POSTROUTING -p udp -d [目标IP] --dport [目标端口号] -j SNAT --to-source [本机主网卡IP]

保存重启 Iptables

    service iptables save
    service iptables restart

查看目前 Iptables 规则

    iptables -nL --line-number

查看目前 Iptables 的 NAT(转发)规则

    iptables -t nat -vnL

删除指定 NAT(转发)规则

通过查看 NAT 规则找到规则对应的列号(一条规则就是一列,初始号为 1)

    iptables -t nat -D POSTROUTING [规则列号]
    iptables -t nat -D PREROUTING [规则列号]

总结

使用系统防火墙如 Iptables 等来转发流量是最稳定、资源开销最低的一种方式,同时可以看到转发后从使用者本地通过转发端到被转发端的具体延迟,而不是像其他第三方工具转发出来只会显示使用者本地到转发端的延迟,同时资源开销也很大,两者各有优劣;以及还可以使用 Firewalld 转发端口(流量),或者是如 Nginx、Brook、Gost、Socat 等第三方工具来实现端口(流量)

多端口转发:

    iptables -t nat -A PREROUTING -p tcp -m tcp --dport [本机端口段开始:本机端口段结束] -j DNAT --to-destination [目标IP]
    iptables -t nat -A PREROUTING -p udp -m udp --dport [本机端口段开始:本机端口段结束] -j DNAT --to-destination [目标IP]
    iptables -t nat -A POSTROUTING -d [目标IP] -p tcp -m tcp --dport [目标端口段开始:目标端口段结束] -j SNAT --to-source [本机主网卡IP]
    iptables -t nat -A POSTROUTING -d [目标IP] -p udp -m udp --dport [目标端口段开始:目标端口段结束] -j SNAT --to-source [本机主网卡IP]

文章作者: Needle
转载声明:本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Needle !
  目录
  评论