问题现象
Rocky Linux 9.5 系统配置了两张网卡,ens192
以及 ens224
,IP 地址为分别为 172.31.100.181
以及 172.31.100.221
,从别的机器 ping 这两个 IP 地址,只有一个 IP 地址可以 ping 通,网卡配置信息如下:
ens192 网卡配置信息
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19# cat /etc/NetworkManager/system-connections/ens192.nmconnection
[connection]
id=ens192
type=ethernet
autoconnect-priority=-999
interface-name=ens192
[ethernet]
[ipv4]
address1=172.31.100.181/26,172.31.100.190
dns=10.0.77.74;10.0.77.73;
method=manual
[ipv6]
addr-gen-mode=eui64
method=auto
[proxy]ens224 网卡配置信息
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19# cat /etc/NetworkManager/system-connections/ens224.nmconnection
[connection]
id=ens224
type=ethernet
autoconnect-priority=-999
interface-name=ens224
[ethernet]
[ipv4]
address1=172.31.100.221/26,172.31.100.254
dns=10.0.77.74;10.0.77.73;
method=manual
[ipv6]
addr-gen-mode=eui64
method=auto
[proxy]
问题分析
查看路由信息
1
2
3
4
5# ip route
default via 172.31.100.190 dev ens192 proto static metric 100
default via 172.31.100.254 dev ens224 proto static metric 101
172.31.100.128/26 dev ens192 proto kernel scope link src 172.31.100.181 metric 100
172.31.100.192/26 dev ens224 proto kernel scope link src 172.31.100.221 metric 101从路由表来看,这台服务器有两个默认网关:
- 默认网关 1:172.31.100.190,通过 ens192。
- 默认网关 2:172.31.100.254,通过 ens224。
同时,两个网卡分别绑定了子网:
- ens192:172.31.100.128/26(源IP 172.31.100.181)
- ens224:172.31.100.192/26(源IP 172.31.100.221)
由于 metric(路由优先级)值,ens192(metric 100)的默认路由优先于 ens224(metric 101)。这可能是导致只有一个网卡的IP能被外部 ping 通的主要原因。
为什么只有一个网卡的 IP 可用?
返回路径选择问题
当外部网络试图与 ens224(172.31.100.221)通信时,服务器可能会通过默认网关 172.31.100.190(绑定到 ens192)返回数据包。这种 异步路由 会导致通信失败,尤其是在外部防火墙检查源和返回路径的情况下。两个子网存在独立网关
如果 ens224 的子网 (172.31.100.192/26) 设备期望通信通过 172.31.100.254,但流量实际被 ens192 的网关处理,可能会引发路由冲突。
解决方法
添加策略路由
为每个网卡的源IP设置独立的路由规则,使数据流量从正确的网关返回。
编辑路由表配置文件
/etc/iproute2/rt_tables
,在文件最下面添加以下内容1
21 ens192_table
2 ens224_table添加路由规则:
1
2sudo ip rule add from 172.31.100.181 table ens192_table
sudo ip rule add from 172.31.100.221 table ens224_table添加路由:
1
2sudo ip route add default via 172.31.100.190 dev ens192 table ens192_table
sudo ip route add default via 172.31.100.254 dev ens224 table ens224_table确保子网路由存在:
1
2sudo ip route add 172.31.100.128/26 dev ens192 table ens192_table
sudo ip route add 172.31.100.192/26 dev ens224 table ens224_table验证配置:
1
2
3ip rule show
ip route show table ens192_table
ip route show table ens224_table