如何通过nmcli配置Network Manager的IPv4路由,无需手动执行ip route delete删除其自动生成的路由?
如何通过nmcli配置Network Manager的IPv4路由,无需手动执行ip route delete删除其自动生成的路由?
嘿,我看了你遇到的问题——配置蜂窝和以太网双连接后,Modbus网段的ping测试失败了,核心原因是Network Manager自动生成的直连路由和你手动配置的静态路由冲突,导致流量没按预期走以太网网关。我帮你梳理下问题所在,再给出不用手动删路由的配置方案:
先说说你当前配置的问题
你在以太网连接里写了ipv4.addresses '10.1.9.7/16, 10.1.9.7/8',同一个IP绑定两个不同子网掩码是不合理的,这会让Network Manager自动生成一条10.0.0.0/8 dev enp1s0的直连路由。当你访问10.65.3.5这类10网段地址时,系统会优先走这条直连路由(尝试直接通过以太网接口发送,不走网关),但目标设备不在本地广播域里,自然就丢包了。
修正后的配置步骤
首先删掉现有的modbus连接(避免旧配置干扰):
sudo nmcli con delete modbus
然后重新创建以太网连接,修正地址和路由配置:
sudo nmcli con add type ethernet con-name modbus \ ifname enp1s0 connection.autoconnect yes \ ipv4.never-default yes \ ipv4.addresses '10.1.9.7/16' \ ipv4.routes '10.1.0.0/16 via 10.1.10.1, 10.0.0.0/8 via 10.1.10.1' \ ipv4.route-metric 800
启动连接:
sudo nmcli con up modbus
为什么这样改就没问题?
- 去掉重复的IP配置:只保留
10.1.9.7/16,Network Manager只会生成10.1.0.0/16 dev enp1s0的直连路由——这是合理的,因为你的网关10.1.10.1就在这个网段里,本地的10.1.x.x设备可以直接通信。 - 明确静态路由:手动配置的
10.0.0.0/8 via 10.1.10.1会覆盖更大范围的10网段流量,访问10.65.3.5这类非本地10.1.x.x的地址时,会自动走以太网网关转发。 - 蜂窝连接的优先级保留:你的蜂窝配置
ipv4.route-metric 1已经确保了默认路由(所有非10网段的上网流量)优先级最高,完全不影响蜂窝的100%可用性。
验证配置
执行ping测试:
ping -c 1 10.65.3.5
如果想确认路由表是否符合预期,执行:
ip route show
你应该能看到:
- 蜂窝的默认路由
0.0.0.0/0 via <蜂窝网关> dev cdc-wdm0 metric 1 - 以太网的直连路由
10.1.0.0/16 dev enp1s0 proto kernel scope link src 10.1.9.7 metric 800 - 以太网的静态路由
10.0.0.0/8 via 10.1.10.1 dev enp1s0 metric 800
这样就完全不需要手动删除自动路由,流量会按预期分配啦。
备注:内容来源于stack exchange,提问作者Sean McCarthy




