我按照本教程进行了端口转发: http://www.debuntu.org/how-to-redirecting-network-traffic-to-a-new-ip-using-iptables/
iptables -t nat -A PREROUTING -p tcp --dport 1111 -j DNAT --to-destination 2.2.2.2:1111
iptables -t nat -A POSTROUTING -j MASQUERADE
但是我想只对带有转发的端口进行伪装,因为在同一个服务器中我有一个网络服务器,如果我对所有流量进行伪装,网络服务器就会停止工作。
任何想法?
解决方案:
iptables -t nat -A POSTROUTING -d 2.2.2.2 -p tcp --dport 1111 -j SNAT --to-source 2.2.2.1
答案1
如果你真的想要做一个MASQUERADE
那么正确的方法是这样的:
iptables -t nat -A PREROUTING -p tcp --dport 1111 -j DNAT --to-destination 2.2.2.2:1111
iptables -t nat -A POSTROUTING -d 2.2.2.2 -p tcp --dport 1111 -j MASQUERADE
这种方式MASQUERADE
仅适用于DNAT数据包。
但请注意,这MASQUERADE
主要适用于动态 IP 情况(例如拨号),对于静态 IP,SNAT
应按照您建议的方式使用。摘自iptables
手册页:
它只应与动态分配的 IP(拨号)连接一起使用:如果您有静态 IP 地址,则应使用 SNAT 目标。伪装相当于指定数据包发出接口的 IP 地址映射,但也会导致接口关闭时忘记连接。当下一个拨号不太可能具有相同的接口地址(因此任何已建立的连接都会丢失)时,这是正确的行为。
MASQUERADE
但对于和这两者,有一个警告SNAT
:如果 2.2.2.2 是同一台机器上的 VIP,则它将不起作用。