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


35

这是关于解决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服务器。


3
您可以尝试为要访问的主机的/ 32地址设置静态路由,然后将VPN对等方用作网关,然后看看会发生什么。
SpacemanSpiff

如果vpn集中器遵循客户端路由,则您的外围安全可能需要一些帮助。我可以访问计费局域网,将路由添加到工程范围,然后我就可以连接了。像sonicwall这样糟糕的防火墙可以做到这一点
nandoP

@SpacemanSpiff:虽然这可以解决客户端的问题,但服务器仍将无法答复,因为它将看到连接来自其自己的网络,而不是来自VPN客户端。
Massimo 2015年

Answers:


18

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

因此,在这种假设下,您无法通过拥有内部网络的解决方案来解决此问题,这些内部网络的网络号如此罕见,以至于从未真正发生冲突,这是以下原则:

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

因此,与我呆在一起,并假装到目前为止,还没有任何其他问题,因为我写到要实现完全连接,您将需要在隧道内将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,都不得损害Internet连接。
  • 如果您无法一对一映射,则会变得混乱;仔细记账是必要的。
  • 自然会冒使用NAT地址的风险,而NAT地址也被证明是重复的:-)

因此,解决此问题需要仔细设计。如果您的远程办公室确实由道路拥护者组成,则会在其中增加一系列问题:

  • 当它们最终出现重叠的网络ID时,他们永远不会事先知道。
  • 远程办公室网关NAT将需要在其笔记本电脑上实现。
  • 办公室网关将需要两个VPN,其中一个不带NAT,一个不带NAT,以覆盖这两种情况。否则,如果有人要选择您为NAT方法选择的子网之一,那么事情将无法进行

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

可以注意到,在此上下文中所有提到的NAT都表示NAT功能,可以说它是在隧道透视图中发生的。从过程上讲,静态NAT映射必须在数据包“进入”隧道之前完成,即在将其封装在传输数据包中之前,该传输数据包将其通过Internet传递到另一个VPN网关。

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

将同一张图片压缩到一台机器内部,能够同时执行NAT和VPN网关功能,这只是简单地将同一示例往前走了一步,但确实更加强调了手头软件的功能。将其与OpenVPN和iptables一起破解并在此处发布解决方案将是一个巨大的挑战。

在软件方面肯定可以实现:
PIX / ASA 7.x和更高版本:具有重叠网络的LAN到LAN IPsec VPN配置示例,
以及:
在具有重复LAN子网的路由器之间配置IPSec隧道

因此,实际的实现取决于很多因素,包括所涉及的操作系统,关联的软件及其可能性。但这当然是可行的。您将需要思考和试验。

通过链接我可以从思科那里学到这一点。


NAT是否可以与许多VPN连接及其转换一起使用?我在这里不完全了解这种情况。我在这里有一个线程unix.stackexchange.com/q/284696/16920关于如何使用重叠子网Unix-Way进行站点到站点VPN?
莱奥波德·赫兹(LéoLéopoldHertz)2016年

17

如果您需要对单个或少数几个已知服务器ips的临时性变通方法,则最简单的解决方案应该是静态客户端路由选项。

在我的情况下,我通过以下方式将所需的目标服务器(192.168.1.100)添加到了Linux客户端上的路由表中:

route add 192.168.1.100 dev tun0

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


2
这是一个完美的解决方案,甚至是一个完美的时机!:)
Yuval A

这会持续多久?直到断开连接?直到重启?
碳化

1
在我的Linux系统(带有ubuntu / mint的xfce)上,在VPN断开连接后设置“丢失”,是的,在重启后也是如此。您可以使用route命令验证设置是否处于活动状态(通常在底部具有ip和tun0设备的条目)
Aydin K.

OSX版本的路由采用不同的接口,因此dev tun0您不需要-interface tun0
Sirens

5

是的,这是最糟糕的。对我来说,它一直发生在酒店房间,直到VPN管理员意识到他们应该使用更模糊的IP范围。10.0.0.0/24和10.1.1.1/24是最糟糕的。如果您可以帮助它,则永远不要ip这样的无线网络。

所以答案是“修复” wap以使用其他内部网络(例如10.255.255.0/24),然后为您提供差异租约(即ip可以路由回corp vpn的范围内),或者如果您没有/无法在wap上获得管理员,只能去星巴克。或20分钟的监督:)

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


真的吗 有没有更好的选择?
约翰·罗素

1
并不是我所知道的...。这一直是一个问题...似乎有人否决了我的回答,但实际上并未提出解决方案。
nandoP

3

我在运行El Capitan的Mac上。尽管以上建议对我不起作用,但它们使我找到了可行的解决方案:

  1. 在启动VPN之前,执行 ifconfig
  2. 启动VPN,ifconfig并注意这是新接口。在我的情况下,它是IP地址为192.168.42.74的ppp0

    ppp0: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1280
        inet 192.168.42.74 --> 192.0.2.1 netmask 0xffffff00
    
  3. 输入:

    sudo route add 192.168.1.79  192.168.42.74
    

我先使用a进行了测试ping,然后通过访问git服务器证明了它的有效性。

如上所述,当我尝试在dev命令的末尾使用dev ppp0时,它抱怨。


2
192.168.1.79这次交流来自什么?
碳化

您要连接到的目标服务器。该服务器与VPN驻留在同一网络中,而不是本地连接。
卡洛·德尔蒙多

1

我有一个简单的解决方案,可以在IP范围(10.x)冲突的协同工作空间中使用

我用手机连接到网络,然后与笔记本电脑通过蓝牙共享网络连接。我现在可以为远程雇主使用VPN。

我敢肯定,如果您需要更快的连接速度,那么通过USB可以正常工作。


1
嘿,那实际上是一个非常聪明的解决方案。
内森·奥斯曼

1

如果您只需要打几个ip地址,则将route语句添加到ovpn配置文件中,如下所示:

路由192.168.1.10 255.255.255.255

路由192.168.1.11 255.255.255.255

当您连接您的VPN时,它将为那些Ip添加一条路由,当VPN断开连接时,将删除该路由。

无论如何在Windows上为我工作。


1

Aydin K.的答案适用于Linux。如果您希望Windows具有相同的功能,则可以输入

route ADD 192.168.1.10 <IP of tunnel adapter>

要么

route ADD 192.168.1.10 IF <interface id>

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

route print

0

提醒一下:这整个问题是由于多年以来IPv4地址短缺,以及NAT后面广泛使用私有IP范围来解决此短缺!

理想而明确的解决方案非常简单(尽管可能而且会花费一些时间在全球范围内推广):IPv6 ...

在IPv6世界中,不存在公共IP短缺的情况(几十年内不会发生此类事件)。因此,没有理由在每个网络的每个设备上都没有公用IP。如果需要网络隔离,请使用防火墙进行过滤,但不要使用难看的NAT ...

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.