在我的 VPN 逻辑中,我的所有客户端证书都有以下 CN 模板:
number.mycompany.com,其中数字介于 2 至 65536 之间
对于每个 CN,我添加一个配置文件,如下所示:
$ cat 65501.mycompany.com
ifconfig-push 10.22.255.221 255.255.0.0
所以基本上基于CN号码区域我在相关文件中配置静态ip,从号码到ip的转换逻辑:
$ python3 -c "print('10.22.{}.{}'.format(*divmod(65501, 256)))"
10.22.255.221
有没有办法使用脚本或其他方式在配置中动态地执行此操作,而不是每次都添加客户端配置文件?
答案1
仔细阅读手册后,我发现可以添加一个脚本,该脚本能够使用标志动态更改每个客户端的配置--client-connect
。
server.conf
我在我的文件中添加了以下配置行:
client-connect /etc/openvpn/client_set_static_ip.sh
文件内容为以下 bash 脚本:
#!/usr/bin/env bash
DYNAMIC_GENERATED_CONFIG_PATH=$1
function get_client_num() {
# returns the client number from the `common_name` env variable
local cn_arr=(${common_name//./ })
local cn_arr_first=${cn_arr[0]}
echo "${cn_arr_first}"
}
function generate_client_ip() {
# returns generated remote client ip from the `ifconfig_pool_remote_ip` env variable and client_num
local ifconfig_remote_arr=(${ifconfig_pool_remote_ip//./ })
local client_num=$(get_client_num)
local remote_ip_octet_1=${ifconfig_remote_arr[0]}
local remote_ip_octet_2=${ifconfig_remote_arr[1]}
local remote_ip_octet_3=$((client_num/256))
local remote_ip_octet_4=$((client_num%256))
echo "${remote_ip_octet_1}.${remote_ip_octet_2}.${remote_ip_octet_3}.${remote_ip_octet_4}"
}
remote_ip=$(generate_client_ip)
echo "ifconfig-push ${remote_ip} 255.255.0.0" > "${DYNAMIC_GENERATED_CONFIG_PATH}"