OpenVPN 与 MacOS X 客户端以及本地和远程网络中的相同子网

OpenVPN 与 MacOS X 客户端以及本地和远程网络中的相同子网

我有一个家庭网络 192.168.1.0/24,网关为 192.168.1.1,还有一个具有相同参数的远程网络。现在我想在这些网络之间创建一个 OpenVPN 隧道。

我对 Windows 没有任何问题,因为 Windows 通过隧道将除 192.168.1.1 之外的所有内容路由到 192.168.1.0/24。

然而在 Mac OS X 上我在“详细信息”窗口中看到以下行:

2010-05-10 09:13:01 警告:本地 LAN [192.168.1.0/255.255.255.0] 和远程 VPN [192.168.1.0/255.255.255.0] 之间可能存在路由子网冲突

当我列出路线时,我得到以下信息:

Internet:
Destination        Gateway            Flags    Refs      Use  Netif Expire
default            192.168.1.1        UGSc       13        3    en1
127                localhost          UCS         0        0    lo0
localhost          localhost          UH         12     3589    lo0
169.254            link#5             UCS         0        0    en1
192.168.1          link#5             UCS         1        0    en1
192.168.1.1        0:1e:e5:f4:ec:7f   UHLW       13       17    en1   1103
192.168.1.101      localhost          UHS         0        0    lo0
192.168.6          192.168.6.5        UGSc        0        0   tun0
192.168.6.5        192.168.6.6        UH          1        0   tun0

我的接口是

en1 - My local Wifi network
tun0 - The tunnel interface

从上面的路由可以看出,没有 192.168.1.0/24 的条目通过隧道接口路由流量。

当我手动将单个 IP(如 192.168.1.16)路由到隧道网关 192.168.6.6 时,此方法有效。

问:如何在 MacOS X 中设置我的路由,以实现与 Windows 上相同的行为,即通过隧道路由除 192.168.1.1 之外的所有内容,但将默认网关保留为我的本地 192.168.1.1?

编辑:我重新提出了这个问题,因为第一次无法完全回答它。

除了路由器之外,VPN 客户端机器不需要访问自己的子网,并且除了隧道包本身之外,TCP 包都应该采用隧道。

答案1

我认为路由不应该这样工作。从本质上讲,就 IPv4 而言,您的两个网络是相同的。VPN 不会改变这一点。您不使用路由器连接同一网络的两个部分;你需要桥梁为了那个原因。

我从来没有这样做过,但我认为你有几个选择。

  • 配置 OpenVPN 网关桥接模式只要没有 IP 冲突(每个网络上的一台机器具有相同的 IP,例如 192.168.1.100),这应该可以工作。如果您使用 DHCP,则需要处理潜在的重叠;您不希望同一网络上有两个 DHCP 服务器。

    根据链接,您有两种 IP 分配选项:

    • 让 OpenVPN 使用 server-bridge 指令管理自己的客户端 IP 地址池,或者
    • 配置 LAN 上的 DHCP 服务器,以便也向 VPN 客户端授予 IP 地址租约。


  • 将一个网络配置为另一个网络地址。只需更改192.168.1/24在一个网络上192.168.7/24(或其他地址)。这肯定会起作用,您只需重新配置一个网络。

  • 子网192.168.1/24进入二 /25网络(例如,192.168.1.0/25192.168.1.128/25)。这肯定也可以,但你必须重新配置两个网络。(作为参考,/25 上的网络掩码是255.255.255.128)。

答案2

我发现这是一个非常容易回答的问题(从 SEO 的角度来看),对我来说很有效的解决方案如下:https://gist.github.com/taldanzig/4628573

只需要一个命令。我在 MacOS Mojave 10.14.6 上使用 Tunnelblick 和 OpenVPN 配置,在 LAN 上,同一地址192.168.1.5 由本地设备使用(例如智能电视等)通过我想要连接到 VPN 远程 LAN 上的服务的设备。

因此,只需ifconfig在连接到 VPN 时发出以下命令即可找到 VPN 接口的名称,在本例中utun3为 。然后,

sudo route add -host 192.168.1.5 -interface utun3

似乎无需删除到此地址的现有路由,并且可立即连接到此主机,无需重新连接。似乎也无需稍后清理此路由,我猜想当连接丢失且接口消失时,它就会消失。

当您在旅途中并且无法轻松更改远程网络或本地网络的子网以消除冲突或找到不会出现此问题的其他 VPN 技术时,这非常方便。

答案3

我遇到了同样的问题。在我的 ovpn 连接设置文件中添加以下脚本调用解决了该问题:

route-delay 2
route-up /Users/user/.local/bin/vpn-routes

其中脚本手动重新分配默认路由,如下所示:

#!/bin/bash

/sbin/route delete default
/sbin/route delete 0/1
/sbin/route add default $route_net_gateway

在我升级到 Mountain Lion 之前,这个脚本一直运行良好。我已升级到最新的 Tunnelblick 测试版,但上面的脚本似乎不起作用(我认为是因为权限问题,仍在调查此事)

相关内容