善良的人们,
我有一个具有以下设置的网络
eth0 10.216.11.41
面向互联网
eth1 192.168.0.4
内部网络与内部网络内的其他机器进行交互。
我想使用这台机器作为网关,并有以下要求。
- 所有从内部网络到 yahoo.com 的流量都通过 eth0 进行 SNAT 到 10.216.11.40
- 其余所有内容将通过 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
。