我iptables
在虚拟化主机上使用一个 IP 将服务分发到不同的虚拟机 (VM)。这与 PREROUTING 中的 DNAT 和 POSTROUTING 中的 SNAT 配合得很好。此外,我能够通过使用 POSTROUTING 中的 MASQUERADE 从虚拟机访问互联网。
如果我尝试ssh
从提供 Web 服务器的虚拟机使用,并且已为来自该虚拟机的数据包配置了 SNAT,则会出现问题。只有禁用 SNAT 后,它才有效。
是否可以将 SNAT 限制为对外部请求的回复(例如 Web 服务器请求、传入的 FTP 或 DNS),同时伪装来自 VM 的流量?有趣的是,VM 中的 wget 等简单操作可以正常工作。
iptables 中的相关部分:
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -p tcp -s 192.168.x.y -o xenbr1 -j SNAT --to a.b.c.d
-A POSTROUTING -p udp -s 192.168.x.y -o xenbr1 -j SNAT --to a.b.c.d
-A POSTROUTING -s 192.168.0.0/255.255.0.0 -j MASQUERADE
答案1
代替
-A POSTROUTING -s 192.168.0.0/255.255.0.0 -j MASQUERADE
和
-A POSTROUTING -s 192.168.0.0/255.255.0.0 -o <internet interface> -j MASQUERADE
在配置中。这确保只有路由到 dom0 传出接口的数据包才会被伪装。