推荐使用ip route add添加临时路由,语法为sudo ip route add 目标网络/CIDR via 下一跳网关 dev 出接口 metric 优先级,支持CIDR、指定设备和优先级,现代Linux发行版均默认支持;route add已过时,参数易错且不支持CIDR。

直接改路由表,用 ip route add 就行;route add 虽能用,但已过时、参数易错、不支持 CIDR 写法,新环境别碰。
用 ip route add 添加临时路由(最常用)
这是当前 Linux 的标准做法,语法直白,支持 CIDR、可指定设备、可设 metric。所有现代发行版(包括 RHEL 8+/CentOS 8+、Ubuntu 18.04+、Debian 10+)都默认带 iproute2,无需额外安装。
-
ip route add必须用sudo或 root 执行,普通用户会报SIOCADDRT: Operation not permitted - 目标网段必须写成 CIDR 格式(如
10.20.30.0/24),不能写10.20.30.0 netmask 255.255.255.0 - 如果下一跳网关和本机不在同一子网,
dev参数可省略;但如果明确知道该走哪张网卡(比如多网卡服务器),加上dev eth0能避免内核选错出口 - 想控制优先级?加
metric 50,数值越小越优先;默认不写是 100
示例:让去 192.168.200.0/24 的包走网关 192.168.100.1,强制从 ens33 出:
sudo ip route add 192.168.200.0/24 via 192.168.100.1 dev ens33 metric 30
验证是否生效:ip route show | grep 192.168.200.0,看到对应条目即成功。
route add 还能用吗?能,但要小心这些坑
它没被完全移除,但行为不一致、参数逻辑反直觉,尤其在较新内核或容器环境中容易失败。
-
-net和-host必须显式指定,漏掉就变成主机路由(255.255.255.255掩码),整个网段变单点不可达 - 不支持
/24这种写法,必须拆成netmask 255.255.255.0,手误输成255.255.0.0很难排查 - 某些发行版(如 Fedora 35+)默认不装
net-tools包,直接运行route会报command not found - 添加默认路由时,
route add default gw 192.168.1.1看似简单,但若系统已有 DHCP 分配的默认路由,新路由可能因 metric 更高而被忽略
真要用,只建议在旧系统维护或兼容性测试场景下,并始终搭配 route -n 验证标志位是否为 U(up)和 G(gateway)。
怎么让路由重启后还在?看你的系统用什么网络管理器
临时命令加的路由,只要机器重启或网卡重载就消失。持久化不是“统一写个配置”,而是取决于底层网络管理机制:
- Ubuntu/Debian(Netplan):改
/etc/netplan/*.yaml,在对应接口下加routes块,然后sudo netplan apply - RHEL/CentOS 7/8(NetworkManager):用
nmcli最稳,例如sudo nmcli connection modify "System eth0" +ipv4.routes "192.168.200.0/24 192.168.100.1",再sudo nmcli connection reload && sudo nmcli connection down "System eth0" && sudo nmcli connection up "System eth0" - 传统 SysVinit 系统(如 CentOS 6):写
/etc/sysconfig/network-scripts/route-eth0,内容为192.168.200.0/24 via 192.168.100.1 dev eth0
别往 /etc/rc.local 里硬塞 ip route add —— 在 systemd 环境下,rc.local 可能比网络服务启动还早,命令执行时网卡还没 up,路由加不进去。
删错路由或想清空?别用 flush 全删
ip route flush table main 会把整个主路由表清空,包括默认网关和本地直连路由,立刻断网。这不是调试手段,是事故操作。
- 只删某一条:用
ip route del 192.168.200.0/24,精确匹配即可 - 删默认路由:明确写
ip route del default via 192.168.1.1,别只写default,否则可能误删其他默认路由 - 不确定加了多少条?先
ip route show table main | grep -E "(192\.168\.200|via)"锁定范围再删
真正麻烦的是多路径、策略路由或自定义路由表(table 200、201…),那种场景下 ip route show table X 和 ip rule show 必须一起看,单看 ip route show 会漏掉关键规则。



















