如果Linux系统同时有多个网卡,比如RJ45与WiFi时。就需要使用这个命令设置网络数据从哪个网卡走。
如我现在手上有一个嵌入式Linux系统,它同时有 eth0 与 wlan0 网络接口,即同时连了WiFi与RJ45。
我想只使用 eth0 有线的网络。
查看当前的路由表
使用 route -n 命令查看当前的路由设置:
上面显示的主要关注四个字段:
Destination,目前网络
Gateway,网关
Genmask,目标网络的mask
Iface,网络接口
其中 Flags 表示目标的状态:
U Up表示此路由当前为启动状态
H Host,表示此网关为一主机
G Gateway,表示此网关为一路由器
R Reinstate Route,使用动态路由重新初始化的路由
D Dynamically,此路由是动态性地写入
M Modified,此路由是由路由守护程序或导向器动态修改
! 表示此路由当前为关闭状态
设置路由表
在 route add|del 命令中主要使用对应的4个参数:
-net,对应 Destination
netmask,对应 Genmask。如果 -net 不是 0.0.0.0 那么该字段是必须的
gw,对应 Gateway。若不指定默认为 0.0.0.0,表示直接局域网通信,不需要路由器中转。
dev,对应 Iface
使用示例:
route del -net 0.0.0.0 # 删除默认目标
route add -net 0.0.0.0 gw 192.168.10.1 dev eth0
# 添加默认目标,网关为192.168.10.0,网络接口为eth0
route add -net 192.168.10.0 netmask 255.255.255.0 dev eth0
# 添加 192.168.10.0/255.255.255.0 目标网络的路由,无需网关(未指定gw),网络接口为eth0,该条路由是配置局域网设备的访问规则
route add -net 10.10.10.103 netmask 255.255.255.255 gw 192.168.10.1 dev eth0
# 添加指定目标地址的路由
"default" 等同于 "-net 0.0.0.0"
以下两者是等价的:
route add default gw 192.168.10.1 dev eth0
route add -net 0.0.0.0 gw 192.168.10.1 dev eth0
在 route del 时,只要能标定该条规则就可以。
其它注意事项:
同一个目标只能被添加一次,如下已存在 0.0.0.0,再次添加会报错:
删除所有的路由表
route -n | awk 'NR>2 {printf("route del -net %s gw %s netmask %s dev %s\n",$1,$2,$3,$8)}' | sh
添加路由表时,要注意顺序。必须按如下顺序配置:
route add -net 192.168.10.0 netmask 255.255.255.0 dev eth0
route add -net 0.0.0.0 gw 192.168.10.1 dev eth0
如果上述顺序反了,会出现以下错误:
因为系统不能访问到 192.168.10.1 地址上的网关(路由器)。所以,要先配置局域网内部的访问规则,再配局域网外的规则。