1 ip route和route -n的区别
ip route 和 route -n 都是用于查看和管理Linux系统路由表的命令。但下面是它们的区别:
- ip route:是Linux系统中的现代工具,它属于iproute2套件;它提供了更多的选项,可以更精确地控制路由表的管理。
- route -n:是传统的路由管理工具,它属于net-tools套件,它通常用于旧版的Linux系统;它的功能相对较少,选项也较为有限。
1.1 ip route的用法
[root@master-01 home]# ip route
default via 192.168.217.2 dev ens33
10.3.1.0/24 via 10.3.1.0 dev flannel.1 onlink
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1
【常用参数】解释:
- default:代表该条路由为默认路由;
- via ADDRESS:下一跳地址;
- 默认路由是指当系统无法匹配其他路由时,将数据包发送到指定的下一跳地址。
- dev NAME:输出的设备名称。
- src ADDRESS:指定数据包的源 IP 地址。
- metric:跳数,该条路由记录的质量,一般情况下,如果有多条到达相同目的地的路由记录,路由器会采用metric值小的那条路由。
【不常用参数】解释:
- proto:路由协议标识符,指示此路由的路由协议类型;
- kernel:表示该路由是由内核在自动配置期间安装的;
- proto kernel 的意思是指这个路由项是在自动配置阶段由kernel创建的。
- scope:指示路由表条目所覆盖的目的地范围;
- link:表示在设备的网络段内,可以通过此链接进行通信;
- scope link 的意思是 172.17.0.0/16 这个子网内的目标ip仅仅在 docker0 这个接口上有效。
- onlink是Linux路由表中的一个参数,表示路由应该“假装下一跳直接连接到这个链路,即使它不匹配任何接口前缀”。这意味着路由器会假设下一跳地址是直接连接的,即使它实际上并不是。这通常用于特殊的网络配置,例如在某些隧道设置中。onlink参数通常用于在路由表中创建虚拟路由。
第一行:
default via 192.168.217.2 dev ens33
此条路由为默认路由,也就是任何无路由报文都通过ens33 经由默认网关192.168.217.2 来转发。第二行:
10.3.1.0/24 via 10.3.1.0 dev flannel.1 onlink
首先,从该条路由可以表明:Flannel正在使用VXLAN或类似的技术来实现覆盖网络,这条路由的意思是:目的地址10.3.1.0/24通过flannel.1设备上的10.3.1.0进行路由。"onlink"选项表示该路由表项指定的目的地址是直接连接的,不需要经过网关。第三行:
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1
- 172.17.0.0/16:这是目的地,表示所有目的IP地址在192.168.1.0到192.168.1.255之间的数据包。
- dev eth0:这表示数据包将通过名为eth0的网络接口发送和接收。
- proto kernel:这表示这个路由是由内核自动添加的。
- scope link:这表示该路由仅对本地链路或直接连接的网络有效,而不可在公共互联网上路由。
- src 172.17.0.1:这指定了发送数据包时要使用的源IP地址。
因此,这个路由表条目告诉系统将目的IP地址在172.17.0.0/16范围内的数据包发送到名为docker0的网络接口,并使用源IP地址172.17.0.1。
1.2 route -n的用法
[root@master-01 home]# ip route
default via 192.168.217.2 dev ens33
10.3.0.0/24 dev cni0 proto kernel scope link src 10.3.0.1
10.3.1.0/24 via 10.3.1.0 dev flannel.1 onlink
169.254.0.0/16 dev ens33 scope link metric 1002
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1
192.168.217.0/24 dev ens33 proto kernel scope link src 192.168.217.129
[root@master-01 home]#
[root@master-01 home]#
[root@master-01 home]#
[root@master-01 home]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.217.2 0.0.0.0 UG 0 0 0 ens33
10.3.0.0 0.0.0.0 255.255.255.0 U 0 0 0 cni0
10.3.1.0 10.3.1.0 255.255.255.0 UG 0 0 0 flannel.1
169.254.0.0 0.0.0.0 255.255.0.0 U 1002 0 0 ens33
172.17.0.0 0.0.0.0 255.255.0.0 U 0 0 0 docker0
192.168.217.0 0.0.0.0 255.255.255.0 U 0 0 0 ens33
参数解释:
- Destination:目的网段;0.0.0.0 表示匹配任意网段。
- Genmask:子网掩码
- Gateway:默认网关;0.0.0.0 表示无网关,即与本地IP同一网段。
- Flags:标志位,U - Up表示有效 G - Gateway表示链接路由,若无这个字段,表示直连目的地址(本机)
- Metrics:跳数
- Iface:出口网卡,如果不属于本网段,那么通过Iface端口发送到Gateway地址
第一行的意思:就是去往所有目标地址数据包由网关 192.168.217.2 通过网卡ens33来转发,Flags那一列中有G时才会使用Gateway。
2 iproute2 对决 net-tools
如今很多系统管理员依然通过组合使用诸如ifconfig、route、arp和netstat等命令行工具(统称为net-tools)来配置网络功能,解决网络故障。net-tools起源于BSD的TCP/IP工具箱,后来成为老版本Linux内核中配置网络功能的工具。但自2001年起,Linux社区已经对其停止维护。同时,一些Linux发行版比如Arch Linux和CentOS/RHEL 7则已经完全抛弃了net-tools,只支持iproute2。
如果你仍在使用net-tools,而且尤其需要跟上新版Linux内核中的最新最重要的网络特性的话,那么是时候转到iproute2的阵营了。原因就在于使用iproute2可以做很多net-tools无法做到的事情。
对于那些想要转到使用iproute2的用户,有必要了解下面有关net-tools和iproute2的众多对比。