Linux临时路由重启失效是设计使然,需通过发行版特定方式配置永久路由:RHEL/CentOS在/etc/sysconfig/network-scripts/route-接口名中写入“目标网络 via 网关”,Ubuntu/Debian在netplan YAML的routes下指定to、via、on-link字段,并正确应用。

route 命令加的路由重启就没了,怎么办
Linux 用 route add 或 ip route add 添加的路由默认都是临时的,系统重启、网络服务重载后自动消失。这不是 bug,是设计如此——内核路由表只管运行时状态,持久化得靠配置文件或启动脚本。
- 临时加一条去
10.20.30.0/24走192.168.1.1的路由:ip route add 10.20.30.0/24 via 192.168.1.1 - 验证是否生效:
ip route show,别只看route -n,后者不显示 IPv6 且格式老旧 - 别把
ip route add往/etc/rc.local里硬塞——systemd 环境下它可能根本不执行,或执行时机早于网卡就绪
CentOS/RHEL 7+ 怎么写永久静态路由
红帽系(包括 Rocky、Alma)用的是 NetworkManager + ifcfg 配置驱动,永久路由必须写进网卡对应的 route-<em>接口名</em> 文件,不是改 /etc/sysconfig/network。
- 假设网卡是
ens192,就创建/etc/sysconfig/network-scripts/route-ens192 - 内容写成两列:目标网络 + via 网关,例如:
10.20.30.0/24 via 192.168.1.1(不能带dev,会报错) - 改完必须重启网络服务:
nmcli connection reload && nmcli connection down ens192 && nmcli connection up ens192,直接systemctl restart NetworkManager不保证生效 - 如果用了
nmcli手动管理连接,路由得用nmcli connection modify ens192 +ipv4.routes "10.20.30.0/24 192.168.1.1",再nmcli connection reload
Ubuntu/Debian 的 netplan 怎么配永久路由
netplan 是声明式配置,路由必须嵌套在对应网卡的 routes 列表里,而且得明确指定 to、via、on-link(必要时)三个字段,漏一个就加载失败。
- 编辑
/etc/netplan/01-netcfg.yaml,在对应网卡下加:routes: - to: 10.20.30.0/24 via: 192.168.1.1 on-link: true -
on-link: true表示网关和本机在同一子网,不查 ARP 缓存;如果网关不在直连网段(比如走隧道或 VLAN),就得删掉这行,否则路由不生效 - 写完必须跑
sudo netplan apply,别只sudo netplan generate—— 那只是生成中间文件,不实际下发 - 如果报
Invalid value for routes,大概率是缩进不对(YAML 对空格敏感)或用了 tab 键
跨网段下一跳不可达时路由为啥不报错
Linux 内核加路由时只校验语法和格式,不验证 via 地址是否真能 ping 通。结果就是路由表里有条“合法但废”的路由,发包时卡在 ARP 请求超时,表现为连接 hang 住或秒断。
- 加路由前先确认下一跳可达:
ping -c2 192.168.1.1 && arp -n | grep 192.168.1.1 - 如果下一跳是另一台 Linux,检查它是否开了
ip_forward=1(sysctl net.ipv4.ip_forward),否则不会转发 - 某些云环境(AWS/Azure)里,安全组或 NSG 会拦截 ICMP 和转发流量,即使路由和内核参数都对,也不通
- 用
ip route get 10.20.30.100查真实选路结果,比ip route show更可靠——它模拟发包路径,能暴露下一跳不可达问题
实际配的时候,最常卡在「以为写对了配置,其实 netplan 缩进错两格」或者「RHEL 里 route-xxx 文件名拼错了接口名」,这两处没提示,只能手动核对。











