这是一个关于解决VPN客户端本地networking与VPN客户端之间的IPv4子网冲突的典型问题 。
通过OpenVPN连接到远程位置后,客户端尝试访问存在于子网(如192.0.2.0/24)上的networking上的服务器。 但是,有时客户端局域网中的networking具有相同的子网地址:192.0.2.0/24。 由于此冲突,客户端无法通过键入其IP来连接到远程服务器。 连接到VPN时甚至无法访问公共互联网。
问题是这个子网192.0.2.0/24需要由VPN路由,但是也需要路由为客户端的LAN。
有谁知道如何缓解这个问题? 我有权访问OpenVPN服务器。
有可能使用NAT来解决这个问题。 它不是很优雅。
所以在这个假设下,你不能通过拥有非常罕见的networking数量的内部networking来解决这个问题,因为这个networking的数目是永远不会实际发生冲突的,原则如下:
由于本地和远程子网具有相同的networking号,客户端的stream量永远不会意识到必须通过隧道网关才能到达目的地。 即使我们想象得到,远程主机的情况也是一样的,因为它将发送一个答案。
所以,请和我一起假装,到目前为止,我还没有任何侧面的问题,因为我为了完全连接而编写的,你需要将隧道内的两端NAT进行NAT,以区分主机并允许路由。
在这里做一些networking:
因此,在VPN隧道内,办公室主机现在是198.51.100.x,远程办公室主机是203.0.113.x. 让我们进一步假装所有的主机映射到他们各自的VPN网关的NAT 1:1。 一个例子:
所以当远程办公室的主机192.0.2.5/24想要连接到办公networking中同一个IP的主机时,需要使用地址198.51.100.5/24作为目的地。 发生以下情况:
因此,虽然有解决办法,但在实践中必须解决一些必须解决的问题:
所以解决这个需要仔细的devise。 如果您的远程办公室确实由道路勇士组成,那么您会添加一些问题:
取决于您的VPN客户端,您可以根据本地网段的networking地址自动select一个VPN或另一个VPN。
请注意,在这种情况下所有提到的NAT都表示NATfunction,可以说是在隧道的angular度进行的。 在stream程方面,静态NAT映射必须在数据包“进入”隧道之前完成,即在将数据包封装到传输数据包之前,这个传输数据包将通过互联网传送到另一个VPN网关。
这意味着不能混淆VPN网关的公共IP地址(实际上也可能是NAT,但是这完全在通过VPN传输到远程站点的视angular之外),而唯一的私有地址用作伪装为重复的私人地址。 如果这种抽象难以描述,那么为了这个目的,就可以说明NAT如何在物理上与VPN网关分开:
在重叠networking中使用NAT 。
在一台机器内部凝聚相同的图像以实现逻辑分离,能够同时执行NAT和VPN网关function,仅仅是进一步采用相同的例子,但更强调手头软件的function。 将黑客与OpenVPN和iptables一起打包,并在这里发布解决scheme将是一个有价值的挑战。
软件方面当然有可能:
PIX / ASA 7.x和更高版本:具有重叠networkingconfiguration示例的LAN到LAN IPsec VPN
和:
在具有重复LAN子网的路由器之间configurationIPSec隧道
因此,实际的实施取决于很多因素,涉及的操作系统,相关的软件及其可能性。 但它当然是可行的。 你需要思考和试验一下。
我从思科那里了解到这个链接。
如果您需要一个临时的肮脏的解决方法到一个或几个已知的服务器ips,最简单的解决scheme应该是静态客户端路由选项。
在我的情况下,我通过我的linux客户端添加我的目标服务器(192.168.1.100)到我的路由表中:
route add 192.168.1.100 dev tun0
之后,使用route delete命令删除此静态路由。
这是最糟糕的。 对于我来说,它始终是从酒店房间发生的,在它之前,VPNpipe理员意识到他们应该使用更隐蔽的IP范围。 10.0.0.0/24和10.1.1.1/24是最差的。 如果你能帮助它永远不会像这样的无线networking。
所以答案是“修复”的WAP使用不同的内部networking(即10.255.255.0/24),然后给你一个比较租约(即在一个范围内,可以路由回到VPN VPN),或者如果你没有/不能让pipe理员在WAP上,只要去星巴克。 或20分钟的wardriving 🙂
如果这只是在实验室设置中,只需使用不同的范围。
我正在运行El Capitan的Mac上。 虽然上面的build议对我来说并不奏效,但他们让我有了一个可行的解决scheme:
ifconfig
启动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
input:
sudo route add 192.168.1.79 192.168.42.74
我先用一个ping
进行了testing,然后通过访问git服务器certificate了这一点。
当我尝试使用dev ppp0作为路由命令的结尾,如上所述,它抱怨。
我有一个简单的解决scheme,我正在使用一个有冲突的IP范围(10.x)的共同工作空间,
我用手机连接到networking,然后用笔记本电脑通过蓝牙共享networking连接。 我现在可以为我的远程雇主使用VPN。
我敢肯定,如果你需要更快速的连接,这将通过USB工作。