iptables MASQUERADE 和 SNAT 结合使用

iptables MASQUERADE 和 SNAT 结合使用

善良的人们,

我有一个具有以下设置的网络

eth0 10.216.11.41面向互联网

eth1 192.168.0.4内部网络与内部网络内的其他机器进行交互。

我想使用这台机器作为网关,并有以下要求。

  1. 所有从内部网络到 yahoo.com 的流量都通过 eth0 进行 SNAT 到 10.216.11.40
  2. 其余所有内容将通过 eth0 进行 MASQUARAD,其 IP 为 10.216.11.41

我曾希望实现这一愿景

#everything to yahoo be snatted
iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to 10.216.11.40 --destination yahoo.com 

#everything else be masqueraded
iptables --t nat --A POSTROUTING --o eth0 -j MASQUERADE

但遗憾的是,SNATting 规则没有指定目的地。

我怎样才能实现上述要求?

答案1

您需要将 SNAT 放入一个新的单独链中。

然后,在您现在拥有 SNAT 的地方,您需要编写一个规则来测试目标 IP,如果它等同于您想要执行此操作的 IP,则跳转到您上面创建的链。


靠近 iptables 文件的开头

/sbin/iptables -t nat -N SNATChain

在表中创建一个nat名为“SNATChain”的链

然后,替换此:

#everything to yahoo be snatted
iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to 10.216.11.40 --destination yahoo.com

有了这个:

#if the destination IP matches yahoo, throw it to SNATChain
/sbin/iptables -t nat -A POSTROUTING -o eth0 --destination yahoo.com -j SNATChain

然后用你想要的规则填充你的 SNATChain

/sbin/iptables -t nat -A SNATChain -o eth0 -j SNAT --to 10.216.11.40

我相信这就是方法。我已经有一段时间没弄乱了iptables

相关内容