这取决于所使用的 VPN 类型;有一些 VPN 系统使用:
对于使用 TCP 和/或 UDP 的 VPN 系统,没有这种限制的技术原因。
然而,“特殊协议”通常不被 NAT 路由器理解。在这种情况下,可能会发生两件事:
NAT 路由器将完全拒绝路由未知数据包类型
(即使只有一台电脑...)
因为 NAT 路由器不知道协议,所以它无法找出数据包的(等价于的)“端口号”。它甚至不知道所使用的协议是否具有等效的“端口号”!
(有些协议没有“端口号”。)
这意味着 NAT 可以从从 VPN 服务器发送到客户端的数据包中提取的唯一信息是服务器的 IP 地址。
当 NAT 后面的两台不同的计算机连接到同一个 VPN 服务器时,NAT 无法找出两台计算机中的哪一台是此数据包的接收者。
没有任何解释或真实示例说明数据包发生了什么以更好地理解它吗?
让我们看看通过 NAT 的 UDP 传输:
- NAT 后面的两台计算机向 Internet 中的同一台计算机发送一些 UDP 数据包;假设他们使用相同的源和目标端口号
- NAT 接收数据包并检查数据包类型:它是 UDP。这意味着端口号位于数据包的前 4 个字节中
- NAT 用它自己的“全局”地址替换两个数据包的源地址;它还替换源端口号
- NAT 还“记住”(在其 RAM 中)它用端口号 A 替换了第一个数据包中的源端口号,并用端口号 B 替换了第二个数据包中的源端口号
- 数据包现在发送到 Internet 中的服务器
- 服务器回复一个响应,它也是一个 UDP 数据包
- 如果数据包中的目的端口号是A,则必须将数据包转发到第一台计算机;如果是 B 则必须转发到第二台计算机
现在假设计算机不发送 UDP 数据包而是“XYZ”数据包:
- UDP 和 TCP 数据包都有“端口号”;然而,其他协议(如原始 GRE)根本不需要知道“端口号”的概念
- 对于 UDP 和 TCP 数据包,端口号存储在数据包的前 4 个字节中;其他协议(如新版本的 GRE)将端口号存储在其他地方
- 如果 NAT 不知道协议“XYZ”,它就无法知道......
- ...如果“XYZ”数据包完全包含端口号,如果是...
- ...在数据包中存储端口号的位置。
- 因此,NAT 无法获得有关“XYZ”数据包端口号的任何信息。
- 因此,NAT 无法区分从服务器发送到第一台计算机的“XYZ”数据包和发送到第二台计算机的数据包。
许多(尤其是较旧的)VPN 系统使用 UDP 和 GRE 数据包的组合;在这种情况下,NAT 将遇到 GRE 数据包问题。
带电...
从 NAT 的角度来看,ESP 只是另一种协议,如 GRE 或“XYZ”。
...如果只有 1 台计算机连接到 VPN 并且没有与之关联的端口?
在这种情况下,不同制造商的 NAT 可能表现不同:
一些 NAT 可能根本不允许这样的协议。在这种情况下,通过 NAT 使用 ESP、GRE、“XYZ”等是不可能的。
其他 NAT 可能会“记住”计算机已将特定协议(例如 ESP)的数据包发送到特定服务器,并假定来自该服务器的所有该类型 (ESP) 的传入数据包都是为该计算机准备的。
如果两台计算机正在发送数据包,这当然不再起作用:
... 当同一网络中的另一个用户 ... 尝试连接到同一 VPN 时,第一个连接出现故障。
顺便说一句:据我所知,ESP 标头的“SPI”字段可用于区分不同的 VPN 连接。
所以一个知道 ESP 协议的 NAT 可以同时允许多个 ESP 连接:
它将使用“SPI”字段而不是端口号来区分用于不同计算机的数据包。