数据包通过两个路由器进行 DNATing,源 IP 丢失

数据包通过两个路由器进行 DNATing,源 IP 丢失

我有一台 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 一直通过 路由routerweb

但是存在一个问题:
web将其10.0.0.1视为连接的来源,而不是真正的客户端 IP。

我猜这是由于存在两个 DNATing iptables 造成的。

但为什么?

答案1

使用 MASQUERADE 是为了将源地址 NAT 到公网 IP;你应该不是伪装来自互联网的流量,看起来你很可能正在这么做。

因此,请完全删除 MASQUERADE 规则,或者,如果您需要它们为内部客户端提供互联网访问权限,请将 MASQUERADE 限制到特定子网

答案2

我认为“路由器”上的 MASQUERADE 语句是在伪装通过“路由器”的外部 IP。

相关内容