鉴于您所说,我认为您忘记考虑交通方向。让我们从 TCP 连接的高级视图开始,然后我们将讨论它如何应用于 NAT。
假设我的计算机的 IP 为 10.1.1.1,而我正在与 IP 为 3.3.3.3 的服务器通话。假设我正在发出一个 WEB/HTTP 请求,该请求在 TCP 端口 80 上运行。在网络上,纠察队将具有以下属性:
Source IP : 10.1.1.1
Source Port : 1111 (randomly chosen)
Destination IP : 3.3.3.3
Destination Port: 80
当此数据包到达目标服务器并且该服务器生成响应时,源和目标将被翻转。因此,返回流量将具有以下属性:
Source IP : 3.3.3.3
Source Port : 80
Destination IP : 10.1.1.1
Destination Port: 1111
建立后,让我们看看 NAT 是如何影响这个数据包的。特别要注意,源 IP 是私有 IP,因此在互联网上讲话时必须进行 NAT。
那么,我们想要的是让 NAT更改 Outbound 流量上的 Source IP并更改 Return 流量上的 Destination IP。如果 NAT 要更改出站流量的目标 IP 或返回流量的源,则通信将永远无法正常工作。
现在,在您的特定情况下,您希望将发往您的公共 IP 地址的入站流量通过您的 NAT 设备转发到内部网络上的特定主机。因此,使用上面的数据包属性,您希望对看起来像这样的数据包进行 NAT:
Source IP : 9.9.9.9 (some IP address out there on the internet)
Source Port : 9999 (randomly chosen)
Destination IP : 2.2.2.2 (your External_IP)
Destination Port: 3389 (Remote Desktop Port)
并且您希望它被 NAT 到以下内容:
Source IP : 9.9.9.9 (unchanged)
Source Port : 9999 (unchanged)
Destination IP : 192.168.0.20 (your Internal_IP)
Destination Port: 3389 (Remote Desktop Port)
请注意,您打算更改目标 IP,而不是源。但请记住,我们在这里查看的是传入数据包的属性,而不是返回流量的属性。如果我们要绘制返回流量,我们最终会得到以下结果:
Source IP : 192.168.0.20 (your Internal_IP)
Source Port : 3389 (Remote Desktop Port)
Destination IP : 9.9.9.9 (unchanged)
Destination Port: 9999 (unchanged)
在返回流量上,您打算对源进行 NAT 。
现在,我们终于可以回到你原来的问题了:
“原始”(来自互联网的传入数据包)不是去“external_ip:3389”吗?“翻译”应该是内部PC。基本上是我上面所说的触发器。
但是如果我像这样在 OUTSIDE 接口上创建 NAT 规则,它就不起作用。
它不应该在 NAT 和 UN-NAT 之后工作吗?
您的防火墙被告知将源从NATinternal_ip:3389到external_ip:3389。这只是当流量到达防火墙的内部接口时的源 - 也就是说,当您的防火墙看到RDP 连接的返回流量时。
当您在 OUTSIDE 接口上创建 NAT 规则时,它仍在查看数据包的源 - 这就是连接不起作用的原因,因为您实际上并不想更改传入数据包的源,您想改变目的地。
通过在 INSIDE 接口上配置 NAT,您是在告诉防火墙,当 Source IP:Port 为internal_:3389时,将其更改为external_ip:3389. 幸运的是,您的防火墙会自动执行相反的操作:将 Destination IP:Port 从更改external_ip:3389为internal_ip:3389当它在外部接口上看到它时。
最后,正如您已经发现的那样,不,NAT 语句在任一接口上配置时都不起作用。特定的 NAT 语句专门针对 Source,因此必须从何时需要更改 Source 的角度进行配置。如果您从外部接口配置它,更改源将不允许流量通过您的 NAT 并到达您的内部主机。