3 个 NIC 上有 3 个 IP,3 个网关——#3 没有响应请求——路由到错误的端口?

3 个 NIC 上有 3 个 IP,3 个网关——#3 没有响应请求——路由到错误的端口?

我有一台 CentOS 5.5 服务器,它使用 2 个板载网络端口中的 1 个 (eth0) 和 2 个 PCI NIC (eth2 和 eth3) - 每个都在不同的子网上有自己的 IP,并在不同的 VLAN 上有不同的网关。eth0 和 eth2 上的 IP 工作正常,但 eth3 上的 IP 没有响应包括 ICMP 在内的请求,尽管它在交换机上显示为活动状态,如果我在服务器上本地 ping 该 IP,它确实可以工作。

我猜测这是 Linux 的某种 IP 路由问题,也许它试图在 eth2 或 eth0 而不是 eth3 上响应 eth3 请求?

希望有人能给我一些建议吗?

eth0: x.x.236.2 netmask 255.255.252.0 gateway x.x.236.1
eth2: x.x.232.2 netmask 255.255.252.0 gateway x.x.232.1
eth3: x.x.208.2 netmask 255.255.248.0 gateway x.x.208.1

“ip route”的输出:

x.x.236.0/22 dev eth0  proto kernel  scope link  src x.x.236.2
x.x.232.0/22 dev eth2  proto kernel  scope link  src x.x.232.2
x.x.208.0/21 dev eth3  proto kernel  scope link  src x.x.208.2
169.254.0.0/16 dev eth3  scope link
default via x.x.232.1 dev eth2
default via x.x.236.1 dev eth0
default via x.x.208.1 dev eth3

答案1

Linux 在最接近目的地的接口上发送出站数据包。它不会将数据包视为对另一个数据包的“响应”,也不认为这样做是出于路由目的。

除冗余外,通常不应有三个网关。如果路由器无法处理来自任何机器的 IP 地址到任何您没有更具体路由的主机,它都不应被列为网关。

不存在“eth3 请求”之类的东西。只有数据包,带有源 IP 地址和目标 IP 地址。

列出的三个默认值意味着三台机器可以处理任何数据包到非本地主机。

答案2

如果禁用反向路径过滤(http://lartc.org/howto/lartc.kernel.html),那么无论路由表的内容如何,​​发送到 eth3 接口 IP 的数据包的回复都将通过 eth3 发送回来。因此运行:

echo 2 > /proc/sys/net/ipv4/conf/eth3/rp_filter

然后再次尝试 ping。

但是,您不应该拥有三个具有相同度量的默认网关 - 也许您应该重新设计解决方案并更清楚地定义您的目标。

相关内容