显示/操作IP路由表
命令语法格式
路由表查看命令:
route [-CFvnNee] [-A family]
路由表新增命令:
route [-v] [-A family] add [-net|-host] target [netmask Nm] [gw Gw] [metric N] [mss M] [window W] [irtt I] [reject] [mod] [dyn] [reinstate] [[dev] If]
路由表删除命令:
route [-v] [-A family] del [-net|-host] target [gw Gw] [netmask Nm] [metric M] [[dev] If]
帮助命令:
route [-V] [–version] [-h] [–help]
注意事项:
使用add或者del选项来修改路由表。如果没有指定这些选项,则route显示当前路由表的内容。
命令描述
命令route用于操作内核的IP路由表。主要用途是在使用ifconfig(8)配置了接口以后,设置通过接口到达主机或者网络的静态路由。
命令行选项
-A family
使用指定的地址族,比如“inet”。可以使用“-6”来表示“–inet6”;使用“-4”代表“-A inet”。使用route –help可以看到所有可用的地址族。
-F
在内核的FIB(Forwarding Information Base)上进行操作。这是默认的。
-C
在内核的路由缓存上执行操作。
-v
显示更详细的操作信息。
-n/-N
显示数值类型的地址,而不是地址指向的主机名。在确定为什么到域名服务器的路由消失了时非常有用。
-e
使用netstat(8)的格式来显示路由表。-ee会显示路由表中所有的参数。
del
删除一个路由。
add
添加一个新的路由。
<target>
目的网络或者主机。该值可以是一个IP地址、符号网络、主机名。你可以使用“/prefixlen”的格式来代替netmask选项。
-net
表示<target>是一个网络。
-host
表示<target>是一个主机。
netmask <NM>
当添加网络路由时,指定netmask来决定网域的大小。
gw <GW>
命令gw是gateway的简写。用于指定网关的IP地址。
注意:指定的网关必须是可达的。这通常意味着必须事先设置到网关的静态路由。如果指定了一个本地接口的地址,那么它将用于决定要将数据包路由到哪个网络接口。这是为了BSDism兼容性。
metric M
设置路由表(由路由守护进程使用)中的metric字段为M。如果该选项没有指定M,则对于IPv6为默认为“1”,对于IPv4默认为“0”。你应该指定一个明确的metric值,而不应该依赖于默认值,它们也区别于iproute2。
mss M
设置当前路由的MTU(Maximum Transmission Unit)为M字节。注意:当前route命令的实现中,不允许选项设置MSS。
reject
设置一个阻塞路由,这将强制路由查找失败。例如,在使用默认路由之前,它用于屏蔽网络。该设置不是为了扮演防火墙的角色。
mod, dyn, reinstate
安装动态或修改的路由。这些标志用于诊断目的,并且通常只由路由守护进程设置。
dev <If>
强制路由与指定的设备<If>相关联,因为内核将以其他方式尝试自行确定设备(通过检查已有的路由和设备规范,以及路由的添加位置)。在大多数正常的网络中,你不需要这样做。
如果dev是命令行上的最后一个选项,则dev可以被忽略,直接指定<If>即可,因为它是默认的。另外路由修改命令(metric netmask gw dev)的顺序并不重要。
专用于设置AX.25网络的选项
下面的这些选项与AX.25网络有关:
window W
设置为这条路由上的TCP连接的TCP窗口大小为W。这只能用于AX.25网络,并且驱动无法处理回帧。
irtt I
设置这条路由上的TCP连接的初始往返时间(irtt)为I毫秒(1-12000)。这是通常只用于AX.25网络。如果省略默认使用RFC 1122中默认的300ms。
命令输出字段
执行route命令及输出如下:
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface MSS Window irtt
0.0.0.0 10.10.29.1 0.0.0.0 UG 0 0 0 enp1s0 0 0 0
10.10.2.0 0.0.0.0 255.255.254.0 U 0 0 0 wlp0s2 0 0 0
10.10.29.0 0.0.0.0 255.255.255.0 U 0 0 0 enp1s0 0 0 0
10.10.50.0 10.10.29.1 255.255.255.0 UG 0 0 0 enp1s0 0 0 0
103.213.249.202 10.10.2.1 255.255.255.255 UGH 0 0 0 wlp0s2 0 0 0
内核路由表的输出(如上)按以下字段进行组织:
Destination 目的网络或者目的主机。
Gateway 网关地址。如果没有设置,为“*”。
Genmask 用于目的网络的掩码。当Destination为一个主机时,Genmask为”255.255.255.255“;默认路由的Genmak为“0.0.0.0”。
Flags 可能的Flags如下:
- U: 该路由是激活的;
- H: 目标是一个主机,而不是一个网络;
- G: 需要使用网关来发送数据包;
- R: 为动态路由恢复路由;
- D: 由守护进程或重定向来动态安装;
- M: 从路由守护程序或重定向来修改;
- A: 由addrconf安装;
- C: 缓存的条目;
- !: 拒绝路由。该路由的数据包将会被拒绝;
Metric 到目标的“距离”(通常用跳数计算)。
Ref 此路由的引用数。(未在Linux内核中使用)。
Use 对于路由查找计数。根据-F和-C的使用,该列分别显示路由缓存未命中(-F)或命中(-C)数。
Iface 将为此路由发送数据包的网络接口。
MSS 该路由上的TCP连接的默认最大的MSS值。
Window 该路由上的TCP连接的默认窗口值。
irtt 初始的RTT(往返时间,Round Trip Time)。内核使用该参数来猜测最佳的TCP协议参数,而无需等待响应(可能比较慢)。
HH (只对于缓存)ARP条目和指向用于缓存路由的硬件头缓存的缓存路由的数目。如果缓存路由的接口不需要硬件地址(如lo),该值将为“-1”。
Arp (只对于缓存)用于缓存路由的硬件地址是否是最新的。
使用示例
# route add -net 127.0.0.0 netmask 255.0.0.0 metric 1024 dev lo
添加一个普通的回环条目,使用的掩码为255.0.0.0,并关联设备”lo”。注意:只有lo被正确设置了(比如,使用ifconfig(8)),才能做为dev的参数。
# route add -net 192.56.76.0 netmask 255.255.255.0 metric 1024 dev eth0
# route add -net 192.56.76.0 netmask 255.255.255.0 metric 1024 eth0
添加一个通过“eth0”,到本地192.56.76.x网络的路由。
如第二条命令中的那样,如果dev是最后一个参数,则可以省略。
# route del default
删除当前默认路由,即当前路由表中destination字段为default(没有使用-n时的显示)或者0.0.0.0(使用了-n时的显示)的那一条。
# route del -net 192.56.76.0 netmask 255.255.255.0
删除路由。由于Linux路由内核使用了经典地址,你需要指定netmask选项,并且netmask的值要与路由表中项对应(route -n查看)条目的netmask相同。
# route add default gw mango
添加一个默认路由。如果没有匹配到相应的路由,则会使用该默认路由。使用该路由的所有数据包将会通过名为“mango”的节点的地址。实际将用于该路由的装置,取决于我们如何才能达到“mango”。“mango”必须是直接可达路由。
# route add mango sl0
假设“mango”是SLIP主机,该命令添加通过SLIP接口到达名为mango的主机的路由。
# route add -net 192.57.66.0 netmask 255.255.255.0 gw mango
该命令添加网络”192.57.66.x”通过之前的路由到SLIP接口。
# route add -net 224.0.0.0 netmask 240.0.0.0 dev eth0
设置所有的D类IP地址路由都通过“eth0”。这是一个已记载的晦涩难懂,所以人们知道怎么做。
这是多播内核里的一条正确的普通配置。
# route add -net 10.0.0.0 netmask 255.0.0.0 metric 1024 reject
设置一个拒绝路由,用于私有网络”10.x.x.x.”。
# route -6 add 2001:0002::/48 metric 1 dev eth0
添加一个直接可达的IPv6路由规则,使用指定的metric,并通过eth0。
相关文件
/proc/net/ipv6_route
/proc/net/route
/proc/net/rt_cache
相关手册
ifconfig(8), netstat(8), arp(8), rarp(8), ip(8)
参考文献
- man 8 route, version net-tools 2.10-alpha
- 鳥哥的Linux私房菜/5.1.2 路由修改:route
- 官方route命令手册
更新日志
- 08/06/2017 创建文章
- 07/28/2018 文章内容调整。