了解 NAT 环回问题

网络工程 纳特 鼻涕虫 脱氧核糖核酸
2022-02-02 23:42:46

我想了解为什么尝试使用公共 IP 地址(由路由器/NAT 提供)连接到同一网络中的服务器,但端口不起作用。(我假设路由器/NAT 中有两个接口,一个连接到互联网,另一个连接到专用网络。我还假设我使用的是 TCP。)

您可以在此处查看图表:

在此处输入图像描述

我有一个 NAT 表,它允许连接到我的内部 192.168.1.4:80 主机,该主机正在运行一个 http 服务器。

IP internal  |  Port internal |  IP external  Port external |  Port nat 
192.168.1.4         80                *            *             80     

如果我使用 ip 8.8.8.9 和端口 55231 从主机 B 连接,将添加以下条目:

192.168.1.4         80             8.8.8.9       55231           80     

一切都会正常工作。当尝试从内部主机连接到 (80.53.56.67,80) 时,会出现“环回问题”,例如带有端口 60000 的主机 A 192.168.1.4。该主机发送的数据报如下所示:

IPsrc:192.168.1.4, IPdst:IPnat, Proto:TCP|| PortSrc: 50243, PortDst: 80

因此,将在 NAT 表中添加一个新条目:

192.168.1.4       50243        IPnat       80       60000

服务器的数据报回复如下所示:

IPsrc:192.168.1.4, IPdst:IPnat, Proto:TCP||PortSrc: 80, PortDst: 60000

我在这里看不到问题;在我看来,它应该可以正常工作。我不明白为什么这行不通。是 NAT 路由完成的顺序吗?

1个回答

我想我现在明白你的问题了。您在询问发夹路由。有些路由器支持这一点,但有些不支持。

支持这一点的路由器专门寻找应该发夹的流量。不支持此功能的路由器执行正常路由,并根据路由表将发往外部地址的流量从 WAN 接口发送出去。

这完全取决于路由器的品牌、型号和软件版本。

在不支持此功能的路由器上发生的情况是,从内部主机到外部服务器地址的流量在路由表中查找了目标地址,并且指向 WAN 接口,因此流量被发送到WAN 接口,这是一个外部接口,因此根据内部源 NAT 规则,内部源地址被转换为外部地址(通常是 WAN 接口地址),并且流量从 WAN 接口发送出去。这都是基于正常的路由规则。

流量将传输到 ISP 路由器,由于它是从目标地址所在的接口进入的,因此它会立即丢弃它。路由器丢弃发往其来源网络的流量。