所以我建立了一个简单的网络:首先是调制解调器,然后是路由器,路由器后面是我的终端设备。我可以从路由器后面的局域网访问调制解调器网络,但是当我尝试从调制解调器端访问路由器后面的局域网时,什么也没有发生。为什么呢?我不太明白这一点,想知道路由器是否将调制解调器视为其本地网络上的设备,因此连接有效,但调制解调器没有将其自己的 NAT 视为本地网络的一部分?我应该怎么做才能从调制解调器与路由器后面的本地网络进行通信?
所以我建立了一个简单的网络:首先是调制解调器,然后是路由器,路由器后面是我的终端设备。我可以从路由器后面的局域网访问调制解调器网络,但是当我尝试从调制解调器端访问路由器后面的局域网时,什么也没有发生。为什么呢?我不太明白这一点,想知道路由器是否将调制解调器视为其本地网络上的设备,因此连接有效,但调制解调器没有将其自己的 NAT 视为本地网络的一部分?我应该怎么做才能从调制解调器与路由器后面的本地网络进行通信?
tl; dr:查看您的路由表。查看两台路由器的路由表。它们准确显示路由器(或主机)知道哪些网络,并显示任何给定地址的数据包将被发送到哪里。
您的第一个路由器(调制解调器)不会自动识别第二个路由器后面的网络。它只知道它直接连接的两个网络(第一个 LAN 子网和 ISP 的 WAN 子网)。对于其他一切,它只有一个“默认”路由,告诉它通过 ISP 到达所有其他网络。
但是,它没有第二个子网的正确路由(没有公认的学习方法¹),因此您发送到第二个子网的所有数据包实际上都遵循WAN 上的默认路由。
(您在第一个子网中的其他设备是相同的:它们不知道第二个子网,它们只有本地路由和默认路由。)
您的第二个子网具有任何类型的出站访问的唯一原因是因为第二个路由器的出站 NAT 隐藏了该网络。这层 NAT 使所有出站数据包看起来像是来自第二个路由器本身——它是第一个子网的一部分,因此您的第一个路由器和其他第一个子网设备已经知道如何到达它。
这就是第一个子网设备能够回复来自第二个子网的数据包的方式,尽管没有通往那里的路由——他们认为他们正在回复本地设备(第二个路由器)。
在没有双重 NAT 的情况下使这项工作的正确方法是在第一个子网(在第一个路由器和/或单个设备上)添加路由,告诉他们使用第二个路由器到达第二个子网。在调制解调器的配置页面中查找“静态路由”部分。
¹ 两个网络之间没有自动的“内部/外部”关系。
较大的网络使用各种协议来自动交换路由(OSPF、IS-IS、iBGP、RIP、Babel 等),但消费者网关制造商对此几乎没有兴趣。只有一些路由器碰巧包含 RIP,但它只有在两个路由器都说它时才有用......
理论上,支持 IPv6 的路由器应该能够使用 DHCP 前缀委托(它们首先获得 v6 子网前缀的机制)来学习路由,但这对 IPv4 没有帮助。