给定一个路由到 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]
[...]
您可以使用 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 超时,因为它仅在转发时检查 - HostB 可能会回复ping
但通常会返回 ping 的目标地址(不能对公共 Internet 保密)。