L2TP IPSec 远程 VPN - 许多用户从同一访问权限远程连接

网络工程 虚拟专用网 网络安全
2021-07-15 16:57:15

有人可以向我解释一下,当用户位于同一个公共 IP (NAT/PAT) 后面时,为什么不能将 2 个或更多客户端连接到 VPN 服务器。

我的意思是:如果已经有一个用户连接到 VPN,当同一网络中的另一个用户(相同的公共 ip)尝试连接到同一个 VPN 时,第一个连接就会断开。

如果 PAT/NAT-T 将私有 IP 更改为公共 IP,将源端口更改为另一个源端口但会跟踪它,将原始源端口与 NAT 关联的端口,我认为它没有理由不工作。快速搜索后,我在互联网上发现很多人都有相同的问题和问题,但我从来没有找到一个很好的解释。

谢谢!

1个回答

这取决于所使用的 VPN 类型;有一些 VPN 系统使用:

  • TCP
  • 数据传输协议
  • 特殊协议(如GRE)

对于使用 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”字段而不是端口号来区分用于不同计算机的数据包。