假设有一个路由到 HostA 的 (公共) 网络 198.51.100.0/24,我想将其子网 (例如 198.51.100.16/28) 路由到 HostB。HostA 和 HostB 通过某种点对点链路 (例如 VPN 或 PPP) 连接。
路由此类网络有哪些选项(最佳实践是什么)?从技术上讲,我不应该使用私有 IP(RFC1918),因为此类 IP 绝不能与可公开路由的 IP 地址混合使用。
我可以分离一个 /30 网络并将其用作 HostA 和 HostB 之间的点对点链接,并在其上路由 198.51.100.16/28。但这似乎很浪费。
我可以使用 RFC1918 地址吗?我可以使用链路本地地址吗?
编辑:我尝试了 tracert,确实,中间散布着 RFC1918 地址(注意:我认为第一个是我的 CGNAT,但其他的肯定在公共网络中):
[...]
2 70 ms 70 ms 71 ms 10.8.0.1
3 78 ms 71 ms 73 ms D [64.44.32.1]
4 72 ms 71 ms 71 ms 89-88-12-198.as20278.net [198.12.88.89]
5 72 ms 74 ms 70 ms 10.8.40.245
6 71 ms 71 ms 73 ms 10.8.6.33
7 75 ms 71 ms 73 ms buf-b1-link.ip.twelve99.net [62.115.59.89]
8 82 ms * 81 ms nyk-bb1-link.ip.twelve99.net [62.115.118.122]
9 188 ms * 157 ms ldn-bb4-link.ip.twelve99.net [62.115.112.245]
10 364 ms 212 ms 294 ms prs-bb2-link.ip.twelve99.net [62.115.114.229]
11 208 ms 297 ms 304 ms ffm-bb2-link.ip.twelve99.net [62.115.122.139]
12 282 ms 246 ms 361 ms win-bb4-link.ip.twelve99.net [62.115.138.23]
13 303 ms 180 ms 325 ms win-b2-link.ip.twelve99.net [62.115.114.183]
[...]
答案1
您可以使用 RFC 1918 范围内的任何子网进行路由。只要连接的主机能够理解它,它就可以工作。对于 P2P 链接,/31 子网就足够了。对于 PPP 连接,甚至不需要寻址,只需要路由。
只需确保没有任何私有 IP 数据包从任何主机泄漏到 Internet。特别是 HostB 需要使用 198.51.100.16/28 地址来向 Internet 发送数据包 - 通常可以通过将所有相关服务专门绑定到该地址来建立。
但是,从 198.51.100.0/24 到 198.51.100.16/28 子网的路由可能会带来挑战,因为它们有重叠。198.51.100.0/24 上的主机不会使用 HostA 作为网关。您需要使用静态 ARP 条目、代理 ARP 或类似方法才能路由数据包。首先对 198.51.100.0/24 进行干净的子网划分可能会很有用,这样问题就变得简单了。
tracert
通过向目的地发送增量 TTL 探测并显示它们超时的位置来工作。只要中间网关返回TTL 在传输过程中已过期消息中,您会在列表中看到它们。它们在所用接口上使用公共或私有地址,还是仅用作一般 ICMP 源地址,都无关紧要。
如果您不希望出现这种情况,则需要禁用或过滤此类消息(使跳转显示为* * *
),或者使用公共 IP 地址来处理 ICMP 错误。请注意,HostA 是最后一跳网关,因此它取决于其设置(无论如何都可能是公共地址)。HostB 不会使 TTL 超时,因为只有在转发时才会检查 TTL - HostB 可能会回复,ping
但通常会返回 ping 的目标地址(该地址不能是公共互联网的私有地址)。