首页 > Sysadmin > 正文

Linux 修改默认路由的几种方法

huyuanwen 2026-11-04 Sysadmin

默认路由决定「找不到具体路由时的出口」,改错了就会断网。本文用官方手册与 WSL 实测,按临时到持久的方法排序。

TL;DR

  • 临时改:ip route replace default via <网关> dev <网卡>,改完不重启不丢
  • 持久改:Ubuntu 24.04 用 Netplan YAML,老系统用 /etc/network/interfaces 或 NetworkManager
  • 多出口:通过 metric 权重或策略路由表控制优先级
  • 改前先 ip route show default 留底,出问题秒回滚

查看当前默认路由

ip route show default

典型输出:

default via 172.26.96.1 dev eth0 proto kernel

网关地址在 via 字段,出口网卡在 dev 字段。老工具 route -n 也能看,但 ip 命令是 iproute2 套件的标准接口[2][4]。

route -n

会输出一张经典三列表格,默认路由的 Destination 是 0.0.0.0[1][3]。

临时修改默认路由

改临时路由只需 ip route 子命令,立即生效,掉电或重启后丢失[6][4]。

ip route replace default via 192.168.1.1 dev eth0 metric 100
  • replace:有则改,无则加,适合幂等脚本
  • metric:数值越小越优先,多默认路由时决定走哪条

用 del 删除:

ip route del default

删除后若还有别的默认路由,流量会切过去;若只剩一条且删掉,流量会中断,直到有新的默认路由写入。

版本与工具差异

  • route 命令来自 net-tools,已 deprecated,部分精简发行版默认不装[3]
  • ip 命令来自 iproute2,从内核 2.2 起就是标准工具,所有主流发行版都自带[2]

持久化配置默认路由

服务器重启后路由表会重置,持久化必须写在网络配置里。

Netplan(Ubuntu 17.10+ / Debian 未默认启用)

Ubuntu 24.04 默认走 Netplan。在 /etc/netplan/01-netcfg.yaml 加 routes 段:

network:
  version: 2
  ethernets:
    eth0:
      dhcp4: false
      addresses: [192.168.1.10/24]
      routes:
        - to: default
          via: 192.168.1.1
          metric: 100
      nameservers:
        addresses: [8.8.8.8, 1.1.1.1]

写入后:

netplan apply

生效前可用 netplan try 做 120 秒倒计时验证,失败自动回滚[5]。

NetworkManager(桌面/云服务器)

桌面环境用 NetworkManager 命令行改网关:nmcli connection modify eth0 ipv4.gateway 192.168.1.1 && nmcli connection up eth0

传统 /etc/network/interfaces(Debian 11 及旧版 Ubuntu)

在网卡配置段加:

post-up ip route add default via 192.168.1.1 dev eth0

post-up 在网卡启动后执行,比 up 更稳妥,避免路由表还没就绪就写入。

高级:策略路由与多默认路由

单主机可以有多条默认路由,靠 metric 做故障转移。更细粒度的控制用策略路由表(ip rule + ip route add ... table N)[4]。

ip route add default via 192.168.1.1 dev eth0 table 100
ip rule add from 192.168.1.10/32 table 100

这条规则让来自 192.168.1.10 的流量查表 100,而非主表。多用于多线备份或源地址选路。

回滚与排错

回滚清单

  • 临时改坏:ip route del default 删掉错的,再用 dhclient 或 Netplan/NetworkManager 恢复
  • Netplan 改坏:netplan try 120 秒内按 Enter 即可撤销
  • post-up 写错:注释掉那行,重启网络服务

排错速查表

现象 原因 处理
RTNETLINK answers: Network is unreachable 网关不在本地链路 检查网关 IP 是否与网卡同网段
Nexthop has invalid gateway 网关不是直连地址 WSL 等虚拟网络常有此限制
ip route del default 后断网 没有第二条默认路由 立刻加回,或重启网络服务
netplan apply 无反应 YAML 缩进错误 用 netplan try 查看报错
route 命令不存在 net-tools 未装 apt install net-tools(不推荐用于脚本)

实测与局限性

  • 实测环境:WSL2 Ubuntu 24.04,内核 5.15,iproute2 6.8。
  • 已验证:ip route show/add/del/replace、metric 修改、unreachable 类型路由、策略路由表创建与删除、route -n 读取、Netplan YAML 语法与 netplan try 行为。
  • 局限性:WSL NAT 虚拟网卡不允许写入非直连网关(Nexthop has invalid gateway),真实多网卡、VLAN、bonding 环境未测;NetworkManager 在 WSL 默认未运行,配置语法虽通用但未在本次环境执行验证。

参考资料

文中主要命令已在 WSL Ubuntu(24.04)实测并核对其在 Debian 系与通用发行版的文档口径。