在 CentOS 7 里,ip route add 只会临时生效。想让路由真正“落地”,必须把配置写进 /etc/sysconfig/network-scripts/route-IFACE 文件,然后执行 systemctl restart network 重新加载。至于 route 命令,已经弃用了;而 /etc/rc.local 这类路径,也并不可靠。

ip route add 是添加静态路由最直接有效的方式,但是否“永久生效”取决于你用的是临时命令还是配置文件。CentOS 7 不再推荐 route 命令,它已被 ip route 取代;而永久路由必须写入配置文件,靠重启网络服务加载,不是靠 /etc/rc.local 或 static-routes 这类已弃用或不稳定的路径。
临时加一条路由:用 ip route add 最快验证
适合测试连通性、快速绕过默认网关、或调试多网卡场景。执行后立即生效,但重启或 systemctl restart network 后就消失。
ip route add 10.20.0.0/16 via 192.168.5.1 dev ens33—— 指定出接口,避免内核选错路径ip route add 172.16.1.100/32 via 192.168.10.254—— 主机路由,省略dev时内核会自动匹配(但不推荐依赖)ip route add default via 10.0.1.1 dev ens37—— 替换默认路由,注意别把原默认网关删了导致失联- 删错条目用
ip route del 10.20.0.0/16,查当前表用ip route show
永久生效:只认 /etc/sysconfig/network-scripts/route-IFACE
这是 CentOS 7 最新支持且唯一可靠的方式。其他路径如 /etc/sysconfig/static-routes 或 /etc/rc.local 在 systemd 环境下不可靠,部分版本甚至完全忽略。
- 确认网卡名:用
ip link show或ls /sys/class/net/查真实接口名(如ens192,不是eth0) - 创建文件:
vi /etc/sysconfig/network-scripts/route-ens192,内容写成一行一条,格式为目标网段/掩码 via 网关 dev 接口名 - 不要混用两种语法:比如不能在同一个
route-ens192文件里既有10.10.0.0/16 via 192.168.1.1 dev ens192,又有ADDRESS0=...这种传统三行式 - 保存后必须运行
systemctl restart network(不是service network restart),否则不加载
双网卡或策略路由场景:别漏掉 dev 和路由表隔离
当主机有多个网卡、多个默认网关,或需要让某网段流量走特定出口时,仅靠单条 via 不够,容易被内核按最长前缀匹配误选路径。
- 务必显式指定
dev,尤其在多网卡同网段或存在 secondary IP 时 - 如果已有默认路由,新加的非默认路由无需
metric;但若要覆盖默认行为,需配合table和ip rule,这时route-IFACE文件就不够用了 ip route show table main只看主路由表;策略路由要查ip route show table 100并配ip rule add from 192.168.2.0/24 table 100- 这种复杂情况建议先用
ip route add ... table 100临时验证,再写进/etc/iproute2/rt_tables和对应脚本
验证和排错:别只信 ip route show
看到路由条目不等于流量真能走通。常见失效原因不是语法错,而是网关不可达、接口未 up、或防火墙拦截 ICMP/转发。
- 先
ping网关本身(如ping 192.168.5.1),不通就说明链路层有问题 - 再
ping目标网段内一个已知存活的 IP(如ping 10.20.1.1),失败时用tcpdump -i ens33 icmp看包是否发出、是否有回包 ip route get 10.20.1.1能显示内核实际选择的下一跳和出接口,比ip route show更反映真实路径- 检查
sysctl net.ipv4.ip_forward是否为 1(仅当本机需充当中继时才需要)
nmcli 或 nmtui 修改过连接,network 服务可能压根不读 route-IFACE 文件。此时要么禁用 NetworkManager,要么改用 nmcli connection modify "System ens33" +ipv4.routes "10.20.0.0/16 192.168.5.1" 并 nmcli connection reload。