我有一台 xen 机器(DomU
),上面托管着一些虚拟机。
其中一台虚拟机名为router
(10.0.0.1),是唯一一台可以从外部访问的机器。
还有其他虚拟机会接收流量,但必须对其进行过滤。我们称其中一台机器为web
(10.0.0.2),因为它提供网页服务。
数据包web
遵循以下路由路径:
xen DomU
-> router
->web
DomU
的配置:
-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
的配置:
-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 造成的。
但为什么?
答案1
使用 MASQUERADE 是为了将源地址 NAT 到公网 IP;你应该不是伪装来自互联网的流量,看起来你很可能正在这么做。
因此,请完全删除 MASQUERADE 规则,或者,如果您需要它们为内部客户端提供互联网访问权限,请将 MASQUERADE 限制到特定子网
答案2
我认为“路由器”上的 MASQUERADE 语句是在伪装通过“路由器”的外部 IP。