traceroute是Linux中用于可视化数据包路径的网络诊断工具,通过TTL递增和ICMP超时消息追踪每一跳的IP与延迟,支持UDP(默认)、ICMP(-I)和TCP(-T)三种探测模式,可精准定位丢包、防火墙拦截或路由异常节点。

当你在Linux服务器上遇到访问外部服务超时、延迟飙升或连接中断时,必须快速确认数据包是否在某跳被丢弃、绕行或卡住——traceroute正是为这种场景设计的路径可视化工具,它不依赖目标响应,只靠中间设备返回的ICMP超时消息就能画出完整链路。
确认traceroute已安装并具备执行权限
打开终端,输入 traceroute -V 查看版本。若提示 command not found,说明未安装:Ubuntu/Debian系统执行 sudo apt install traceroute;CentOS/RHEL执行 sudo yum install traceroute 或 sudo dnf install traceroute。
普通用户可运行基础UDP模式;但使用 -I(ICMP) 或 -T(TCP) 模式时需 sudo 权限,因为它们要构造原始IP包。
执行基础路由追踪并读懂输出
输入 sudo traceroute example.com 启动默认UDP探测。
输出每行以跳数开头,例如 3 10.0.12.1 (10.0.12.1) 5.214 ms 5.387 ms 5.102 ms:第一列是TTL跳数,括号内是该跳设备IP(若DNS解析成功则还显示主机名),后三列是三次探测的往返时间(RTT)。【出现 * * * 表示该跳未返回ICMP Time Exceeded消息——不是断网,而是路由器配置了不响应TTL超时、或防火墙静默丢包】
如果某跳之后全部变成 * * *,而目标本身能ping通,大概率是目标主机禁用了UDP端口不可达响应(默认行为),此时需换ICMP或TCP模式。
绕过防火墙限制的三种探测模式
方法一:用ICMP替代UDP(无需root也可运行,部分系统例外)
执行 traceroute -I example.com。ICMP Echo Request比UDP更易穿透企业级防火墙,且不需要sudo(除非系统策略强制)。但某些云平台(如AWS安全组)可能默认放行ICMP却屏蔽UDP,这时ICMP模式反而能多显2~3跳。
方法二:用TCP SYN探测指定端口(精准定位端口级拦截)
执行 sudo traceroute -T -p 443 example.com。当访问HTTPS网站失败时,用此命令能明确区分是路由中断,还是目标443端口被中间防火墙DROP——若某跳显示 * * * 而下一跳恢复响应,说明该跳设备过滤了TCP 443;若全程 * * *,说明路径中所有节点都阻断了该端口SYN包。
方法三:禁用DNS解析加速诊断(避免因DNS故障误判路由问题)
直接加 -n 参数:sudo traceroute -n -T -p 80 example.com。这步必须做,否则traceroute会为每个返回IP发起反向DNS查询,耗时数秒甚至超时,导致输出卡在第2跳不动,让你误以为网络卡死。
聚焦关键路径,避免无效等待
第一步:用 -m 15 限定最大跳数
多数局域网到公网出口不超过10跳,CDN节点通常在12跳内。执行 sudo traceroute -m 15 -n example.com 可跳过冗余探测,防止在30跳默认上限下空等20次超时。
第二步:缩短单跳等待时间
默认每跳等3秒,15跳就要45秒。加 -w 1 把超时设为1秒:sudo traceroute -m 15 -w 1 -n example.com。这不会降低准确性,因为真实网络中健康节点响应都在100ms内,超过1秒无响应基本可判定为丢包或过滤。
第三步:减少每跳探测次数
默认3次,对快速初筛意义不大。用 -q 1 改为单次探测:sudo traceroute -m 15 -w 1 -q 1 -n example.com。这能让整个追踪在5秒内完成,适合批量检查多个目标。











