Linux路由与traceroute命令

路由

route命令是Linux中用于显示和操作IP路由表的工具。使用route命令添加的路由是临时的,即在系统重启或网络接口重启后路由将失效。
检查网卡  
ip a     
ifconfig eth0
检查路由
route -n  
ip route show

1. 添加到主机的路由

route add -host <目标IP> dev <接口名>  
# 例如,将到192.168.1.100的路由添加到eth0接口  
route add -host 192.168.1.100 dev eth0  
# 或者,如果需要通过网关到达该主机  
route add -host <目标IP> gw <网关IP>  
# 例如,通过网关192.168.1.1到达192.168.1.100  
route add -host 192.168.1.100 gw 192.168.1.1

2.添加到网络的路由

route add -net <网络地址> netmask <子网掩码> dev <接口名>  
# 例如,将到192.168.1.0/24的路由添加到eth0接口  
route add -net 192.168.1.0 netmask 255.255.255.0 dev eth0  
# 或者,如果需要通过网关到达该网络  
route add -net <网络地址> netmask <子网掩码> gw <网关IP>  
# 例如,通过网关192.168.1.1到达192.168.1.0/24  
route add -net 192.168.1.0 netmask 255.255.255.0 gw 192.168.1.1  
# 也可以使用CIDR表示法(无需指定子网掩码)  
route add -net <网络/子网位数> dev <接口名>  
# 或  
route add -net <网络/子网位数> gw <网关IP>

3.添加默认网关

route add default gw <网关IP>  
# 例如,设置默认网关为192.168.1.1  
route add default gw 192.168.1.1

设置永久路由

由于route命令添加的路由是临时的,因此如果需要设置永久路由,则需要将路由配置添加到系统启动时自动执行的脚本或配置文件中。具体方法取决于Linux发行版和网络管理工具。

1. 在/etc/rc.local中添加(已不推荐,但在某些旧系统中仍可用)
该文件在系统启动时会被执行,因此可以添加路由配置。但是,请注意,并非所有Linux发行版都支持或推荐使用/etc/rc.local。
echo "route add -net 192.168.1.0 netmask 255.255.255.0 gw 192.168.1.1" >> /etc/rc.local  
# 注意:确保/etc/rc.local具有执行权限  
chmod +x /etc/rc.local

2. 在网络配置文件中添加
对于使用NetworkManager的系统,可以在NetworkManager的连接配置文件中添加路由。
对于使用静态网络配置的系统(如某些Debian和Red Hat系统),可以在/etc/network/interfaces(Debian)或/etc/sysconfig/network-scripts/ifcfg-<接口名>(Red Hat)等文件中添加路由配置。
例如,在/etc/network/interfaces中添加静态路由(Debian/Ubuntu):
auto eth0  
iface eth0 inet static  
    address 192.168.1.10  
    netmask 255.255.255.0  
    gateway 192.168.1.1  
    up ip route add 192.168.2.0/24 via 192.168.1.254 dev eth0

traceroute命令(路由跟踪)

1. Linux下的traceroute命令
在Linux环境下,traceroute是一个常用的网络诊断工具,用于跟踪IP数据包在网络中从本地主机到目标主机所经过的路由节点(路由器或网关)。
它通过逐步增加数据包的生存时间(TTL)值,并监听沿途路由器对超时或不可达数据包的ICMP响应,从而获取整个路径信息。
traceroute 8.8.8.8

2. Linux下的tracepath命令
tracepath是Linux系统中的另一个路由探测工具,相较于traceroute,它在IPv6环境下的表现更为出色,并且不依赖于特定类型的ICMP消息,因此在某些网络环境中可能更可靠
tracepath 8.8.8.8

3. Windows下的tracert命令
在Windows操作系统中,对应功能的命令名为tracert,其工作原理与Linux下的traceroute类似,都是通过调整数据包的TTL值并分析返回的ICMP错误消息来描绘出通往目标主机的完整路径。
在CMD命令提示符中执行:
tracert 8.8.8.8

示例输出解读
无论使用traceroute、tracepath还是tracert,命令执行后都会显示出一系列跃点(hop),每行代表一个网络设备,包括:
• 跃点编号(Hop)
• 设备的IP地址或域名
• 数据包往返该跃点所需的时间(通常显示三次尝试的平均值)
这些信息可以帮助网络管理员识别潜在的问题区域,如延迟过高、路由错误等。

traceroute是用来检测发出数据包的主机到目标主机之间所经过的网关数量的工具。

traceroute的原理是试图以最小的TTL 存活时间 发出探测包来跟踪数据包到达目标主机所经过的网关 然后监听一个来自网关ICMP的应答。发送数据包的大小默认为38个字节。

原理 
程序利用增加存活时间 TTL 来实现其功能。每当数据包(3个数据包包括源地址 目的地址和包发出的时间标签)经过一个路由器 其存活时间就会减1。
当其存活时间是0时 主机便取消数据包 并传送一个ICMP Internet控制报文协议。它是TCP/IP协议族的一个子协议 用于在IP主机、路由器之间传递控制消息。
控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据 但是对于用户数据的传递起着重要的作用。 TTL数据包给原数据包的发出者。

traceroute程序完整过程 首先它发送一份TTL字段为1的IP数据包给目的主机 处理这个数据包的第一个路由器将TTL值减1 然后丢弃该数据报 并给源主机发送一个ICMP报文 “超时”信息 
这个报文包含了路由器的IP地址 这样就得到了第一个路由器的地址 然后traceroute发送一个TTL为2的数据报来得到第二个路由器的IP地址 继续这个过程 直至这个数据报到达目的主机。

1.命令格式:
traceroute [参数] [主机]
2.命令功能
traceroute指令让你追踪网络数据包的路由途径 预设数据包大小是40Bytes 用户可另行设置。
具体参数格式 traceroute [-dFlnrvx][-f 存活数值 ][-g 网关 …][-i 网络界面 ][-m 存活数值 ][-p 通信端口 ][-s 来源地址 ][-t 服务类型 ][-w 超时秒数 ][主机名称或IP地址][数据包大小]
3.命令参数
-d 使用Socket层级的排错功能。
-f 设置第一个检测数据包的存活数值TTL的大小。
-F 设置勿离断位。
-g 设置来源路由网关 最多可设置8个。
-i 使用指定的网络界面送出数据包。
-I 使用ICMP回应取代UDP资料信息。
-m 设置检测数据包的最大存活数值TTL的大小。
-n 直接使用IP地址而非主机名称。
-p 设置UDP传输协议的通信端口。
-r 忽略普通的Routing Table 直接将数据包送到远端主机上。
-s 设置本地主机送出数据包的IP地址。
-t 设置检测数据包的TOS数值。
-v 详细显示指令的执行过程。
-w 设置等待远端主机回报的时间。
-x 开启或关闭数据包的正确性检验。

[root@VM-centos ~]# nslookup www.baidu.com
Server:     183.60.83.19
Address:    183.60.83.19#53

Non-authoritative answer:
www.baidu.com   canonical name = www.a.shifen.com.
Name:   www.a.shifen.com
Address: 180.101.49.44
Name:   www.a.shifen.com
Address: 180.101.51.73
Name:   www.a.shifen.com
Address: 240e:e9:6002:1ac:0:ff:b07e:36c5
Name:   www.a.shifen.com
Address: 240e:e9:6002:1fd:0:ff:b0e1:fe69


traceroute www.baidu.com
[root@VM-centos ~]# traceroute www.baidu.com
traceroute to www.baidu.com (180.101.51.73), 30 hops max, 60 byte packets
 1  * * *
 2  * * *

说明:
记录按序列号从1开始 每个纪录就是一跳 每跳表示一个网关 我们看到每行有三个时间 单位是 ms 其实就是-q的默认参数。
探测数据包向每个网关发送三个数据包后 网关响应后返回的时间 如果您用 traceroute -q 4 www.58.com 表示向每个网关发送4个数据包。

有时我们traceroute 一台主机时 会看到有一些行是以星号表示的。出现这样的情况 可能是防火墙封掉了ICMP的返回信息 所以我们得不到什么相关的数据包返回数据。

有时我们在某一网关处延时比较长 有可能是某台网关比较阻塞 也可能是物理设备本身的原因。
当然如果某台DNS出现问题时 不能解析主机名、域名时 也会 有延时长的现象 您可以加-n 参数来避免DNS解析 以IP格式输出数据。
如果在局域网中的不同网段之间 我们可以通过traceroute 来排查问题所在 是主机的问题还是网关的问题。

跳数设置:可以看到存活数值 10 当存活数值 0时 主机便取消数据包
traceroute -m 10 www.baidu.com

探测包使用的基本UDP端口设置6888
traceroute -p 6888 www.baidu.com

把对外发探测包的等待响应时间设置为3秒
traceroute -w 3 www.baidu.com

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容