route
route
命令在Linux中被用于显示和操纵IP路由表。然而,现在大部分Linux发行版都推荐使用ip route
命令代替route
,因为ip route
提供更多的功能和更灵活的控制。以下是
route
命令的基本用法:
查看路由表:
route -n
这个命令显示当前机器的路由表。-n
标志意味着数字形式的网络地址,而不是尝试解析主机名。添加路由:
route add -net 192.168.1.0 netmask 255.255.255.0 gw 192.168.1.1 dev eth0
这个命令添加一个网络路由,将192.168.1.0/24网络的数据包通过192.168.1.1的网关发送,通过eth0
接口。删除路由:
route del -net 192.168.1.0 netmask 255.255.255.0 gw 192.168.1.1
这个命令删除上面添加的路由规则。注意:
route
命令修改的路由表在重启后会丢失,如果你想永久添加或删除路由,需要将其添加到网络配置文件或者启动脚本中。尽管
route
命令依然可以使用,但现代Linux系统中,大多数情况下都推荐使用ip route
命令,因为它提供了更多的功能和更好的控制。例如,你可以使用
ip route show
来查看路由表,使用ip route add 192.168.1.0/24 via 192.168.1.1 dev eth0
来添加路由,使用ip route del 192.168.1.0/24 via 192.168.1.1
来删除路由。另外,
ip route
命令还支持更多的选项和参数,如源路由,策略路由等,这使得它比route
命令更强大、更灵活。
# 修改路由表信息; metric是优先级; 修改的话必须能匹配到才可以修改 ip route change 172.16.193.0 via 0.0.0.0 metric 300 dev veth01 # 删除路由表 ip route del 172.16.193.0 via 0.0.0.0 dev veth01 # 添加路由表 ip route add 172.16.193.0/24 via 0.0.0.0 dev veth01
路由信息解读
route Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface default gateway 0.0.0.0 UG 100 0 0 ens33 172.16.193.0 0.0.0.0 255.255.255.0 U 100 0 0 ens33 192.168.122.0 0.0.0.0 255.255.255.0 U 0 0 0 virbr0 [root@centos133 ~]# ip route show default via 172.16.193.2 dev ens33 proto static metric 100 172.16.193.0/24 dev ens33 proto kernel scope link src 172.16.193.133 metric 100 192.168.122.0/24 dev virbr0 proto kernel scope link src 192.168.122.1
-
default via 172.16.193.2
指定了默认路由,也就是说,所有不符合下面任何一条路由规则的数据包都将发送到 172.16.193.2 这个地址。 -
dev ens33
表示数据包将通过 ens33 网络接口发送。 -
proto dhcp
表示这条路由是由 DHCP 协议添加的。 -
proto kernel
: 表示此条路由条目是内核添加的。 -
scope link
: 这意味着这个网络是直接相连的,我们可以直接通过相应的接口发送数据包,不需要通过其他路由器。 -
src 172.16.193.133
表示源地址是172.16.193.133。 -
`172.16.193.0/24 dev ens33 表示所有目标地址在 172.16.193.0/24 子网中的数据包都将通过 ens33 网络接口发送。
在分析网络问题时,你可以检查以下几点:
-
查看默认路由:默认路由是当数据包的目标 IP 地址不匹配任何特定路由时,数据包会发送到的地方。确保默认路由的网关是可达的并且正确配置。
-
查看特定的路由条目:如果你在访问某个特定的网络或者主机时遇到问题,你应该查看路由表中相应的条目。如果没有找到相应的条目,你可能需要添加一条新的路由。
-
查看网络接口:确保路由条目指定的网络接口是可用的。你可以使用
ip link show
命令来查看网络接口的状态。 -
检查网络连接:使用
ping
或traceroute
命令检查网络连接。如果你无法连接到路由的网关,那么你可能需要检查网络连接或者网关的配置。 -
你的目标 IP 地址(即虚拟机的 IP 地址)应在路由表的某个网络地址范围内。也就是说,应存在一条路由条目,其网络地址包含了你的目标 IP 地址。
-
检查该路由条目是否指向正确的网络接口。如果你在虚拟机上设置了 veth 网络接口,那么路由应该通过这个接口。
-
如果虚拟机在网络上使用了 NAT,那么还需要检查宿主机的路由表,看看是否有指向虚拟机 NAT 地址的路由。
在 macOS 上,可以使用 netstat -rn
命令查看路由表。
路由表解读
以下是一个典型的路由表输出例子:
Internet: Destination Gateway Flags Refs Use Netif Expire default 192.168.1.1 UGSc 76 1 en0 127 127.0.0.1 UCS 0 0 lo0 127.0.0.1 127.0.0.1 UH 5 41894 lo0 169.254 link#4 UCS 0 0 en0 192.168.1 link#4 UCS 3 0 en0 192.168.1.1/32 link#4 UCS 2 0 en0 192.168.1.1 0:1f:c6:4f:31:55 UHLWIir 77 443 en0 1199 192.168.1.3 127.0.0.1 UHS 0 0 lo0 192.168.1.103 127.0.0.1 UHS 0 0 lo0
每一行代表一个路由项,具体解释如下:
-
Destination: 数据包的目标网络或主机。
-
Gateway: 数据包将要经过的下一跳路由器的 IP 地址。
link#4
或127.0.0.1
这样的值表示数据包将直接发送到目标,不通过其他路由器。 -
Flags: 路由选项标志。重要的有
U
(Up),表示路由可用,G
(Gateway) 表示要经过一个网关(也就是另一个路由器),H
(Host) 表示目标是一个主机而不是一个网络,S
(Static) 表示这是一个静态路由,手动添加的,不会随着路由协议的变化而变化。 -
Refs: 该路由项被多少个 socket 引用。
-
Use: 该路由项被使用的次数。
-
Netif: 输出接口名称,比如
en0
或lo0
。en0
通常代表以太网接口,lo0
代表本地回环接口。 -
Expire: 路由项过期的时间。这通常在动态路由中使用,表示该路由项在多少秒后过期。
-
Link#4类似的含义:
link#4
表示的是第四个网络接口。这个数字是网络接口在系统中的注册顺序,并不一定代表其名称。例如,en0,en1,en2,lo0等可能对应不同的link#编号。 -
四个0(0.0.0.0)在路由表中通常表示默认网关,它用于将所有未明确指向其他路由的流量发送到指定的网络设备。
0.0.0.0
通常表示“任何网络地址”或“不确定的网络地址”。Gateway 是0.0.0.0
:这通常表示这是一个直连网络,也就是说,这个路由项是指向一个在同一网络段内的目标,不需要通过网关就可以直接达到。 -
Genmask 是
255.255.255.0
:这是一个子网掩码,表示该网络的 IP 地址的前 24 位被用于网络地址,后 8 位被用于主机地址。这意味着该网络可以包含的 IP 地址范围是该网络的x.x.x.0
到x.x.x.255
,其中x.x.x.0
代表网络地址,x.x.x.255
代表广播地址,其余地址可分配给主机。例如,如果网络地址是192.168.1.0
,那么这个网络的主机地址可以是192.168.1.1
到192.168.1.254
。 -
Genmask 是
0.0.0.0
:这通常是一个默认路由,表示任何网络或主机地址都匹配这条路由。通常默认路由的目的地址也是0.0.0.0
,意味着当没有任何其他路由匹配目标IP时,就使用这条默认路由。 -
子网掩码,比如/24,它是子网掩码的一种表示方式,也被称为CIDR(无类别域间路由)标记。/24意味着前24位(也就是前三个字节)用于网络地址,最后的8位(最后一个字节)则用于主机地址。因此,一个/24网络可以容纳256个地址,其中包括网络地址和广播地址,实际可用的主机地址为254个。
-
"Bogon" 是一个网络术语,通常用来描述非法或者未分配的 IP 地址。在 Internet 世界中,有一部分 IP 地址因为特殊的原因被保留,不应该出现在公开的 Internet 路由表中,这些地址被称为 "bogon IP"。
当在路由表中看到 gateway 是 "bogon",这可能意味着这个路由条目的下一跳(gateway)是一个无法在公网中正常路由的 IP 地址。这种情况可能会出现在以下几种场景:
-
这是一个私有网络的环境,比如企业内部网络或者你自己的家庭网络。在这种环境下,你可能会使用到一些在公网中是无效的 IP 地址,比如 10.0.0.0/8,172.16.0.0/12,192.168.0.0/16 等地址段。
-
网络配置出现了错误,比如误将一个无效的 IP 地址设置成了 gateway。
如果你不希望看到 "bogon",那么你可能需要检查一下你的网络配置,确保你的路由表中所有的 gateway 都是有效的 IP 地址。
-
veth10@if10
这样的输出表示这是一个veth设备,它的名字是veth10,@if10
表示它与另一端的设备(即它的对端设备,pair)相连,那一端的内部接口编号是10。 -
default via 172.16.193.2 dev ens33 proto static metric 100
proto static
表示这个路由条目是静态配置的。换句话说,这条路由并不是通过动态路由协议(如OSPF,RIP,BGP等)学习得到的,而是人工配置的。一般来说,这些路由在系统启动时就由网络配置脚本配置好,或者由网络管理员手动配置。proto
字段表示路由条目的来源协议。ip route show
命令可能显示的proto
字段的值包括但不限于:-
boot
:路由在引导期间设置。 -
static
:路由是静态配置的。 -
dhcp
:路由是通过DHCP协议动态获取的。 -
ra
:路由是通过IPv6的路由通告(Route Advertisement)消息动态获取的文章来源:https://www.toymoban.com/news/detail-763564.html
-
-
为了检查两个设备间的连通性,你需要查看路由表中是否存在一条能够到达目标设备的路由项。这条路由项应当通过正确的网络接口,并指向正确的网关(如果需要)。此外,需要注意路由项的标志是否正确,特别是 U
标志,表示路由是否可用。文章来源地址https://www.toymoban.com/news/detail-763564.html
到了这里,关于route命令 路由表 Linux Centos的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!