Linux中ip route命令可动态调整默认网关与路由优先级,核心是理解默认路由、metric值和路由表索引;通过show default、show、get等子命令查看路由,用add/del修改,默认路由按metric最小优先,多默认路由时metric相同则后添加可能被忽略;添加高metric备用路由实现故障切换,临时切换需先del再add,默认不持久化;进阶策略路由需配合自定义路由表与ip rule按源IP等分流。

Linux系统中通过ip route命令可动态调整默认网关和路由优先级,实现多网卡环境下的灵活出口控制。核心在于理解“默认路由”“metric值”和“路由表索引”的作用,而非简单增删规则。
查看当前路由与默认网关
执行以下命令快速确认当前生效的默认路由:
-
ip route show default—— 显示当前唯一默认路由(如有) -
ip route show—— 查看全部路由条目,重点关注含via和dev的行 -
ip route get 8.8.8.8—— 模拟访问外部地址,显示实际选中的出口路径
注意:若存在多条默认路由(如同时配置了两个default via),系统会按 metric 值最小者优先;metric 相同时,后添加的可能被忽略或触发负载行为(取决于内核版本与配置)。
添加带优先级的备用网关
不覆盖现有默认路由,而是添加一条高 metric 值的备用路由,供故障切换使用:
ip route add default via 192.168.2.1 dev eth1 metric 200- 其中
metric 200表示该路由优先级低于默认 metric=100 的主网关(通常主路由 metric 为 0 或 100) - 此操作不会影响当前流量,仅作为后备选项;需配合监控脚本或
ip rule实现自动切换
临时切换默认网关(立即生效)
直接替换当前默认路由,适用于调试或应急场景:
- 先删除原默认路由:
ip route del default - 再添加新默认路由:
ip route add default via 192.168.3.1 dev wlan0 - 验证是否生效:
ip route show default和ping -I wlan0 8.8.8.8
⚠️ 此类修改重启后失效。如需持久化,请写入网络配置文件(如 /etc/network/interfaces 或 /etc/sysconfig/network-scripts/ifcfg-*),并设置 DEFROUTE=no 避免 NetworkManager 覆盖。
基于策略的路由分流(进阶控制)
当需要按源IP、目标网络或应用区分出口时,需结合路由表与策略规则:
- 创建独立路由表(如 table 200):
echo "200 backup" >> /etc/iproute2/rt_tables - 向该表添加路由:
ip route add default via 10.0.0.1 dev ens3 src 10.0.0.100 table backup - 添加策略规则(例如匹配源IP):
ip rule add from 10.0.0.100 table backup - 查看策略列表:
ip rule show
这样,来自 10.0.0.100 的所有流量将强制走 backup 表中的网关,与其他流量隔离。











