OpenVPN 排除池中的 IP

OpenVPN 排除池中的 IP

我有一个在 Linux Ubuntu 机器上运行的 OpenVPN 服务器。多个客户端连接到该服务器(500+),这就是我设置服务器桥接选项的原因,如下所示:

server-bridge 10.0.100.1 255.255.0.0 10.0.200.1 10.0.210.254

这非常有效。客户端获得动态IP地址,当客户端数量超过255时,它从200块变为201块。

我有一个连接到这些客户端的内部应用程序,但该应用程序在 IP 地址 10.0.200.255 和 10.0.201.0 上崩溃。

这些 IP 地址在我提供的范围内,但我无法使用它们。

有没有办法将它们排除在我的池之外?

或者我需要改变我的设置吗?

答案1

使用单个配置文件使用 OpenVPN 的内置 DHCP 服务器无法直接使用多个 IP 范围或排除某些 IP。

我提出3种可能的解决方案:

  • 解决方法,但不保证有效
  • DHCP 代理模式,简单,干净,还有很多其他选择
  • 多个实例,更复杂,可能具有性能优势

然而,我建议解决问题的根本原因,即有缺陷的内部应用程序。

解决方法

在服务器配置文件中添加:

server-bridge 10.0.100.1 255.255.0.0 10.0.200.1 10.0.210.254
ifconfig-pool-persist ipp.txt 0

0指令末尾的ifconfig-pool-persistipp.txt视为只读配置文件。

创建一个文件/etc/openvpn/ipp.txt

reserved-not-used-cn-1,10.0.200.255
reserved-not-used-cn-2,10.0.201.0
reserved-not-used-cn-3,10.0.201.255
...

将所有保留的 IP 地址添加到此文件中,格式为<Common-Name>,<IP-address>.对于字段中的值,<Common-Name>请选择永远不会在任何客户端证书中使用的值。

正如 OpenVPN 手册页中所述,这并不能保证始终有效:

请注意,OpenVPN 仅将此文件中的条目视为基于公用名称和 IP 地址之间过去关联的建议。它们不保证给定的公用名始终会收到给定的 IP 地址。如果您想要保证分配,请使用--ifconfig-push

DHCP 代理模式

由于您正在使用轻敲设置,这可能是最好的解决方案。它允许使用功能齐全的DHCP服务器在服务器端子网或服务器本身上,具体取决于配置。要配置以太网桥接,必须首先使用操作系统的桥接功能将 TAP 接口与另一个接口桥接。

开放VPN服务器配置:

server-bridge

该指令扩展如下:

mode server
tls-server
push "route-gateway dhcp"

DHCPD服务器配置:

subnet 10.0.100.1 netmask 255.255.0.0 {
  range 10.0.200.1 10.0.200.254;
  range 10.0.201.1 10.0.201.254;
  range 10.0.202.1 10.0.202.254;
  range 10.0.203.1 10.0.203.254;
  ...
}

多个实例

另一种方法是/24使用多个配置文件为每个子网创建一个单独的 openvpn 实例。但这需要为每个实例使用不同的端口。

实例1配置文件:

port 11941
server-bridge 10.0.100.1 255.255.0.0 10.0.200.1 10.0.200.254

实例2配置文件:

port 11942
server-bridge 10.0.100.1 255.255.0.0 10.0.201.1 10.0.201.254

...

这需要:

  • 具有相应端口号的 IP 范围特定客户端配置,
  • iptables或者例如对端口上的传入连接使用负载平衡1194并将它们均匀地分布在实例之间

正如所解释的,该解决方案可能具有性能优势这里

相关内容