nmcli 本身不支持链路层自动降级,需结合多连接定义、优先级设置、ethtool链路检测及脚本监控实现故障切换:主备连接分设优先级与路由策略,拔线后几秒内自动启用备用路径。

Linux 中 nmcli 本身不直接提供“链路故障自动降级”这类底层链路层(L1/L2)的冗余切换机制,它工作在 NetworkManager 抽象层,管理的是逻辑连接(connection),而非物理链路状态感知与毫秒级故障切换。所谓“自动降级模式”,通常指当主网卡链路中断时,系统能快速启用备用路径(如另一张网卡、回退到 DHCP、或 fallback 到静态地址),保障基础通信(如 SSH、DNS、网关可达)不中断。
要达成这个目标,需结合 nmcli 配置 + 系统级策略协同实现,核心思路是:用多连接定义 + 故障检测触发 + 连接优先级 + 自动激活策略。以下是可落地的操作方案:
✅ 一、准备至少两张可用网卡并创建独立连接
确保系统识别到多个接口(如 eth0、eth1 或 enp0s3、enp0s8):
nmcli device status
为每张网卡创建带明确名称和用途的连接(推荐静态 IP + 高优先级):
# 主连接:高优先级,静态 IP,启用自动连接 nmcli connection add type ethernet con-name "Wired-primary" ifname eth0 autoconnect yes nmcli connection modify "Wired-primary" \ ipv4.addresses 192.168.1.100/24 \ ipv4.gateway 192.168.1.1 \ ipv4.dns "8.8.8.8,114.114.114.114" \ ipv4.method manual \ ipv4.ignore-auto-routes no \ ipv4.never-default no # 备用连接:低优先级,同样静态(或 DHCP),但设为 fallback nmcli connection add type ethernet con-name "Wired-backup" ifname eth1 autoconnect yes nmcli connection modify "Wired-backup" \ ipv4.addresses 192.168.1.101/24 \ ipv4.gateway 192.168.1.1 \ ipv4.dns "8.8.8.8,114.114.114.114" \ ipv4.method manual \ ipv4.ignore-auto-routes yes \ ipv4.never-default yes \ connection.autoconnect-priority -100
⚠️ 关键点:
connection.autoconnect-priority控制启动时连接顺序(默认 0,数值越大越优先);ipv4.never-default yes防止备用连接抢走默认路由;ipv4.ignore-auto-routes yes避免其子网路由干扰主连接。
✅ 二、启用 NetworkManager 的链路监测与故障响应
NetworkManager 支持通过 link-watch 参数监听物理链路状态(需内核支持 ethtool):
# 为主连接启用 ethtool 链路检测(推荐) nmcli connection modify "Wired-primary" \ link-watch "name:ethtool" # 可选:设置链路 down 后等待多久尝试重连(单位秒) nmcli connection modify "Wired-primary" \ connection.autoconnect-retries 3 \ connection.autoconnect-timeout 5
✅ 效果:当
eth0网线拔掉或 PHY link down,NetworkManager 会在几秒内检测到,并自动断开该连接;若eth1的"Wired-backup"已启用autoconnect且主连接失效,它将被自动激活(前提是无路由冲突)。
✅ 三、配置双连接共存策略:避免路由冲突
仅靠 autoconnect 不够——若主备同时在线,可能造成路由环路或 DNS 混乱。推荐启用 连接绑定(bonding)或策略路由,但更轻量的做法是:
- 让主连接负责默认路由和 DNS;
- 备用连接仅用于特定目的(如访问某段内网),或通过
ipv4.routes显式添加非默认路由;
例如,让备份连接只通 10.0.0.0/8:
nmcli connection modify "Wired-backup" \ ipv4.routes "10.0.0.0/8 192.168.1.1"
或者启用 连接互斥(mutual exclusion):
NetworkManager 本身不原生支持“主连上则备连强制下线”,但可通过脚本+nmcli monitor 实现:
# 后台监听连接状态变化(示例逻辑)
nmcli monitor | while read line; do
if echo "$line" | grep -q "Wired-primary.*connected"; then
nmcli connection down "Wired-backup" 2>/dev/null
elif echo "$line" | grep -q "Wired-primary.*disconnected"; then
nmcli connection up "Wired-backup" 2>/dev/null
fi
done &? 提示:该脚本建议放入
/etc/systemd/system/nm-failover.service作为守护服务运行。
✅ 四、验证与测试
-
查看连接状态与优先级:
nmcli connection show --active nmcli connection show "Wired-primary" | grep -E "(autoconnect|priority|link-watch)"
-
拔掉主网线,观察是否在 3–10 秒内自动切到备用连接:
watch -n1 'nmcli device status; ip route | head -3'
测试基础通信(如 ping 网关、DNS 解析、SSH 登录)是否持续可用。
不依赖内核 bonding 或第三方工具,仅靠 nmcli + NetworkManager 原生能力,就能构建出具备基础链路韧性、故障后自动接管的网络配置。重点在于连接定义清晰、优先级明确、链路检测开启、路由边界受控。


















