linux中nmcli配置多网卡路由本质是通过唯一默认网关、禁用冗余网关(ipv4.never-default yes)、显式静态路由实现管理与业务流量物理分离,而非靠metric负载分担;仅当主备切换等特殊场景才慎用metric控制优先级。

在Linux中用nmcli配置多网卡路由权重,本质不是靠“权重值”做负载分担,而是通过路由优先级(metric)+ 明确的默认网关归属 + 网络角色隔离,实现管理流量与业务流量走不同物理路径——即所谓“物理分离”。真正的分离不靠数值大小,而靠“唯一性”和“排他性”:只允许一个网卡拥有默认路由,另一网卡仅处理其直连或指定网段。
明确主次网卡角色,禁用冗余默认路由
这是最关键的一步。系统只能有一个默认网关(0.0.0.0/0),否则会引发路由冲突、回包失败甚至失联。
- 为业务网卡(如ens224)配置IP、子网、DNS,并设置默认网关:
nmcli connection modify ens224 ipv4.addresses 172.16.1.100/24 ipv4.gateway 172.16.1.1 ipv4.method manual - 为管理网卡(如ens192)仅配置IP和子网,绝对不设gateway,并显式禁止其成为默认出口:
nmcli connection modify ens192 ipv4.addresses 192.168.1.100/24 ipv4.gateway "" ipv4.never-default yes ipv4.method manual - 修改后必须重启连接生效:
nmcli connection down ens224 && nmcli connection up ens224nmcli connection down ens192 && nmcli connection up ens192
为非默认网卡添加精确静态路由
管理网卡虽无默认网关,但需访问特定内网段(如监控平台、跳板机、日志服务器)。这时要手工加路由,且目标是“仅限该网卡可达”,不依赖主路由表兜底。
- 假设管理网段是10.10.0.0/16,网关为192.168.1.1:
nmcli connection modify ens192 +ipv4.routes "10.10.0.0/16 192.168.1.1" - 若该网段无需网关(直连),可写成:
nmcli connection modify ens192 +ipv4.routes "10.10.0.0/16 0.0.0.0"(注意:0.0.0.0 表示直连,不是丢弃) - 避免使用
ipv4.ignore-auto-routes no等模糊开关,所有路由应显式声明,杜绝DHCP或NetworkManager自动注入干扰
用metric控制多默认路由场景下的优先级(慎用)
极少数情况需双默认网关(如主备链路),此时metric才起作用:数值越小,优先级越高。但这不适用于管理/业务分离场景,因为会破坏路径确定性。
- 仅当业务网卡故障时希望管理网卡临时接管外网,才考虑:
nmcli connection modify ens224 ipv4.route-metric 100nmcli connection modify ens192 ipv4.route-metric 200 - 务必配合
ipv4.never-default no(即允许该连接成为默认)及健康检测脚本,否则可能造成黑洞或环路 - 生产环境更推荐用策略路由(ip rule + 多表)替代metric争抢,默认路由仍保持唯一
验证与加固:确认流量不越界
配置完成后,不能只看路由表,要验证实际路径是否符合预期。
- 查当前生效的默认路由:
ip route | grep default—— 应只出现一条,且dev指向业务网卡 - 查管理网卡的专属路由:
ip route show table local | grep 192.168.1.0或nmcli connection show ens192 | grep -A5 ROUTE - 模拟发包验证路径:
ip route get 10.10.5.20 from 192.168.1.100→ 应返回 via 192.168.1.1 dev ens192ip route get 172.16.1.50 from 172.16.1.100→ 应返回 dev ens224 - 加nftables规则双重保险(可选):
nft add rule inet filter output ip saddr 192.168.1.0/24 ip daddr != 10.10.0.0/16 drop(限制管理IP只许访问授权网段)











