当本地网络子网地址与远程网络冲突时,通过 VPN 连接到远程服务器

Joh*_*ell 42 vpn subnet

这是一个关于解决 VPN 客户端的本地网络与跨 VPN 链接的本地网络之间的 IPv4 子网冲突的规范问题

通过 OpenVPN 连接到远程位置后,客户端尝试访问位于子网(例如 192.0.2.0/24)上的网络上的服务器。但是,有时,客户端 LAN 上的网络具有相同的子网地址:192.0.2.0/24。由于此冲突,客户端无法通过键入其 IP 来连接到远程服务器。在连接到 VPN 时,他们甚至无法访问公共互联网。

问题是这个子网192.0.2.0/24需要通过VPN路由,但也需要作为客户端的LAN路由。

有谁知道如何缓解这个问题?我可以访问 OpenVPN 服务器。

Ayd*_* K. 24

如果您需要临时解决单个或少数已知服务器 ip 的问题,最简单的解决方案应该是静态客户端路由选项。

就我而言,我通过以下方式将所需的目标服务器(192.168.1.100)添加到我的 linux 客户端上的路由表中:

route add 192.168.1.100 dev tun0
Run Code Online (Sandbox Code Playgroud)

然后,使用 route delete 命令删除此静态路由。

  • 路由的 OSX 版本采用不同的接口,因此您需要的不是`dev tun0`,而是`-interface tun0` (3认同)
  • 这是一个完美的解决方案,甚至是一个完美的时机!:) (2认同)
  • 在我的 linux 系统(带有 ubuntu/mint 的 xfce)上,vpn 断开连接后设置“丢失”,是的,重启后也是如此。您可以使用 route 命令验证设置是否处于活动状态(通常在底部会有一个包含 ip 和 tun0 设备的条目) (2认同)

Eri*_*ikE 22

可以使用 NAT 解决这个问题;它只是不是很优雅。

因此,假设您无法通过拥有非常罕见的网络编号以致于永远不会发生冲突的内部网络来解决此问题,以下是原则:

由于本地子网和远程子网都具有相同的网络号,因此来自客户端的流量永远不会意识到它必须通过隧道网关才能到达目的地。即使我们想象它可以,远程主机的情况也会与即将发送答案的情况相同。

所以和我在一起,假装到目前为止,在我写的完全连接时没有附带问题,你需要在隧道内对两端进行 NAT 以区分主机并允许路由。

在这里做一些网:

  • 您的办公网络使用 192.0.2.0/24
  • 您的远程办公室使用 192.0.2.0/24
  • 您的办公网络 VPN 网关将 192.0.2.0/24 主机隐藏在 NATed 网络号 198.51.100.0/24 后面
  • 您的远程办公室网络 VPN 网关将 192.0.2.0/24 台主机隐藏在 NATed 网络号 203.0.113.0/24 后面

所以在 VPN 隧道内,办公室主机现在是 198.51.100.x,远程办公室主机是 203.0.113.x。让我们进一步假设所有主机都在其各自 VPN 网关的 NAT 中被 1:1 映射。一个例子:

  • 您的办公网络主机 192.0.2.5/24 在办公 VPN 网关 NAT 中静态映射为 198.51.100.5/24
  • 您的远程办公室网络主机 192.0.2.5/24 在远程办公室 vpn 网关 NAT 中静态映射为 203.0.113.5/24

因此,当远程办公室的主机192.0.2.5/24想要连接到办公室网络中具有相同IP的主机时,需要使用地址198.51.100.5/24作为目的地。发生以下情况:

  • 在远程办公室,主机 198.51.100.5 是通过 VPN 到达并路由到那里的远程目标。
  • 在远程办公室,当数据包通过 NAT 功能时,主机 192.0.2.5 被伪装成 203.0.113.5。
  • 在办公室,当数据包通过 NAT 功能时,主机 198.51.100.5 被转换为 192.0.2.5。
  • 在办公室,返回到主机 203.0.113.5 的流量以相反的方向经过相同的过程。

因此,尽管有解决方案,但要使其在实践中发挥作用,还必须解决许多问题:

  • 伪装的 IP 必须用于远程连接;DNS 变得复杂。这是因为从连接主机来看,端点必须具有唯一的 IP 地址。
  • 作为 VPN 解决方案的一部分,必须在两端实施 NAT 功能。
  • 静态映射主机是从另一端可达的必要条件。
  • 如果流量是单向的,只有接收端需要所有参与主机的静态映射;如果需要,客户端可以摆脱动态 NAT。
  • 如果流量是双向的,则两端都需要所有相关主机的静态映射。
  • 无论是分离式 VPN 还是非分离式 VPN,Internet 连接都不得受到损害。
  • 如果你不能一对一地映射,它就会变得一团糟;仔细记账是必要的。
  • 自然地,使用 NAT 地址的风险也会被证明是重复的 :-)

所以解决这个问题需要精心设计。如果您的远程办公室真的由公路战士组成,那么您会增加一层问题:

  • 他们事先不知道什么时候会出现重叠的网络 ID。
  • 远程办公室网关 NAT 需要在他们的笔记本电脑上实现。
  • 办公室网关需要两个 VPN,一个无 NAT 和一个 NAT,以涵盖这两种情况。否则,如果有人选择您为 NAT 方法选择的子网之一,事情将无法正常工作

根据您的 VPN 客户端,您可能能够根据本地网段的网络地址自动选择一个 VPN 或另一个。

请注意,在此上下文中所有提及的 NAT 都表示 NAT 功能,可以说是在隧道视角内发生的。在处理过程中,静态 NAT 映射必须在数据包“进入”隧道之前完成,即在它被封装在传输数据包中之前,该数据包将通过互联网将它带到另一个 VPN 网关。

这意味着不得将 VPN 网关的公共 IP 地址(实际上也可能是 NAT:ed,但完全超出了通过 VPN 传输到远程站点的角度)与用作伪装的唯一私有地址混淆对于重复的私有地址。如果这种抽象难以描绘,此处说明了 NAT 如何为此目的与 VPN 网关物理分离:
在重叠网络中使用 NAT

将相同的图片浓缩为一台机器内部的逻辑分离,能够执行 NAT 和 VPN 网关功能,只是将同一示例更进一步,但更强调手头软件的功能。将它与例如 OpenVPN 和 iptables 一起破解并在此处发布解决方案将是一个有价值的挑战。

软件方面当然是可能的:
PIX/ASA 7.x 及更高版本:LAN-to-LAN IPsec VPN with Overlapping Networks Configuration Example
和:
在具有重复 LAN 子网的路由器之间配置 IPSec 隧道

因此,实际实施取决于许多因素,包括所涉及的操作系统、相关软件及其可能性。但它肯定是可行的。你需要思考和试验一下。

从链接中可以看出,我是从 Cisco 那里学到的。


小智 7

Aydin K. 的答案适用于 Linux。如果您想要 Windows 的相同功能,您可以输入

route ADD 192.168.1.10 <IP of tunnel adapter>
Run Code Online (Sandbox Code Playgroud)

或者

route ADD 192.168.1.10 IF <interface id>
Run Code Online (Sandbox Code Playgroud)

您可以使用以下命令获取接口 ID:

route print
Run Code Online (Sandbox Code Playgroud)


nan*_*doP 5

是的,这是最糟糕的。对我来说,它一直发生在酒店房间,然后 vpn 管理员意识到他们应该使用更模糊的 ip 范围。10.0.0.0/24 和 10.1.1.1/24 是最差的。如果你能帮助它,它永远不会像那样 ip 无线网络。

所以答案是“修复”wap 以使用不同的内部网络(即 10.255.255.0/24),然后给你一个差异租用(即可以路由回公司 vpn 的范围内的 ip),或者如果你没有/ 无法在 wap 上获得管理员权限,只能去星巴克。或 20 分钟的战争 :)

如果这只是在实验室环境中,只需使用不同的范围。