![OpenVPN 和路由](https://linux22.com/image/585467/OpenVPN%20%E5%92%8C%E8%B7%AF%E7%94%B1.png)
我有一个运行 openvpn 的服务器,但遇到了一个小问题。
我所有的流量都被转发到 VPN,当我使用“whatismyip”这样的网站时,我可以看到服务器 IP,所以这部分是可以正常工作的。
但是,当我连接到与 VPN 托管在同一服务器上的站点时,我看到的是我的真实 IP 地址,而不是本地 IP 地址,例如 10.8.0.2(在 apache2 日志中)
有人能帮我解决这个问题吗?
答案1
为了将所有流量路由到 VPN 服务器,VPN 客户端会将客户端计算机的默认路由设置为隧道设备。但是,VPN 客户端创建的传出加密数据包需要直接路由到 VPN 服务器(而不是返回 VPN 客户端),因此会创建一条从本地网关到 VPN 服务器的特定路由。路由表如下所示(其中 1.2.3.4 是 VPN 服务器的公共 IP):
192.168.0.0/24 dev eth0 # Local network
1.2.3.4/32 via 192.168.0.1 # Route to VPN server
default via 10.8.0.2 # Everything else via VPN client
当您访问 VPN 服务器上的另一项服务时,它会与该特定路由匹配并直接路由到 Internet。
有几种方法可以解决这个问题:
- 访问 VPN 服务器上的其他服务时使用 VPN 服务器上的私有 IP(例如,使用 10.8.0.1 而不是 1.2.3.4)。理想情况下,这可以通过 VPN 服务器上的 DNS 服务器来实现,该服务器为 VPN 客户端提供拆分 DNS。
- 为 VPN 服务器使用专用 IP 地址。
- 在客户端上配置基于端口的策略路由,以便只有发往 VPN 端口号上的 VPN 服务器的数据包才会直接路由到 Internet 上。