我工作的一家小公司很快就要摆脱办公室了,我不得不将当前本地托管的 VPN(只是一个 Zyxel Zywall 110 设备)迁移到基于云的 VM 中。我在网络(后端开发转向操作)方面没有那么丰富的经验,所以我想验证以下方法是否可行。
我有一个专用的虚拟机,我在其中设置了 OpenVPN 访问服务器,基础运行良好,人们可以连接,一切都很好。
但是有一个问题,当前的 VPN 通过“隧道”将某个 IP 范围转发到合作伙伴公司的内部网络。它看起来像这样:
if dest_addr in '172.30.239.0/25':
route through gw 194.xxx.xxx.xxx
else:
route through gw 0.0.0.0
例如,当连接到 VPN 时,我的流量将按如下方式路由:
dest 1.2.3.4 => me -> VPN server -> its internet gateway -*-> 1.2.3.4
dest 172.30.239.10 => me -> VPN server -> partner network gateway (194.xxx.xxx.xxx) -(internal network routing)-> 172.30.239.10
从我们的路由器到合作伙伴公司的 VPN GW 的连接是通过带有预共享密钥的 IKEv1 完成的(从路由器的 Web UI 判断,因为这就是我拥有的所有“文档”)。
一些描述以下设置的 ascii 艺术作品。我正在用Router
虚拟机替换。
+-----------------+ [ Partner infra, this has to stay the same ]
| Router | 194.xxx.xxx.xxx e.g. 172.30.239.75
| --------------- | IKEv1 +-------------+ +-------------------------+
User -----> | 172.30.239.0/25-| --------> | VPN gateway |-----> | Internal network server |
| default | +-------------+ +-------------------------+
| | |
+--------+--------+
|
|
internet
OpenVPN 访问服务器本身不支持这样的东西(或者我无法找到该配置),所以我认为我可以在 VM 级别上做到这一点。如果我使用 Strongswan 之类的东西将操作系统连接到 VPN 网关并配置适当的路由iptables
,这可以工作吗?连接到 OpenVPN 服务器并进入该172.30.239.0/25
范围的用户的流量会被路由到 Strongswan 的连接,还是这种方法根本上是错误的?我有哪些选择?
谢谢!
现在事情有点清楚了。当然,OpenVPN 有一个选项可以解决您的问题:如果您希望 VPN 客户端通过您的 VPN 隧道路由网络 1.2.3.0/25 的流量,请使用选项
push
(源):因此,您必须添加您的 openvpn 服务器配置
这告诉 openvpn 客户端,它应该通过 vpn 隧道将所有流量路由到该子网。而且,当然,在服务器本身上,正确的路由也必须到位 - 但我想这条路由可能已经到位。
[更新]
我的回答缺少一些关于路由的基本信息。任何网络设备都可以充当网关——这就是家庭路由器的作用。路由不做用
iptables
——那是修改linux内置内核防火墙的工具。路由决策是在路由表的帮助下完成的(为了简单起见,我在这里只讨论 IPv4)。对于正在发送的每个 IP 数据包,都会考虑路由表,从仅主机路由(/32 子网)开始,采用它可以找到的最“精确”的路由。因此,仅在没有找到具有更“精确”子网的匹配路由时才采用默认路由( /0 子网)。通过 VPN 隧道路由所有流量很容易。OpenVPN 使用该
redirect-gateway
指令。因此,要么将该指令放入所有客户端配置中,要么放入一个进入您的服务器配置。使用选项 def1,将使用两个具有 128.0.0.0 子网的路由,而不是一个 0.0.0.0 子网路由 - 这样做是为了避免新的默认路由被 DHCP 客户端覆盖。
来到你的服务器上的路线。由于服务器是 IPSec 隧道的端点(连接到您的合作伙伴),因此软件(strongswan?)已经在该服务器上安装了必要的路由,以便远程网络的流量通过 IPSec 隧道进行路由。
让我用示例网络和路线画一张图,以便更好地理解。考虑以下网络:
在此示例设置中,您有三个网络:
设备A有路由:
0.0.0.0/0 gw 10.8.0.1
服务器B有两条路由:一条默认网关到ISP,
192.168.0.0/24 gw 172.16.0.2
服务器C有两条路由:一条默认网关到伙伴的ISP,和:
10.8.0.0/24 gw 172.16.0.1
对于设备D,只
0.0.0.0/0 gw 192.168.0.1
需要默认路由。以下是我们仅通过 OpenVPN 隧道路由 OpenVPN 子网的方法: