我注意到,对于某些路由器/网关,
当我在“内部”计算机中发出 traceroute 或 tracert 时,
跳数总是会失败:
请求超时
有人能解释一下吗?
每次跳跃都输出和输入什么信息?
应该在路由器上配置什么来解决这个问题???
答案1
这里至少有两种可能的情况:
一:如果你位于 NAT(具体来说是标准所称的 NAPT,或者专有的 Cisco-ese 所称的“PAT”)网关后面,并且没有任何如果 traceroute 中的跃点数报告了正确的信息,则您的 NAT 网关代码无法正确处理 ICMP“目标无法访问;超出时间”消息。由于“超出时间”消息不需要任何特殊的 NAT 处理,因此您的 NAT 可能没有处理任何ICMP“目标无法到达”消息正确。对于大多数 NAT 实现,我不认为这是一个配置错误;更可能的是,您的 NAT 代码库不包含处理此类消息的有效代码。因此,虽然您可以尝试查看 NAT 网关的配置 UI 和手册,看看是否可以启用当前已禁用的某种 ICMP 处理,但我怀疑您不会通过这种方式获得任何结果,您只需要用更好的 NAT 实现替换当前的 NAT 实现(这可能需要用更好的路由器替换您的路由器)。
二:如果某些跳数返回有用信息,但其他跳数没有返回,则意味着“失败”跳数的路由器根本没有返回 ICMP“目标无法到达;超出时间”。这可能是一个实现错误(bug),但更可能是配置为不这样做(一些系统管理员担心响应 ping 和跟踪路由会泄露太多有关网络的信息)。由于您可能不拥有或对 Internet 上其他网络上的其他路由器没有任何影响,因此您无法让这些路由器发送允许跟踪路由工作的必要 ICMP 消息。
最后一点:这几乎是第三种情况,但更像是第二种情况的特殊情况。如果一些早期的跳数有效,但在某个时刻,一个跳数和所有后续跳数都失败了,这表明防火墙可能丢弃了来自所有其他路由器的所有相关 ICMP 消息。许多公司/机构网络在其网络边缘都有防火墙,出于(在我看来是误导性的)“安全”原因,防火墙会丢弃多种类型的 ICMP 消息。