我有一个在 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-persist
被ipp.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
并将它们均匀地分布在实例之间
正如所解释的,该解决方案可能具有性能优势这里。