NetworkManager环境下以太网接口路由Metric自动变更问题求助
我之前在项目里也碰到过NetworkManager自动篡改以太网路由metric的糟心事,结合你的情况给你几个实用的排查和解决方向:
1. 先确认DHCP是否在“搞破坏”
很多时候是DHCP服务器推送了接口metric,覆盖了你手动设置的值。你可以给以太网连接加上忽略自动metric的配置:
用nmcli命令修改(以eth0的连接为例):
nmcli con mod "Coolon-ETH0-Connection" ipv4.ignore-auto-metric yes nmcli con mod "Coolon-ETH0-Connection" ipv4.metric 100 # eth1同理 nmcli con mod "Coolon-ETH1-Connection" ipv4.ignore-auto-metric yes nmcli con mod "Coolon-ETH1-Connection" ipv4.metric 100
修改后重启连接:
nmcli con down "Coolon-ETH0-Connection" && nmcli con up "Coolon-ETH0-Connection"
这样就能强制固定你设置的metric,不让DHCP推送的值覆盖。
2. 检查NetworkManager的全局路由管理策略
看看/etc/NetworkManager/NetworkManager.conf里的[main]段有没有相关配置,如果有rc-manager=auto,可能会导致系统自动调整路由。可以改成:
[main] rc-manager=file
这个设置会让NetworkManager优先使用手动配置的路由规则,减少自动调整的概率。改完后重启NetworkManager服务:
systemctl restart NetworkManager
3. 排查是否有其他网络服务干扰
比如systemd-networkd或者dhclient这类服务会不会在后台修改路由?先检查这些服务是否在运行:
systemctl status systemd-networkd dhclient
如果发现它们在运行,且不是你需要的,可以停止并禁用:
systemctl stop systemd-networkd dhclient systemctl disable systemd-networkd dhclient
另外,也可以在/etc/dhcp/dhclient.conf里添加强制覆盖的配置,确保dhclient不会修改metric:
supersede interface-metric 100;
4. 查看NetworkManager日志找根源
如果上面的方法都没用,直接看日志找触发metric变更的原因,实时监控日志:
journalctl -u NetworkManager.service -f
当你看到metric从100变成1002/1003的时候,日志里应该会有对应的条目,比如提到“DHCP provided metric”或者“Auto-adjusting route metric”,根据日志信息再针对性解决。
5. 确认连接的默认路由设置
还要确保以太网连接是被设置为默认路由,检查连接的ipv4.never-default参数:
nmcli con show "Coolon-ETH0-Connection" | grep never-default
如果值是yes,改成no:
nmcli con mod "Coolon-ETH0-Connection" ipv4.never-default no
这样以太网连接才会成为默认路由候选,配合低metric就能优先被使用。
备注:内容来源于stack exchange,提问作者SAP

