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规则:

1
2
3
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。不然,原来是个远程地址,会导致服务器回应的包被发送到远程地址,而不是中转机。


iptables端口转发
https://jcdu.top/2023/01/16/iptables端口转发/
作者
horizon86
发布于
2023年1月16日
许可协议