当在具有多个接口的Linux主机上启用微分段时,流量无法到达Socket

Prev Next

问题

对于基于Linux的系统,当连接到两个路由器(一个用于本地流量,一个用于互联网流量)时,启用微分段不会为默认网关创建路由条目。

故障排除 

检查路由表

通过运行命令route -n检查路由表

目的地    网关      Genmask         标志 度量 Ref Use Iface\n0.0.0.0        10.40.0.254  0.0.0.0         UG    202    0   0   eth0\n0.0.0.0        192.168.2.1  0.0.0.0         UG    1024   0   0   eth1\n10.10.0.0      10.40.0.254  255.255.0.0     UG    0      0   0   eth0\n10.30.0.0      10.40.0.254  255.255.0.0     UG    0      0   0   eth0\n10.40.0.0      0.0.0.0      255.255.0.0     U     202    0   0   eth0\n10.52.0.0      10.40.0.254  255.255.0.0     UG    0      0   0   eth0\n10.53.0.0      10.40.0.254  255.255.0.0     UG    0      0   0   eth0\n52.214.167.240 10.40.0.254  255.255.255.255 UGH   0      0   0   eth0\n172.17.10.41   10.40.0.254  255.255.255.255 UGH   0      0   0   eth0\n192.168.2.1    0.0.0.0      255.255.255.255 UH    1024   0   0   eth1

在上面的示例中,我们可以看到192.168.2.1的网关是0.0.0.0,这表明有一个通过eth1的默认路由专门针对该IP。 但是,由于网关不在同一子网中,第一条默认路由将被选中而不是正确的路由,导致流量因较低的度量而经由eth0发送。

解决方案

通过运行以下命令手动添加缺失子网的路由

ip route add <IP/CIDR> dev <interface>

例如:ip route add 192.168.2.0/24 dev eth1

完成后,检查路由表以确认已添加路由。

目的地    网关     Genmask         标志 度量 Ref Use Iface\n0.0.0.0        10.40.0.254 0.0.0.0         UG    202    0    0  eth0\n0.0.0.0        192.168.2.1 0.0.0.0         UG    1024   0    0  eth1\n10.10.0.0      10.40.0.254 255.255.0.0     UG    0      0    0  eth0\n10.30.0.0      10.40.0.254 255.255.0.0     UG    0      0    0  eth0\n10.40.0.0      0.0.0.0 255.255.0.0         U     202    0    0  eth0\n10.52.0.0      10.40.0.254 255.255.0.0     UG    0      0    0  eth0\n10.53.0.0      10.40.0.254 255.255.0.0     UG    0      0    0  eth0\n52.214.167.240 10.40.0.254 255.255.255.255 UGH   0      0    0  eth0\n172.17.10.41   10.40.0.254 255.255.255.255 UGH   0      0    0  eth0\n192.168.2.0    0.0.0.0     255.255.255.0   U     0      0    0  eth1\n192.168.2.1    0.0.0.0     255.255.255.255 UH    1024   0    0  eth1