Linux IP转发;源IP是否改变?

Linux IP转发;源IP是否改变?

抱歉,这篇文章的标题不太清楚,我不太确定该如何称呼这种行为。

我已经设置了一个虚拟网络拓扑,如下所示:

+------------+                  +------------+
| host1      |                  | router     |
| 172.41.1.1 | <---- net1 ----> | 172.41.2.1 |                  +------------+
+------------+  (172.41.0.0/16) | 172.42.2.1 | <---- net2 ----> | host2      |
                                +------------+  (172.42.0.0/16) | 172.42.1.1 |
                                                                +------------+

这些“节点”实际上是容器,而网络是Docker 网络。(此外,net1是一个隧道网络,但我省略了这一点,因为我认为它与我看到的问题无关。)

当我ping 172.42.1.2在 上运行 时host1,我看不到响应。在(是 的接口)tcpdump -i eth1 -n上运行,我看到了在我看来正确的数据包被转发:routereth1net2

15:06:09.180072 IP 172.41.1.1 > 172.42.1.1: ICMP echo request, id 1, seq 14, length 64
15:06:10.181545 IP 172.41.1.1 > 172.42.1.1: ICMP echo request, id 1, seq 15, length 64
15:06:11.182521 IP 172.41.1.1 > 172.42.1.1: ICMP echo request, id 1, seq 16, length 64
15:06:12.184381 IP 172.41.1.1 > 172.42.1.1: ICMP echo request, id 1, seq 17, length 64

然而,host2我看到了以下内容:

15:06:58.257789 IP 172.42.0.1 > 172.42.1.1: ICMP echo request, id 1, seq 63, length 64
15:06:58.257811 IP 172.42.1.1 > 172.42.0.1: ICMP echo reply, id 1, seq 63, length 64
15:06:59.259254 IP 172.42.0.1 > 172.42.1.1: ICMP echo request, id 1, seq 64, length 64
15:06:59.259282 IP 172.42.1.1 > 172.42.0.1: ICMP echo reply, id 1, seq 64, length 64

也就是说,数据包的源 IP 似乎被更改为网络地址net2172.42.0.1为什么会发生这种情况?

答案1

请注意,172.41.0.0/16 和 172.42.0.0/16 不是私有地址 (RFC1918)。20 位私有网络是 172.16.0.0/12,其范围为 172.16.0.0 至 172.31.255.255。这不应该是导致此问题的原因,但如果您希望能够访问互联网上的所有主机,则可能会给您带来麻烦。

这个问题没有提供关于路由器配置的信息,但我的第一猜测是路由器上有数据包处理 (NAT) 规则。请执行此iptables -F操作并重试。

相关内容