您的位置:首页 >Linux怎么配置静态路由永久生效 Linux下route与ip命令详解
发布于2026-04-29 阅读(0)
扫一扫,手机访问

很多朋友在配置Linux静态路由时,都踩过同一个坑:明明用route命令加得好好的,怎么一重启服务器,路由就“消失”了呢?
这里必须明确一个核心概念:无论是传统的route命令,还是更现代的ip route,它们所做的修改都仅限于当前运行的内核,属于“临时操作”。想让路由配置在系统重启后依然坚挺,必须依赖系统层面的配置文件或网络管理机制。下面,我们就来把这两类工具和不同系统的永久配置方法彻底讲清楚。
先说说这位“老前辈”。route命令语法直观,上手快,但功能也相对受限。它直接操作内核路由表,完全不参与系统的启动流程。举个例子,你执行了route add -net 10.20.0.0/16 gw 10.10.1.1,用route -n查看,条目确实立刻出现了。但只要执行一次systemctl restart network,或者干脆重启机器,这条路由就会被打回原形。
正因为这种“临时性”,一些让人头疼的错误现象就出现了:
ping 10.20.0.1就是不通——问题可能出在网关本身不可达,而route命令可不会帮你校验网关的连通性。route同样不会给出任何优先级提示。route del删除路由,却报错SIOCDELRT: No such process——这通常是删除时指定的目标格式不匹配,比如添加时用了-net参数,删除时却没带netmask。使用route时,有几个参数细节必须留意:
-host(主机路由)和-net(网络路由)必须显式指定,不能省略。直接写route add 10.20.0.0/16是会报错的。gw(网关)和dev(出口设备)两者不能同时省略,至少得填一个。如果只写dev eth0,意思是指向直连子网,数据包不经过网关。-n参数不是可选项,而是强烈建议加上。不加的话,命令会尝试进行DNS反向解析,在缺乏DNS服务的环境里,这个动作会卡住很久。如果你需要做临时路由调整,那么ip route(来自iproute2工具套件)通常是更好的选择。它比route更现代,参数设计也更统一。添加同一条路由,命令是ip route add 10.20.0.0/16 via 10.10.1.1 dev eth0,你看,不需要区分-net,也不需要写netmask,直接支持CIDR格式,清爽多了。
它确实解决了route的一些痛点:
ip route del 10.20.0.0/16就行,不必把添加时的via和dev参数再重复写一遍。metric 100),或者用ip route replace直接替换已存在的条目。ip -6 route即可,而在很多老版本系统里,route -6这个命令根本不存在。不过,请务必记住关键一点:ip route本质上和route一样,它只修改运行时的路由表,并不会将配置写入任何文件。所以,它依然是“临时”的。
那么,在CentOS或RHEL 6/7这类使用传统network-scripts的系统里,永久路由到底怎么配?答案是依靠/etc/sysconfig/static-routes这个文件。它不是脚本,而是一个纯文本的规则集,系统服务/etc/sysconfig/network-scripts/ifup-routes会在网络接口启动时自动读取并加载它。
文件内容的正确写法是这样的:
any net 10.20.0.0/16 gw 10.10.1.1 any net 192.168.5.0/24 dev eth1
这里有几个关键点需要敲黑板:
any开头,不要再写eth0之类的具体接口名(那是已经被弃用的旧版写法)。/16),虽然net 10.20.0.0 netmask 255.255.0.0这种写法也合法。#开头的注释行会被忽略。systemctl restart network,RHEL6用service network restart)才能生效,简单的reload是不行的。另外,千万别图省事,把route add命令塞进/etc/rc.local。因为像NFS挂载、容器网络这些服务,它们的启动顺序可能早于rc.local,届时会因为找不到路由而失败。
如果你用的是Ubuntu 18.04以上或Debian 10以上的系统,那套方法就完全行不通了。这些系统默认使用Netplan管理网络,静态路由必须写在/etc/netplan/*.yaml配置文件里。
来看一个典型的配置片段:
network:
version: 2
ethernets:
eth0:
addresses: [10.10.1.10/24]
routes:
- to: 10.20.0.0/16
via: 10.10.1.1
on-link: true
配置Netplan时,有几个细节容易出错:
on-link: true这个选项表示网关与本机在同一子网,发包时不查询ARP缓存。如果网关在另一个子网,这项必须删除或设为false。metric值来避免冲突。sudo netplan apply来应用。注意,这个命令会重新配置所有网络接口,很可能导致当前的SSH连接中断。最后提一个通用且极易被忽略的要点:无论是static-routes还是Netplan,配置系统都不会在写入时验证网关的可达性。即使你配置的gw 192.168.99.1当前根本ping不通,路由条目依然会被成功添加到系统里,只是所有转发尝试都会失败。因此,排查路由问题时,别只看ip route show有没有那条记录,更要用ip route get 10.20.0.5这样的命令,去查看到达目标地址的真实下一跳路径。
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
4
5
6
7
8
9