我有一个家庭网络,上面有两个网关。GW1 是具有 FTTH WAN 接入的 ASUS RT-N18U 路由器。GW2 是 D-Link DWR-921。LAN 上的一些设备使用 GW1,一些使用 GW2。GW1 用于一般互联网接入,GW2 需要使用仅在移动网络上运行的特定应用程序。
我已成功在华硕路由器上设置了 OpenVPN 服务器。当我不在家时,我可以从我的 Windows 笔记本电脑登录我的 VPN。当我登录时,我的 VPN 客户端通过 GW1(华硕路由器)访问互联网。
我正在寻找一种解决方案,将 GW2 而不是 GW1 用于我的 VPN 客户端。因此,我仍然通过 GW1 从互联网登录到 VPN 服务器,然后通过 GW2 在登录的客户端上访问互联网。
有什么方法可以创建这样的配置吗?
答案1
默认情况下,OpenVPN 连接是第 3 层点对点隧道,这不允许这样做——因为没有第 2 层报头(即数据包没有 MAC 地址或等效地址),客户端无法指定将数据包发送到哪个设备。它们只能去一个主机:隧道的另一端。换句话说,这意味着 VPN 服务器有作为第一门户。
虽然也许可以配置GW1 本身将特定数据包转发到 GW2,而不是通过 WAN 链路转发。如果您的移动应用程序与已知目的地通信(即您可以获取 IP 地址列表),那么标准路由可能会完成这项工作。Linux 和一些基于 Linux 的路由器(如 OpenWRT)中提供的另一个功能是“策略路由”,它可以根据其他属性选择网关,例如 ASUS GW1 可以路由数据包从VPN 用户通过 GW2,但其他一切都通过 WAN。
但这很复杂,我甚至无法提供在华硕路由器上执行此操作的说明。(但在裸机 Linux 上是可行的。)
另一个选项稍微简单一些,就是使用 OpenVPN 的“tap”模式(模拟以太网链路)。然后可以实现这样的“第 2 层”VPN桥接到您的物理 LAN,使其看起来好像两组设备都位于同一以太网段上。这样,VPN 客户端就可以直接指定任何 LAN 主机作为其网关 - 包括 GW2。
缺点是,第 2 层/tap/以太网模式仅与 Windows 和 Linux 上的“完整”OpenVPN 客户端兼容 - 它不适用于 Android/iOS。