route命令 路由表 Linux Centos

route

route命令在Linux中被用于显示和操纵IP路由表。然而,现在大部分Linux发行版都推荐使用ip route命令代替route,因为ip route提供更多的功能和更灵活的控制。

以下是route命令的基本用法:

  1. 查看路由表 : route -n 这个命令显示当前机器的路由表。-n标志意味着数字形式的网络地址,而不是尝试解析主机名。

  2. 添加路由 : 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接口。

  3. 删除路由 : 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 网络接口发送。

在分析网络问题时,你可以检查以下几点:

  1. 查看默认路由:默认路由是当数据包的目标 IP 地址不匹配任何特定路由时,数据包会发送到的地方。确保默认路由的网关是可达的并且正确配置。

  2. 查看特定的路由条目:如果你在访问某个特定的网络或者主机时遇到问题,你应该查看路由表中相应的条目。如果没有找到相应的条目,你可能需要添加一条新的路由。

  3. 查看网络接口 :确保路由条目指定的网络接口是可用的。你可以使用 ip link show 命令来查看网络接口的状态。

  4. 检查网络连接 :使用 pingtraceroute 命令检查网络连接。如果你无法连接到路由的网关,那么你可能需要检查网络连接或者网关的配置。

  5. 你的目标 IP 地址(即虚拟机的 IP 地址)应在路由表的某个网络地址范围内。也就是说,应存在一条路由条目,其网络地址包含了你的目标 IP 地址。

  6. 检查该路由条目是否指向正确的网络接口。如果你在虚拟机上设置了 veth 网络接口,那么路由应该通过这个接口。

  7. 如果虚拟机在网络上使用了 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#4127.0.0.1 这样的值表示数据包将直接发送到目标,不通过其他路由器。

  • Flags : 路由选项标志。重要的有 U (Up),表示路由可用,G (Gateway) 表示要经过一个网关(也就是另一个路由器),H (Host) 表示目标是一个主机而不是一个网络,S (Static) 表示这是一个静态路由,手动添加的,不会随着路由协议的变化而变化。

  • Refs: 该路由项被多少个 socket 引用。

  • Use: 该路由项被使用的次数。

  • Netif : 输出接口名称,比如 en0lo0en0 通常代表以太网接口,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.0x.x.x.255,其中 x.x.x.0 代表网络地址,x.x.x.255 代表广播地址,其余地址可分配给主机。例如,如果网络地址是 192.168.1.0,那么这个网络的主机地址可以是 192.168.1.1192.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 地址。这种情况可能会出现在以下几种场景:

    1. 这是一个私有网络的环境,比如企业内部网络或者你自己的家庭网络。在这种环境下,你可能会使用到一些在公网中是无效的 IP 地址,比如 10.0.0.0/8,172.16.0.0/12,192.168.0.0/16 等地址段。

    2. 网络配置出现了错误,比如误将一个无效的 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)消息动态获取的

为了检查两个设备间的连通性,你需要查看路由表中是否存在一条能够到达目标设备的路由项。这条路由项应当通过正确的网络接口,并指向正确的网关(如果需要)。此外,需要注意路由项的标志是否正确,特别是 U 标志,表示路由是否可用。

相关推荐
寻星探路9 小时前
【深度长文】万字攻克网络原理:从 HTTP 报文解构到 HTTPS 终极加密逻辑
java·开发语言·网络·python·http·ai·https
七夜zippoe12 小时前
CANN Runtime任务描述序列化与持久化源码深度解码
大数据·运维·服务器·cann
盟接之桥12 小时前
盟接之桥说制造:引流品 × 利润品,全球电商平台高效产品组合策略(供讨论)
大数据·linux·服务器·网络·人工智能·制造
会员源码网12 小时前
理财源码开发:单语言深耕还是多语言融合?看完这篇不踩坑
网络·个人开发
米羊12113 小时前
已有安全措施确认(上)
大数据·网络
Fcy64813 小时前
Linux下 进程(一)(冯诺依曼体系、操作系统、进程基本概念与基本操作)
linux·运维·服务器·进程
袁袁袁袁满13 小时前
Linux怎么查看最新下载的文件
linux·运维·服务器
代码游侠14 小时前
学习笔记——设备树基础
linux·运维·开发语言·单片机·算法
主机哥哥14 小时前
阿里云OpenClaw部署全攻略,五种方案助你快速部署!
服务器·阿里云·负载均衡
Harvey90314 小时前
通过 Helm 部署 Nginx 应用的完整标准化步骤
linux·运维·nginx·k8s