简介
如何实现两台机器之间的流量转发?假设服务器集群都在内网,其中一台可以对外提供服务,那么如果想要外界的网络能直接访问到内部机器,可以通过这种方式,可以在外网机器上安装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]