我有一台Xen虚拟机( DomU )。
其中一台虚拟机称为router (10.0.0.1),是唯一可以从外部访问的机器。
还有其他的虚拟机将接收stream量,但它必须被过滤。 让我们调用其中一台机器web (10.0.0.2),因为它提供了一个网页。
来到web数据包遵循此路由path:
xen DomU – > router – > web
DomU的configuration:
-A PREROUTING -d <external_ip> -p tcp -m tcp --dport 80 -j DNAT --to-destination 10.0.0.1:80 -A POSTROUTING -o xenbr0 -j MASQUERADE
router的configuration:
-A PREROUTING -d 10.0.0.1 -p tcp -m tcp --dport 80 -j DNAT --to-destination 10.0.0.2:80 -A POSTROUTING -o eth0 -j MASQUERADE
一切都按预期工作。
来自外部IP的端口80通过router一直路由到web 。
有一个问题:
web将10.0.0.1视为连接的来源,而不是真实的客户端IP。
我想这是由于有两个DNATing iptables的事实造成的。
但为什么?
使用MASQUERADE是用于将源地址NAT到公共IP; 你不应该伪装来自互联网的stream量,这似乎是你可能做的。
因此,完全删除您的MASQUERADE规则,或者,如果您需要它们为内部客户端提供Internet访问,请将MASQUERADE限制为特定的子网
我相信“路由器”上的MASQUERADE语句是,呃,通过“路由器”来伪装外部IP。