我正在尝试了解 IP 路由,并尝试跟踪我自己的公共 IP。我刚刚在网上搜索了我的 IP 并尝试了。我得到的结果是
> tracert [my_public_ip]
1 <1ms 192.168.100.1
2 4ms 100.64.0.1
3 5ms 10.68.32.220
4 4ms [my_public_ip]
5 * Request timed out.
6 4ms [my_public_ip]
为什么两次访问我的公共 IP 时中间的路由器会丢弃 ICMP 跟踪路由数据包?
第一个显然是我路由器的网关,但第二个和第三个 IP 地址是什么?它们看起来都像我的192.168.100.*
地址一样是私有的。它们是什么?我希望我的路由器能够立即访问我的公共 IP,因为这是我的路由器使用的实际 IP。NAT 是否适合这个?
同样,在常规的跟踪路由(例如 google.com)中,为什么您实际上没有看到您的公共 IP 作为路由的一部分。数据包在 NAT 期间不会穿过您的公共 IP 吗?
答案1
我希望我的路由器能够立即访问我的公共 IP,因为这是我的路由器使用的实际 IP。NAT 是否适合此处?
这看起来非常像 CGNAT(“运营商级 NAT”)。
如果你的 ISP 使用 CGNAT,则意味着你的路由器没有实际上不再有公共 IP 地址 - 相反,它只有两侧的私有地址。(通常,“WAN”侧将从 100.64.0.0/10 范围中获取地址 - 它实际上是专门为 CGNAT 目的分配的私有范围。)
此外,您的 ISP 使用的 CGNAT 网关的配置通常略微复杂一些……有时它们的配置非常奇怪。(有时唯一可用的解释是“CGNAT 硬件制造商决定这样做”或甚至是“当时这样做很有意义”。)
例如,尽管它们仍然负责在你的路由器地址和你的真实公共地址之间进行 NAT,但为了提高效率,它们的工作方式通常略有不同——公共地址不是实际上分配给 CGNAT 网关本身,但由于缺乏更好的词汇,它们是一种“虚拟”地址,因此尝试对它们进行跟踪路由根本无济于事。
同样,在常规的跟踪路由(例如 google.com)中,为什么您实际上没有看到您的公共 IP 作为路由的一部分。数据包在 NAT 期间不会穿过您的公共 IP 吗?
数据包交叉路由器,不是地址。通常,沿途的每个路由器都有多个地址(每个接口一个),但仍算作 1 跳,并且总共只产生一个跟踪路由响应。
(通常路由器会使用您面对的接口的地址进行响应。因此,如果您以某种方式以相反的方向跟踪路由,完全相同的路由器将显示为具有完全不同的 IP 地址。但这并不是保证规则。)
因此,在简单的非 CGNAT 场景中,您的家庭路由器将同时具有 192.168.xx 地址(在“LAN”接口上)和您的公共地址(在“WAN”接口上)。但尽管有两个地址,它只会生成一个 traceroute 响应,该响应通常来自 192.168.xx 地址。
(这里有一个半相关图。