You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何通过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

为什么这样改就没问题?

  1. 去掉重复的IP配置:只保留10.1.9.7/16,Network Manager只会生成10.1.0.0/16 dev enp1s0的直连路由——这是合理的,因为你的网关10.1.10.1就在这个网段里,本地的10.1.x.x设备可以直接通信。
  2. 明确静态路由:手动配置的10.0.0.0/8 via 10.1.10.1会覆盖更大范围的10网段流量,访问10.65.3.5这类非本地10.1.x.x的地址时,会自动走以太网网关转发。
  3. 蜂窝连接的优先级保留:你的蜂窝配置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

火山引擎 最新活动