如何通过Iptables实现跨端口段的端口转发配置?
如何通过Iptables实现跨端口段的端口转发配置?
嗨,我来帮你搞定这个跨端口段的转发问题!你想要把Server 1上的1-10000端口,转发到Server 2的20000-29999端口对吧?之前你参考的规则没匹配上你要的端口偏移逻辑,我给你梳理下正确的配置思路和命令:
先明确你的核心需求:
- 将Server 1(下文简称
serv1)的TCP端口1-10000,对应转发到Server 2(下文简称serv2)的TCP端口20000-29999(也就是serv1的端口N,对应serv2的端口N+19000)
你现有规则的问题:
你之前写的DNAT规则把serv1的1-10000直接转到serv2的1-10000,完全没做端口段的偏移,而且SNAT规则也没对应上目标端口段,这肯定达不到你想要的效果。
正确的配置步骤:
先开启内核IP转发(必须先做,否则转发不会生效)
临时生效:echo 1 > /proc/sys/net/ipv4/ip_forward永久生效(重启后依然有效):
编辑/etc/sysctl.conf文件,找到net.ipv4.ip_forward = 1这一行,去掉前面的注释符号#,然后执行:sysctl -p配置DNAT规则(处理入站流量转发)
这条规则会把发往serv11-10000端口的TCP流量,转发到serv2的20000-29999端口,端口会自动对应偏移:iptables -t nat -A PREROUTING -p tcp -d serv1 --dport 1:10000 -j DNAT --to-destination serv2:20000-29999配置SNAT规则(处理返回流量)
这条规则会把serv220000-29999端口返回的TCP流量,源端口转换为serv1的1-10000端口,确保外部能正常收到返回数据:iptables -t nat -A POSTROUTING -p tcp -s serv2 --sport 20000:29999 -j SNAT --to-source serv1:1-10000
验证规则是否生效:
你可以用iptables -t nat -L -n -v命令查看已添加的规则,也可以在serv2上监听某个端口(比如20001),然后从外部访问serv1的1端口,测试是否能正常连通。
备注:内容来源于stack exchange,提问作者Aaron Akhtar
相关产品推荐
相关产品推荐

