linux路由配置需区分临时与永久:route命令仅临时生效,rhel/centos用/etc/sysconfig/network-scripts/route-ethx,debian/ubuntu用/etc/network/interfaces或systemd-networkd;多网卡需策略路由ip rule+ip route。

Linux 路由配置不是“设一次就完事”,临时命令和永久生效的写法完全不同,且不同发行版(如 RHEL/CentOS 与 Debian/Ubuntu)的持久化路径、机制也不一致。直接改 /etc/rc.local 或硬写 route add 很可能在网卡重启后失效,甚至干扰 DHCP 行为。
route 命令只做临时调试,别当永久方案用
route 是传统工具,操作简单但不持久。它修改的是内核当前路由表,所有变更在下次 systemctl restart networking、ifdown/ifup 或系统重启后全部丢失。
- 添加主机路由:
route add -host 10.10.20.5 gw 10.10.10.1 - 添加网段路由:
route add -net 172.16.30.0/24 gw 10.10.10.1 - 加默认网关(慎用,多网卡时易冲突):
route add default gw 10.10.10.254 - 查看效果必须加
-n避免 DNS 查询拖慢:route -n
常见错误:用 dev eth0 替代 gw 指定下一跳——这仅适用于直连子网(如 192.168.1.0/24),跨子网必须用 gw;否则报 SIOCADDRT: Network is unreachable。
CentOS/RHEL 系统用 route-ethX 文件配永久路由
Red Hat 系生态(含 CentOS 7/8、RHEL 7+)通过网卡级配置文件管理静态路由,路径是 /etc/sysconfig/network-scripts/route-eth0(对应网卡名)。该方式由 network 服务自动加载,兼容 DHCP 和手动 IP。
- 文件内容格式严格:一行一条路由,不能有空行或注释行(# 开头会被忽略但不推荐)
- 支持两种语法:
10.20.30.0/24 via 10.10.10.1(推荐)或ADDRESS0=10.20.30.0; NETMASK0=255.255.255.0; GATEWAY0=10.10.10.1 - 若网卡使用 DHCP,需确认其配置文件
/etc/sysconfig/network-scripts/ifcfg-eth0中含PEERROUTES=no,否则 DHCP 获取的路由会覆盖你写的 - 改完后必须重启网络服务:
systemctl restart network(不是systemctl restart networking)
注意:route-ethX 文件必须与真实网卡名完全一致(如 ens33 就得叫 route-ens33),且对应 ifcfg-ethX 文件必须存在——虚拟机里新添网卡常缺这个,得先补上。
Debian/Ubuntu 用 /etc/network/interfaces 或 systemd-networkd
Debian 系不认 route-ethX,老版本靠 /etc/network/interfaces 的 up route add 指令;新版本(Ubuntu 20.04+ 默认用 systemd-networkd)则走 /etc/systemd/network/*.network 文件。
- interfaces 方式(仍可用):
auto eth0<br>iface eth0 inet static<br> address 192.168.5.10<br> netmask 255.255.255.0<br> up route add -net 10.1.1.0/24 gw 192.168.5.1<br> down route del -net 10.1.1.0/24 gw 192.168.5.1
- systemd-networkd 方式(更现代):
在/etc/systemd/network/10-eth0.network里加:[Route]<br>Destination=10.1.1.0/24<br>Gateway=192.168.5.1
- 无论哪种,改完都得
sudo systemctl restart systemd-networkd或ifdown eth0 && ifup eth0
关键点:Ubuntu 18.04 后默认启用 cloud-init,它可能覆盖手工写的路由——检查 /etc/cloud/cloud.cfg.d/ 下是否有网络相关配置。
多网卡策略路由必须用 ip rule + ip route
当一台机器有多个公网 IP(比如 eth0 走电信、eth1 走联通),仅靠默认路由表无法实现“源地址决定出口”。这时必须用策略路由(policy routing),核心是 ip rule 和 ip route 配合自定义路由表。
- 先在
/etc/iproute2/rt_tables末尾加两行:200 telecom<br>201 unicom
- 然后分别建表并加规则:
ip route add default via 202.96.1.1 dev eth0 table telecom<br>ip route add 202.96.0.0/16 dev eth0 table telecom<br>ip rule add from 202.96.10.5 table telecom
- 规则优先级数字越小越先匹配,避免和系统默认规则(32766 main, 32767 default)冲突
- 这些命令仍不持久,要写进
/etc/rc.local或封装成 systemd service
最容易被忽略的是:策略路由下,ip route show 只显示 main 表;查自定义表得用 ip route show table telecom,而排错时很多人卡在这一步,以为没生效。











