Iptables MASQUERADE 仅选定端口

Iptables MASQUERADE 仅选定端口

我按照本教程进行了端口转发: 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,则它将不起作用。

相关内容