在 Linux 中,从与入站接口不同的接口响应 ping

在 Linux 中,从与入站接口不同的接口响应 ping

我试图弄清楚是否需要进一步配置以允许出站流量与入站流量在不同的接口上工作。

我的设置是两台服务器。

Server1 有eth1VLAN100 和eth2VLAN200。

Server2eth1在 VLAN100 上有接口,但在 VLAN200 上没有接口。

Server1eth1的 IP 为 10.1.0.2,位于 10.1.0.0/24 子网中,网关 1 为 10.1.0.1。

Server1eth2的 IP 为 10.2.0.2,位于 10.2.0.0/24 子网中,网关 2 为 10.2.0.1。

Server2eth1的 IP 为 10.1.0.3,位于 10.1.0.0/24 子网中,网关 1 为 10.1.0.1。

网关 1 (10.1.0.1) 将通过网关 2 (10.2.0.1) 路由 10.2.0.0/24 流量,反之亦然。

Server1 可以 ping 通 Server2 的eth1接口 (10.1.0.2 -> 10.1.0.3)。Server2 可以 ping 通 Server1 的eth1接口 (10.1.0.3 -> 10.1.0.2)。

当 Server2 ping Server1 的eth2IP(10.2.0.2)时,Server1 收到了 Echo 请求,但 Server1 没有响应。ping 的源是 10.1.0.3,因此 Server1 应该通过其 eth1 接口(10.1.0.2)路由返回流量。所以我认为这次 ping 的往返应该是:

入站 ICMP 回显请求的流程

Server2 eth1 (10.1.0.3 - VLAN100)
Gateway1     (10.1.0.1 - VLAN100)
Gateway2     (10.2.0.1 - VLAN200)
Server1 eth2 (10.2.0.2 - VLAN200)

出站 ICMP 回显回复的预期流量

Server1 eth1 (10.1.0.2 - VLAN100)
Gateway1     (10.1.0.1 - VLAN100)
Server2 eth2 (10.1.0.3 - VLAN100)

通过tcpdumpServer1,我可以看到来自 Server2 的 ICMP 数据包到达了 Server1 的eth2接口,但 ICMP 响应没有在任何接口上离开 Server1。我不明白为什么它们在 Server1 中被丢弃。

编辑:更多信息

两个子网的网络掩码都是 255.255.255.0,并且已确认接口的网络掩码也是 255.255.255.0。

Server1 的默认网关为 10.1.0.1

Server2 的默认网关为 10.1.0.1

Server1:~# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         10.1.0.1        0.0.0.0         UG    0      0        0 eth1
10.2.0.0        0.0.0.0         255.255.255.0   U     0      0        0 eth2
10.1.0.0        0.0.0.0         255.255.255.0   U     0      0        0 eth1

Server2:~# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         10.1.0.1        0.0.0.0         UG    0      0        0 eth1
10.1.0.0        0.0.0.0         255.255.255.0   U     0      0        0 eth1

答案1

部分答案:

服务器 1 看到一个数据包从 10.1.0.0/24 到达eth2子网 10.2.0.0/24,同时存在另一个接口,eth1其子网为 10.1.0.0/24。

Linux 内核的默认配置将此解释为路由错误(来自 10.1.0.*/24 的数据包应该到达eth1,而不是eth2),因此它决定丢弃该数据包,以避免因“配置错误”的路由器所做的事情而导致网络充斥大量数据包。这就是您看不到 ICMP 回应回复的原因。

有多种方法可以通过/proc或来配置此行为/sys,但我必须查找详细信息。无论如何,可能需要进行一些调整才能获得此预期行为(并且您必须小心不要在执行此操作时破坏其他内容)。

所以简单的方法是修复网络拓扑和子网范围,并设置一些更标准的东西。你没有解释为什么如果你认为你需要这个特定的设置;可能有一种方法可以实现你想要的,同时仍然遵守网络最佳实践。所以你的问题可能是一个XY 问题。因此,请编辑问题并解释您的主要目标。

相关内容