在多客户端配置的情况下,OpenVPN 服务器如何分配客户端 IP 地址?

在多客户端配置的情况下,OpenVPN 服务器如何分配客户端 IP 地址?

对于多客户端 OpenVPN 配置,我们可以从相关文档(server.conf注释)中找到,

配置服务器模式并为 OpenVPN 提供 VPN 子网以从中获取客户端地址。服务器将占用 10.8.0.1,其余的将提供给客户端。每个客户端都能够访问 10.8.0.1 上的服务器。

服务器 10.8.0.0 255.255.255.0

因此,据我们了解,我们实际上为池分配了 256 个地址,第一个可用地址是 10.8.0.1,最后一个可用地址应该是 10.8.0.254。其中,第一个地址 (10.8.0.1) 将分配给服务器,如上文中已明确说明的那样。

另外,在客户端配置文件中,我们发现类似的内容,

服务器的主机名/IP 和端口。您可以有多个远程条目来平衡服务器之间的负载。

远程 my-server-1 1194

根据我的推断,最后一行应该写成:

remote 10.8.0.1 1194

为了与服务器地址匹配。

(此说法不正确,请参阅这个答案.)

现在,我的问题是,服务器遵循哪种算法来从可用地址池(10.8.0.2-10.8.0.254)中向客户端分配地址?

是不是第一个客户端获取 .2 地址,下一个客户端获取 .3 地址?还是地址是随机分配的?或者是别的什么,如果是0.5,9.,为什么会这样呢?

答案1

OpenVPN 没有记录它用于在池中查找免费地址的确切算法,因为它是一个实现细节,只要它是一个免费地址,它并不重要。不过,您可以通过查看ifconfig_pool_find中的函数来了解它使用的算法pool.c

  • 如果处于duplicate_cn模式,则取第一个空闲地址。
  • 如果同一客户端之前使用的 IP 地址仍然空闲,请选择它。
  • 否则,从池中选择最近最少使用的空闲地址。

至于你的另一个问题:

remote 10.8.0.1 1194

不,您绝对不应该使用它作为remote地址。由于您尝试通过隧道本身到达隧道服务器,并且此时隧道尚未设置(在初始化期间),因此您无法联系服务器。如果你能以某种方式建立隧道,那么你就会有一个路由环路。

为了建立隧道,您需要有一个 IP 地址,您可以通过该 IP 地址联系隧道的另一端点,而无需利用隧道。这通常是该端点可访问的公共互联网地址。这就是你必须付出的remote

相关内容