有什么办法可以让单独的 OpenVPN 连接使用单独的网关吗?

有什么办法可以让单独的 OpenVPN 连接使用单独的网关吗?

我有一堆私有网络,全部位于 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.

因此,您需要为每个网络路由添加不同的网关,以避免出现问题。

相关内容