iptables端口转发

用一个例子说明:

服务器:192.168.0.121:27896
中转机:192.168.0.163:27896

192.168.0.121的端口27896上开启了一个服务器,我希望访问中转机192.168.0.163的27896也可以访问到192.168.0.121:27896
需要在163这台机器上配置两条iptables规则:

iptables -t nat -A PREROUTING -p tcp -d 192.168.0.163 --dport 27896 -j DNAT --to-destination 192.168.0.121:27896

iptables -t nat -A POSTROUTING -p tcp -d 192.168.0.121 --dport 27896 -j SNAT --to-source 192.168.0.163

第一条规则是,对于目的地址是192.168.0.163并且目的端口是27896的数据包,将其目的地址改为192.168.0.121:27896,然后再路由转发出去。
第二条规则是,对于目的地址是192.168.0.121并且目标端口是27896的数据包,将其源地址改为192.168.0.163

这两条规则的原理是:

对于到达192.168.0.163:27896的数据包,在被路由转发之前,更改目的地址,让它从网卡转发出去,而不是留在本地。此时,它的目的地址已经改了,但是源地址还是远程地址。
这个数据包随后到达POSTROUTING链,将其源地址改成192.168.0.163,发送给192.168.0.121。不然,原来是个远程地址,会导致服务器回应的包被发送到远程地址,而不是中转机。

posted @ 2023-01-16 12:57  王冰冰  阅读(1187)  评论(0编辑  收藏  举报