星号(*)表示该跳未返回icmp time exceeded响应,并非断网;主因是路由器禁用icmp响应、udp探测被丢弃、dns反向解析超时或本地权限限制,推荐使用traceroute -n -i组合绕过常见拦截。

直接用 traceroute 就能看,但默认行为常导致误判——关键不是“能不能跑”,而是“用什么协议、要不要解析、跳数设多少”。
为什么 traceroute 输出一堆 * 号?
星号(*)不等于断网,它只表示那一跳没回响应包。常见原因有:
- 中间路由器禁用了 ICMP Time Exceeded 响应(最常见,尤其云厂商或企业防火墙)
- UDP 探测包被丢弃(
traceroute默认用 UDP 端口 33434~33534) - DNS 反向解析超时卡住,看起来像挂起(实际在等 DNS 回复)
- 本地网络策略限制了非 root 用户发 ICMP(某些系统上
-I需要权限)
traceroute -n -I 是最实用的组合
跳过 DNS + 改用 ICMP,能绕过大多数拦截场景:
Linux系统管理专家,覆盖12大模块:用户权限、SSH、存储、网络、systemd、防火墙、日志监控、备份恢复、TLS证书、Ansible、容器、IaC。提供配置、验证、加固、监控、备份、自动化、故障排查、回滚闭环。关键词:useradd、sudo、sshd_config、chmod、SEL...
-
-n:强制显示 IP,不查 PTR 记录,快且稳定 -
-I:用ICMP ECHO替代 UDP,很多防火墙放行 ICMP 回显(但注意:部分系统需普通用户权限即可,CentOS 7+ 和 Ubuntu 22.04+ 通常不需要sudo) - 合起来就是:
traceroute -n -I example.com - 如果仍大量 *,可加
-q 5增加每跳探测次数,减少偶发丢包干扰
什么时候必须调 -m 限制最大跳数?
默认 30 跳在内网或 CDN 场景下纯属浪费时间:
- 局域网直连设备一般 1~3 跳,
-m 5足够 - 访问同机房服务,
-m 8已覆盖所有可能路径 - 遇到某跳后连续 5 跳全是
*,大概率是目标屏蔽了探测,继续往下只会空等超时 - 实操建议:
traceroute -n -I -m 12 example.com,兼顾深度和效率
traceroute 不是万能的,别把它当 ping 的加强版
它反映的是“探测路径”,不等于真实业务流量路径:
- 某些运营商或云平台对 ICMP/UDP/TCP 走不同路由(比如 ICMP 走管理平面,业务 TCP 走数据平面)
- CDN 节点可能对 traceroute 做特殊响应(如统一返回边缘 POP IP,掩盖真实后端)
- 如果目标开了 TCP 限速或连接数限制,
traceroute -T(TCP 模式)反而比 ICMP 更贴近真实请求行为,但需sudo - 真要验证业务链路,
mtr比单次traceroute更可靠——它是持续探测+统计,能看丢包趋势
真正容易被忽略的点:同一台机器反复跑 traceroute,结果可能跳数不同、IP 不同——这不是命令出错,是路由动态收敛或 ECMP(等价多路径)导致的正常现象。盯住延迟突变点和连续 * 区段,比纠结某一行 IP 是否“固定”更有诊断价值。










