我有一堆私有网络,全部位于 172.XXX.XXX.XXX IP 空间上。当我通过 OpenVPN 连接时,有时 VPN 最终会通过同一网关连接,这只允许来自第一个 VPN 的流量正常工作。
例子:
$ netstat -nr
Routing tables
Internet:
Destination Gateway Flags Refs Use Netif Expire
............
172.31 10.8.0.5 UGSc 1 0 utun3
172.32 10.8.0.5 UGSc 1 0 utun3
这里 172.31.XXX.XXX 和 172.32.XXX.XXX 使用相同的网关/接口,只允许第一个连接的 VPN 的流量传输。
服务器 #1 的 OpenVPN 配置:
push "route 172.32.0.0 255.255.0.0"
服务器 #2 的 OpenVPN 配置:
push "route 172.31.0.0 255.255.0.0"
有什么方法可以让两者使用不同的隧道/网关?有时当我多次断开连接时,它们最终会使用不同的隧道,但这种情况并非每次都会发生,而且在一切正常之前必须连接和断开连接也很麻烦。
VPN 配置只是带有额外推送指令的示例配置。
答案1
由于您提到配置文件是默认的,除了推送行之外,我认为它们都包含默认的
server 10.8.0.0 255.255.255.0
行,这使得两个 openvpn 服务器使用同一个地址池。因此,当您连接到服务器时,它们都会分配第一个可用地址,即 10.8.0.5,并指示客户端通过该地址路由所有连接。这可以解释随机的“现在这有效”时刻,因为如果服务器认为该地址已被使用(例如您重新连接得太快),它将使用地址池中的下一个可用地址,因此您会得到另一个分配的地址。
只需将server
两个服务器上的线路更改为不同的线路,这样客户端就会拥有来自不同子网的 IP 地址。
这有点离题,但您可能想知道为什么 10.8.0.5 是第一个地址。Openvpn 从 /30 子网分配 p2p 地址,因此对于每个连接,都会使用单独的 /30 子网。第一个是为服务器本身保留的,因此 xxx1 和 xxx2 永远不会分配给客户端。下一个 /30 子网有两个可用地址,xxx5 和 xxx6,其中一个将分配给客户端,另一个分配给服务器对等地址。
答案2
您可以在配置选项中指定网关,push route
如下所示:
--route network/IP [netmask] [gateway] [metric]
Add route to routing table after connection is established.
因此,您需要为每个网络路由添加不同的网关,以避免出现问题。