如果服务器用尽子网中的所有地址,是否可以将分配给PtP tun接口的inet地址用于客户端inet地址?

我有一个服务于子网10.8.0.0/24的Inet地址为10.8.0.1的OpenVPN服务器。 我有两个客户端连接到这台服务器和状态日志(/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 PtP: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给了我以下内容:

 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地址,如果它的地址用完了,那么这个inet地址可以被OpenVPN服务器用于客户端吗?

提前致谢!

您的OpenVPN服务器似乎使用拓扑net30进行设置。 这种拓扑结构是为了与旧版本的Windows上运行的旧客户端兼容所必需的。

这种拓扑结构基本上将您分配给VPN的那个/24子网分解成64个具有30位掩码的子网。 意思是你最多可以有63个连接的客户端。

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

因此给定了10.8.0.6,client1,...客户端。 该子网是10.8.0.4 。 广播地址是10.8.0.7 。 属于OpenVPN服务器的地址是10.8.0.5 (尽pipe你不会在服务器上看到它),分配给客户端的地址是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则会好得多。 这个选项告诉OpenVPN 10.8.0.0/24作为一个单独的子网,而不是把它分解成一堆较小的子网。 每个客户端将只消耗子网中可用的〜253个地址中的1个地址,而不是基本上4个地址,这发生在net30上。

拓扑模式

在–dev tun模式下运行时configuration虚拟寻址拓扑。 该指令在–dev tap模式下没有任何意义,它总是使用子网拓扑。 如果您在服务器上设置了这个指令,那么–server和–server-bridge指令也会自动将您select的拓扑设置推送到客户端。 这个指令也可以手动推送给客户端。 像–dev指令一样,该指令必须始终在客户端和服务器之间兼容。

模式可以是以下之一:

net30 – 通过为每个客户端分配一个/ 30个子网,使用点对点拓扑。 当某些或所有连接客户端可能是Windows系统时,这样做的目的是允许点对点的语义。 这是OpenVPN 2.0的默认设置。

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