我已经完全配置了(远程)一个以专业身份托管的 Debian GNU/Linux 专用服务器,并且我有一个网络路由问题(据我所知,这恰好符合 serverfault 的常见问题解答)。
该专用服务器具有静态 IPv4 IP 和非常简单的路由:
route -n
Table de routage IP du noyau
Destination Passerelle Genmask Indic Metric Ref Use Iface
94.xx.yy.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
0.0.0.0 94.xx.yy.254 0.0.0.0 UG 0 0 0 eth0
我只有一个静态 IP,并且同一子网上还有许多其他专用服务器,我无法干扰它们。
该服务器托管/服务于我们公司的主要 Web 应用程序 (Apache+Tomcat),并且还运行 Squid。我自己完成了所有配置。一旦预算允许,我就会将 Squid 移至另一台服务器。
现在我想将 OpenVPN 添加到该服务器(最好使用 tun,而不是 tap),并且我想知道需要做什么才能确保我的接口不会与其他专用服务器“冲突”。
我不明白应该如何设置,并且我对最终的路线应该是什么样子感到困惑。
为了帮助我理解“大局”,有人可以给出一个精确的例子吗:
- OpenVPN 客户端的本地 IP 地址
- OpenVPN 客户端应使用的网关 IP
- OpenVPN 服务器的路由输出
基本上我有点迷茫,在开始之前我想了解在 OpenVPN 服务器上如何进行路由。
据我了解,OpenVPN 客户端应与 OpenVPN 服务器位于同一网络上(例如,使用 10.0.0.0/8 网络),但我在试图弄清楚客户端将如何使用“tun”接口然后最终使用 94.xx.yy.254 网关时遇到了思维障碍。
答案1
假设 VPN 客户端具有以下 IP 设置:
IP eth0: 192.168.1.100
Default gateway: 192.168.1.1
因此,所有非本地流量都将通过 192.168.1.1 发出。如果有流量发往 LAN 上的另一台主机,则流量将直接发往该主机。
OpenVPN启动后,客户端获得一个新的接口tun0,然后我们看到类似的内容:
IP eth0: 192.168.1.100
IP tun0: 10.8.0.13
Default gateway: 192.168.1.1
VPN routing: 10.8.0.1 for the network 10.8.0.0/24
这假设 OpenVPN 服务器未推送任何附加路由。因此,发往 8.8.8.8 的网络数据包仍将通过 LAN 的默认网关 192.168.1.1。发往 10.8.0.204 的数据包将通过 OpenVPN 隧道,到达 10.8.0.1 的 OpenVPN 服务器进行进一步路由。
如果 OpenVPN 服务器为其 LAN 推送一条路由,例如 172.16.0.0/24,则上述 VPN 路由可能如下所示:
VPN routing: 10.8.0.1 for the network 10.8.0.0/24
10.8.0.1 for the network 172.16.0.0/24
因此,类似地,发往 172.16.0.24 的数据包将前往 10.8.0.1 进行进一步路由。
如果 OpenVPN 服务器也推送该设置"redirect-gateway def1"
,则 VPN 客户端上的默认网关会有所不同。您将看到类似以下内容:
IP eth0: 192.168.1.100
IP tun0: 10.8.0.13
Default gateway: 10.8.0.1
(other gateway with lower priority): 192.168.1.1
Static route: 94.xx.yy.zz uses 192.168.1.1
其中 94.xx.yy.zz 是您的 OpenVPN 服务器的公共 IP 地址。
在这种情况下,直接发往 OpenVPN 服务器的流量将通过 LAN 默认网关 192.168.1.1。本地流量(192.168.1.0/24)将按预期发往主机。任何其他流量将使用 10.8.0.1;非本地流量(不直接发往 OpenVPN 服务器的公共 IP)将通过 VPN 隧道,并从 94.xx.yy.254 发出。
您可能会在路由表中看到另一个默认路由,该路由保留 192.168.1.1 作为网关,但其优先级低于 10.8.0.1。我认为这更像是 OpenVPN 客户端的占位符,以便它知道在 VPN 关闭后将默认路由设置回什么。不必担心该条目。