如果服务器用完了子网内的所有地址,那么分配给 PtP tun 接口的 inet 地址是否可以用作客户端 inet 地址?

如果服务器用完了子网内的所有地址,那么分配给 PtP tun 接口的 inet 地址是否可以用作客户端 inet 地址?

我有一台 OpenVPN 服务器,其 Inet 地址为 10.8.0.1,服务于子网 10.8.0.0/24。我有两个客户端连接到此服务器,状态日志 (/etc/openvpn/openvpn-status.log) 内容如下:

OpenVPN CLIENT LIST
Updated,Wed Aug  9 15:56:38 2017
Common Name,Real Address,Bytes Received,Bytes Sent,Connected Since
client1,10.0.0.177:54810,4648,4853,Wed Aug  9 15:56:28 2017
client2,10.0.0.224:53999,4731,4935,Wed Aug  9 15:56:16 2017
ROUTING TABLE
Virtual Address,Common Name,Real Address,Last Ref
10.8.0.6,client1,10.0.0.177:54810,Wed Aug  9 15:56:28 2017
10.8.0.10,client2,10.0.0.224:53999,Wed Aug  9 15:56:16 2017
GLOBAL STATS
Max bcast/mcast queue length,0
END

现在,在客户端 2 上运行(ifconfig)时,我获得了 tun 接口的以下信息:

tun0      Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
          inet addr:10.8.0.10  P-t-P:10.8.0.9  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

PtP inet 地址为 10.8.0.9。此接口位于子网的哪里?是在客户端还是在服务器中?从客户端对此接口进行跟踪路由会得到以下信息:

traceroute to 10.8.0.9 (10.8.0.9), 64 hops max
  1   10.8.0.1  0.348ms  0.210ms  0.163ms
  2   *  *  *
  3   *  *  *
  4   *  *  *
  5   * ^C

现在,如果这就像一个虚拟的 inet 地址,当 OpenVPN 服务器用完了地址并且达到了 254 个 VPN 客户端的限制时,这个 inet 地址是否可以由 OpenVPN 服务器用于客户端?

提前致谢!

答案1

您的 OpenVPN 服务器似乎是使用拓扑 net30 设置的。此拓扑是与在旧版 Windows 上运行的非常老的客户端兼容所必需的。

此拓扑基本上将/24您分配给 VPN 的子网分成 64 个子网,每个子网的掩码为 30 位。这意味着您最多可以连接 63 个客户端。

在 net30 中,00(二进制位)和11地址未使用,01地址分配给服务器上的 PTP 连接,10地址在客户端上使用。

因此,对于10.8.0.6,client1,...客户端来说,子网为10.8.0.4。广播地址为10.8.0.7。属于 OpenVPN 服务器的地址是10.8.0.5(尽管您实际上不会在服务器上看到它被分配),分配给客户端的地址是10.8.0.6

$ ipcalc 10.8.0.4/30

Address:   10.8.0.4             00001010.00001000.00000000.000001 00
Netmask:   255.255.255.252 = 30 11111111.11111111.11111111.111111 00
Wildcard:  0.0.0.3              00000000.00000000.00000000.000000 11
=>
Network:   10.8.0.4/30          00001010.00001000.00000000.000001 00
HostMin:   10.8.0.5             00001010.00001000.00000000.000001 01
HostMax:   10.8.0.6             00001010.00001000.00000000.000001 10
Broadcast: 10.8.0.7             00001010.00001000.00000000.000001 11

如今,您最好将服务器切换为使用topology subnet。此选项将 OpenVPN10.8.0.0/24作为一个子网,而不是将其拆分为一堆较小的子网。每个客户端将仅使用子网中潜在的 ~253 个可用地址中的 1 个,而不是 net30 中基本上的 4 个。

拓扑模式

在 --dev tun 模式下运行时配置虚拟寻址拓扑。此指令在 --dev tap 模式下无意义,该模式始终使用子网拓扑。如果您在服务器上设置此指令,--server 和 --server-bridge 指令也会自动将您选择的拓扑设置推送到客户端。此指令也可以手动推送到客户端。与 --dev 指令一样,此指令必须始终在客户端和服务器之间兼容。

模式可以是以下之一:

net30 — 使用点对点拓扑,为每个客户端分配一个 /30 子网。当部分或全部连接客户端可能是 Windows 系统时,这旨在允许点对点语义。这是 OpenVPN 2.0 上的默认设置。

子网 - 通过使用本地 IP 地址和子网掩码配置 tun 接口来使用子网而不是点对点拓扑,类似于 --dev tap 和以太网桥接模式中使用的拓扑。此模式为每个连接客户端分配一个 IP 地址,并且也适用于 Windows。仅当服务器和客户端是 OpenVPN 2.1 或更高版本,或已使用 --topology 指令代码手动修补的 OpenVPN 2.0.x 时才可用。在 Windows 上使用时,需要 TAP-Win32 驱动程序 8.2 或更高版本。在 *nix 上使用时,要求 tun 驱动程序支持 ifconfig(8) 命令,该命令设置子网而不是远程端点 IP 地址。

相关内容