![两个私有IP之间的路由怎样经过公有IP?](https://linux22.com/image/553944/%E4%B8%A4%E4%B8%AA%E7%A7%81%E6%9C%89IP%E4%B9%8B%E9%97%B4%E7%9A%84%E8%B7%AF%E7%94%B1%E6%80%8E%E6%A0%B7%E7%BB%8F%E8%BF%87%E5%85%AC%E6%9C%89IP%EF%BC%9F.png)
我试图理解这个输出的含义traceroute
。我更改了 IP 地址以保护隐私,但保留了公有/私有 IP 范围区别。
traceroute.db -e -n 10.1.1.9
traceroute to (10.1.1.9), 30 hops max, 60 byte packets
1 10.0.0.1 0.596 ms 0.588 ms 0.577 ms
2 10.0.0.2 1.032 ms 1.029 ms 1.084 ms
3 10.0.0.3 3.360 ms 3.355 ms 3.338 ms
4 23.0.0.4 3.974 ms 4.592 ms 4.584 ms
5 23.0.0.5 13.442 ms 13.445 ms 13.434 ms
6 45.0.0.6 13.195 ms 12.924 ms 12.913 ms
7 67.0.0.7 52.088 ms 51.683 ms 52.040 ms
8 10.1.1.8 46.878 ms 44.575 ms 44.815 ms
9 10.1.1.9 45.932 ms 45.603 ms 45.593 ms
第一个 10.0.* 范围在我的组织内部。最后一个 10.1.* 范围是我组织的另一个站点。中间地址属于不同的 ISP。我预计两个站点之间有某种 VPN,但我对我们的网络拓扑不太了解。
我不明白的是,路由如何从私有地址通过公共地址回到私有地址。搜索让我找到了MPLS 跟踪路由上的公共 IP,这给出了一种可能的解释:多协议标签交换 (MPLS)。MPLS 是唯一可能或最有可能的解释吗?否则,这对我们的网络基础设施有什么启示?
给我启发的附加问题是:在这种情况下,谁生成了 ICMP TTL 超出的数据包,以及是否相关破坏了它们的源地址和目标地址?
答案1
两端都有服务器进行网络地址转换 (NAT)。当地址通过这些服务器时,数据包上的标头地址将被重写为该服务器的 Internet 地址。服务器会跟踪哪些连接属于哪个内部主机。
Traceroute 显示 ICMP 数据包内部的数据,表明在给定的跳数内是否到达主机。NAT 路由器不会更改此数据。因此,您可以看到每个主机接收数据包的地址。
通常,在这种情况下,远端的服务器名称已使用 DNAT(目标 NAT)路由到私有网络上的主机。
该地址很可能通过两个站点之间的 VPN 隧道传递。VPN 将源地址和最终地址封装在跳数 3 和 7 之间发送的数据包中。虽然机制不同,但效果相同。跳数 3 和 7 处的路由器将知道远程路由器支持的地址范围,并相应地路由数据包。离开跳数 7 后,IP 目标将是 67.0.0.7,其公共地址属于跳数 3。由于路由跟踪的工作方式,这是不可见的。根据 VPN 协议,跳数 7 之后的某些跳数可能无法跟踪。
在某些情况下,您可能会看到 ISP 通过私有地址路由到公共地址。这将显示为两个公共地址之间的一个或多个私有地址。如果具有公共地址的中间路由器属于同一组织,则它们可能具有允许端到端通信而无需转换的路由规则。