![数据包因 NAT 丢失?防火墙?不可路由的私有 IP 地址?](https://linux22.com/image/574723/%E6%95%B0%E6%8D%AE%E5%8C%85%E5%9B%A0%20NAT%20%E4%B8%A2%E5%A4%B1%EF%BC%9F%E9%98%B2%E7%81%AB%E5%A2%99%EF%BC%9F%E4%B8%8D%E5%8F%AF%E8%B7%AF%E7%94%B1%E7%9A%84%E7%A7%81%E6%9C%89%20IP%20%E5%9C%B0%E5%9D%80%EF%BC%9F.png)
Preliminary note
This question is out of academic interest. I know how to work around the limitation. I use this setup to control access from one subnet to the other on IP level which works great so I don't need any 'solution' or alternative setup - just as implied by the questions: no need for any guessing about my intentions :)
我的 LAN 由两台级联的消费者路由器组成,每台路由器都启用了 NAT。我在路由器 1(连接到互联网)中设置了静态路由,以便来自子网 1 的数据包以路由器 2 的 LAN 子网为目标将使用后者作为网关。到目前为止,路由似乎有效。但是,当路由器 2 在其 WAN 端口上收到其 LAN 子网的数据包时,它会立即丢弃该数据包。
这是因为 NAT 的性质/规范,所以路由器不会接受任何未发送到其 WAN IP 的数据包吗?NAT 规范是否暗示了这一点?
或者路由器内部的防火墙是否阻止了所有未通过端口转发到特定 LAN IP 的内容?
消费者路由器是否也设计为即使分配了私有地址也不会在其 WAN 端口上路由私有 IP 地址?
还有其他机制涉及吗?
答案1
由于这是 NAT 关系,因此它无法“路由”流量。发往路由器 WAN IP 地址的数据包将根据其端口转发规则进行转发。任何未发往其 WAN IP 地址的数据包都将被丢弃,因为它们不是发往该地址的。事实上,任何连接到 IP 网络的设备都会忽略可能收到的未发往该地址的数据包。
您也可以将此功能视为防火墙的一部分。如果路由器只是路由它收到的、看起来属于 LAN 端的任何内容,那么它作为防火墙就不太好,不是吗?
如您所知,如果您想允许流量通过,则必须将流量发送到路由器的 WAN 地址,并设置端口转发规则来告诉它将流量发送到哪里。这就是 NAT 设备的工作原理,您似乎认为它们应该像路由器一样工作,但事实并非如此。
答案2
不要将一个 NAT 路由器链接到另一个。如果您只想将第二个路由器用作交换机以获得更多端口,请禁用其上的 NAT 功能,并且不要使用 WAN 端口。
如果您确实坚持级联路由器,那么您需要让第一个路由器转发到第二个路由器的 WAN IP,然后将其配置为转发到正确的主机。
答案3
目前尚不清楚您要完成什么,但以下几点可以为您澄清这一点(我希望):
- 私有 IP 地址无法通过互联网路由。
- NAT 可用于将公共 IP 转换为私有 IP 以及反之亦然。
- NAT可以和目的端口改变结合起来,也可以称为PAT或者端口转发。
- 如果数据包不是发往该网络设备、没有配置为转发流量、或者不知道如何转发(使用路由表),任何网络设备都应丢弃收到的数据包。