我有一个全新的 VPC (10.0.0.0/16),有 3 个公共子网(指向一个 IGW)和 3 个私有子网(每个子网都有一个 NAT GW)。我已经在公共子网中部署了一个 OpenVPN 设备并将其配置为使用 NAT 模式(Yes, using NAT
在路由配置中)。我在其中一个私有子网中也有一个测试实例。OpenVPN 实例和测试实例都具有具有“慷慨”灵活性的 SG 组(即允许进出的所有内容......用于测试目的)。10.0.0.0/16
在我现场配置的 OpenVPN 上Specify the private subnets to which all clients should be given access (one per line):
。
从我的 Mac(在家庭网络 192.168.178.0/24 上)我可以建立一个隧道,我可以很容易地到达测试实例。都好。
现在我想切换到路线模式。
- 我将路由模式更改为
Yes, using Routing
. 我禁用了 OpenVPN 实例上的源/目标检查。 - 我向 VPC 中的所有 4 个路由表(3 个私有子网和 1 个公共子网)添加了一个静态死记硬背,表示定向到
192.168.178.0/24
(我的家庭网络)的流量应该转到 OpenVPN 实例(可能这不是必需的公共子网)。 - 除了.
192.168.178.0/24
_Specify the private subnets to which all clients should be given access (one per line):
_10.0.0.0/16
- 我已经为我用来登录的用户重新配置了用户权限
Use Routing
,并再次指定了上面的两个子网(10. 和 192.)。
我仍然可以建立隧道。我可以访问 OpenVPN 实例的内部 IP:
$ traceroute 10.0.4.223
traceroute to 10.0.4.223 (10.0.4.223), 64 hops max, 52 byte packets
1 10.0.4.223 (10.0.4.223) 178.345 ms 174.470 ms 173.680 ms
$
但我无法访问私有子网中的测试实例:
$ traceroute 10.0.165.139
traceroute to 10.0.165.139 (10.0.165.139), 64 hops max, 52 byte packets
1 172.27.232.1 (172.27.232.1) 194.976 ms 177.014 ms 174.402 ms
2 * * *
3 * * *
4 * * *
^C
$
有趣的是,如果我通过 ssh 进入我的 OpenVPN 服务器并尝试在我启动隧道的本地工作站上卷曲 NGINX,我将无法访问它。看起来工作站可以连接到 OpenVPN 服务器(请参阅上面的跟踪10.0.4.223
),但 OpenVPN 服务器无法连接到工作站(出于某些原因)。
看起来从工作站发起的流程能够找到通往(和返回)OpenVPN 实例的路由。然而,路由在从工作站到测试实例(和返回)的某处中断,并且当从 OpenVPN 实例启动到工作站时它似乎也在中断(参见 curl)。
我最终发现无法将 OpenVPN 访问服务器设备配置为连接回本地子网上客户端的本机 IP。但是,可以通过 VPN 分配的隧道 IP 访问客户端。此 IP 可以基于每个用户静态配置,也可以来自设备上定义的池。
在我的例子中,我已经配置了两者(见图)。
重要的是要知道这(这些)也是路由信息中需要使用的子网。也就是说,位于 10.0.0.0/16 网络中的 IP 可以将客户端设备连接到分配的 172.27 地址之一,因此需要在路由表中指定 172.27 网络(而不是本地本地网络)客户端设备 - 在我的示例中为 192.168.178.0/24)。