route add命令用于在linux中添加静态路由,需用sudo权限;-net指定网段、gw指定网关、dev限定接口、metric设置优先级,临时路由重启失效,持久化需写入rc.local或static-routes文件。

要在Linux服务器上让发往特定网段的流量走指定网关,必须用route add命令手动写入路由表,否则系统根本不知道该把包发给谁——这不是靠DHCP或网卡配置能自动解决的事。
添加网络路由(最常用场景)
第一步:确认目标网段、子网掩码和下一跳网关IP。比如要把去10.20.30.0/24的数据全交给192.168.1.254转发。
第二步:执行命令:sudo route add -net 10.20.30.0 netmask 255.255.255.0 gw 192.168.1.254。
第三步:立即验证是否生效:route -n | grep 10.20.30.0,看到对应条目且UG标志位为“U”(up)和“G”(gateway)才算成功。
注意:-net参数不能省略,否则系统会误判为单台主机路由;若漏写netmask,route会默认用255.255.255.255,导致整个网段变单点不可达。
添加主机路由(精确控制某台设备)
方法一:直接指定目标主机IP加网关sudo route add -host 172.16.5.101 gw 192.168.10.1
方法二:不依赖网关,强制从某网卡直连(适用于同网段设备)sudo route add -host 172.16.5.101 dev eth1
【必须用sudo】普通用户无权修改内核路由表,直接运行会报“SIOCADDRT: Operation not permitted”。
指定出口网卡并设置优先级
当机器有多个物理网卡(如eth0、ens33、bond0),必须明确告诉系统走哪条路,否则可能选错接口造成丢包。
执行:sudo route add -net 192.168.200.0/24 gw 192.168.1.1 dev ens33 metric 20
这里/dev ens33限定仅通过该接口发送,metric 20确保它比默认metric 1的主路由优先级低——避免抢走所有流量。如果设成metric 1,而主路由也是1,系统行为将不确定。
添加默认路由(慎用!)
只在没有DHCP分配默认网关、或需临时覆盖原有默认路由时使用:
sudo route add default gw 10.0.0.1
这条命令会把所有未匹配其他路由的流量都扔给10.0.0.1。如果当前已有默认路由,新添加的会并存,但实际生效的是metric值最小的那个。重复添加会导致路由表混乱,务必先route -n | grep '^0.0.0.0'确认现状。
让路由重启后仍然有效
route add添加的路由是临时的,系统重启或network服务重载后即消失。要持久化,有两个主流方案:
方案一:写入/etc/rc.local(适用于大多数发行版)
在exit 0前插入一行:/sbin/route add -net 192.168.50.0 netmask 255.255.255.0 gw 192.168.1.254,保存后赋予可执行权限:chmod +x /etc/rc.local。
方案二:使用/etc/sysconfig/static-routes(RHEL/CentOS系标准做法)
创建文件:echo "any net 192.168.50.0 netmask 255.255.255.0 gw 192.168.1.254" > /etc/sysconfig/static-routes,然后重启network服务:systemctl restart network。











