我设置了一个使用 OpenVPN 的服务器客户,以便将其连接到我家里的私人网络。每当我在服务器上启动 VPN 客户端连接时,我只能连接到它的公共 IP 地址 (188.226.161.x),前提是我在同一个 VPN 网络上。如果服务器未连接到 VPN,那么无论我当前是否正在使用 VPN,我都可以连接到它。
问题
有没有办法让我连接到服务器的公共 IP 地址,即使我没有连接到同一个 VPN?
额外信息
- 服务器上没有防火墙规则。
- 该服务器是运行 Ubuntu 14.04 的 Digital Ocean 实例
VPN 连接之前服务器上的路由表
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 188.226.161.1 0.0.0.0 UG 0 0 0 eth0
10.0.3.0 0.0.0.0 255.255.255.0 U 0 0 0 lxcbr0
188.226.161.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
VPN 连接后服务器上的路由表
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 10.8.0.1 128.0.0.0 UG 0 0 0 tun0
0.0.0.0 188.226.161.1 0.0.0.0 UG 0 0 0 eth0
10.0.3.0 0.0.0.0 255.255.255.0 U 0 0 0 lxcbr0
10.8.0.1 0.0.0.0 255.255.255.255 UH 0 0 0 tun0
128.0.0.0 10.8.0.1 128.0.0.0 UG 0 0 0 tun0
178.62.56.51 188.226.161.1 255.255.255.255 UGH 0 0 0 eth0
188.226.161.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
答案1
我找到了解决问题的方法超级用户的回答。问题在于服务器默认使用 tun0 接口而不是 eth0,而实际上我们希望它只将 tun0 用于 10.8.0.0 到 10.8.0.255 上的私有网络。因此,解决方案是将客户端连接配置为仅在连接到其他 VPN IP 时使用 tun0 接口,而不是用于整个互联网。
对于我来说,这是通过在 client.conf 文件末尾添加以下两行并重新启动我的 openvpn 连接来完成的:
route-nopull
route 10.8.0.0 255.255.255.0
这意味着如果服务器尝试连接到 10.8.0.0-255,它将使用 tun0 接口。除此之外的任何目标,它将改用 eth0 接口。