设想
我想通过 VPN 将我的团队连接到远程服务器。此 VPN 必须遵守远程服务器所具有的一些规则,如下所述。我已经设置了 OpenVPN,但愿意尝试任何其他 VPN 解决方案。
通过以下方式连接到远程服务器:笔记本电脑 -> VPN 客户端 (Viscosity) -> 在 Google Cloud 上的虚拟机上运行的 OpenVPN 服务器 -> Google Cloud VPN -> 使用 IKEv2 连接到远程网关的 IPSec -> 远程服务器
该虚拟机在 Google Cloud 中的虚拟私有云中运行,其内部 IP 范围为 172.25.165.0/26,网关为 172.25.165.1
远程服务器位于本地 IP 范围 172.23.133.0/24 (172.23.133.1) 其网关有一个规则集,必须通过 172.25.165.0/26 范围内的 IP 连接到
我的 VPN 客户端在连接后通常会分配 172.25.165.5
Cloud VPN 具有隧道设置: VPN 隧道内部 IP 堆栈类型 IPv4 多协议 BGP 禁用 IPv6 通告的 IP 范围 172.23.133.0/24 本地子网 lnetwork 172.25.165.0/26
Google Cloud 中的路由显示如下:
姓名 | 描述 | 目的IP范围 | 优先事项 | 下一跳 |
---|---|---|---|---|
默认路由1 | 到 Internet 的默认路由 | 0.0.0.0/0 | 1000 | VPN隧道 |
默认路由-1b | 到子网的默认本地路由 | 172.25.165.0/26 | 0 | VPN |
隧道-2-路由-1 | 172.23.133.0/24 | 1000 | VPN隧道 |
防火墙设置为允许这些路由的所有进出
VM 的 IP 转发已开启
OpenVPN 配置
local 172.25.165.2
port 1194
proto tcp-server
dev tun
ca ca.crt
cert server.crt
key server.key
dh dh.pem
auth SHA512
tls-crypt tc.key
mode server
tls-server
topology subnet
push "topology subnet"
ifconfig 172.25.165.3 255.255.255.0
ifconfig-pool 172.25.165.5 172.25.165.200 255.255.255.0
route-gateway 172.25.165.2
push "route-gateway 172.25.165.2"
push "route 172.25.165.5 255.255.255.0 172.23.133.17"
ifconfig-pool-persist ipp.txt
push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"
keepalive 10 120
cipher AES-256-CBC
user nobody
group nogroup
persist-key
persist-tun
verb 3
crl-verify crl.pem
log /var/log/openvpn/openvpn.log
笔记
如果我 ssh 到虚拟机,我可以成功连接到远程服务器 我也可以从我的笔记本电脑通过虚拟机成功地隧道传输流量 sshuttle 也可以通过虚拟机连接到远程 我可以通过虚拟机 ping 远程服务器
我可以使用本地客户端(Viscosity 或 OpenVPN 客户端)成功连接到 OpenVPN 服务器
但是,一旦连接到 VPN,我就无法成功连接到远程服务器尝试 ping VPN 上的远程服务器会导致“网络无法访问”
服务器上的 OpenVPN 日志中没有任何相关内容。
我尝试了 OpenVPN 服务器配置更改和客户端配置更改的许多不同组合,但没有成功。我还尝试直接在虚拟机上添加路由。我也没有成功尝试通过 OpenVPN 开放访问服务器,这导致了同样的问题。我已经这样做了 3 天多了,并且阅读了尽可能多的有关 OpenVPN 的文档以及许多有关 OpenVPN 的 StackExchange 问题,但一直无法找到答案。大多数现有答案似乎都指出防火墙或路由是问题所在。我在防火墙日志中没有看到任何被阻止的事件(并且它被设置为对所有这些范围开放),因此我假设我在尝试路由 OpenVPN 配置中的流量时做错了什么。如何设置虚拟机、网络和配置以在这种情况下工作?