对于多客户端 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
。