我运行一个小型的networking,其中一个Linuxnetworking/邮件服务器也提供了一个窗口集合的NAT的NAT。 其中一台Windows机器显然行事不端(ZeroAccess僵尸networking,尽pipe使用Norton PowerEraser无法find任何问题,并且在数周内只能在/ var / syslog中find3个出站端口16465数据包)。 出于某种原因,设置防火墙规则来丢弃所有传出的16465数据包也不能解决问题,但这是一个无关紧要的问题。
这个问题导致邮件服务器被列入黑名单,例如spamhaus.org。 由于我无法find感染的Windows主机,所以我想到了使用IP别名通过不同的IP地址发送NATstream量的想法。
外部接口:
eth0: 216.82.212.230 eth0:1 72.48.103.182
内部接口:
eth1: 172.18.90.1
在我的防火墙规则中,我改变了
iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to 216.82.212.230
至
iptables -t nat -A POSTROUTING -s 172.18.90.0/24 -o eth0 -j SNAT --to 72.48.103.182
问题是现在一切似乎都是72.48.103.182,包括来自邮件服务器的stream量。 如果我从防火墙主机ssh ssh到另一台外部机器,连接被确定为来自72.48.103.182。
这对我来说没有意义,因为我特别指定了应该是NAT的源IP。 本来我没有“-s 172.18.90.0/24”,尝试上面的行,得到完全一样的结果。
对发生什么事情有任何想法? 我不是想象中的iptables专家,但是在发布到serverfault之前已经努力尝试研究这个。
=======================
root@www:etc# ip ro 216.82.212.0/24 dev eth0 proto kernel scope link src 216.82.212.230 72.48.103.0/24 dev eth0 proto kernel scope link src 72.48.103.182 172.18.90.0/24 dev eth1 proto kernel scope link src 172.18.90.1 default via 216.82.212.254 dev eth0 src 72.48.103.182 metric 100 default via 216.82.212.254 dev eth0 metric 100
“魔术”部分不是SNAT规则或NAT表格,而是这个路由表项:
default via 216.82.212.254 dev eth0 src 72.48.103.182 metric 100
它告诉你的内核使用72.48.103.182出站本地启动的连接(只要套接字没有明确地绑定到一个特定的地址创build),如果目的地可以通过这条路线 – 这将是所有的“外部“目的地,因为这是您的默认路线。 你应该重新定义它
default via 216.82.212.254 dev eth0 src 216.82.212.230 metric 100
得到预期的行为。
好吧, 所以我想 – 你的服务器只是使用这个IP作为outogoing之一。 其实你根本不需要2个默认路由,甚至是误导。 你只能使用一个:
ip ro add default via 216.82.212.254
您使用的别名不需要特殊的默认路由条目,因为您的ISP使用您的接口的主链路(地址)很可能会将其路由回去。