默认路由决定「找不到具体路由时的出口」,改错了就会断网。本文用官方手册与 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
删除后若还有别的默认路由,流量会切过去;若只剩一条且删掉,流量会中断,直到有新的默认路由写入。
版本与工具差异
持久化配置默认路由
服务器重启后路由表会重置,持久化必须写在网络配置里。
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 try120 秒内按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 默认未运行,配置语法虽通用但未在本次环境执行验证。
参考资料
- [1] route(8) – Linux manual page (man7.org)(man7-route)
- [2] ip-route(8) – Linux manual page (man7.org)(man7-iproute)
- [3] route(8) — net-tools — Debian trixie(debian-route)
- [4] ip-route(8) – Linux manual page (kernel.org)(kernel-iproute)
- [5] Examples – Netplan documentation (ubuntu.com)(ubuntu-netplan)
- [6] ip-route – Ubuntu manpages(ubuntu-iproute)
文中主要命令已在 WSL Ubuntu(24.04)实测并核对其在 Debian 系与通用发行版的文档口径。