OpenVPN根据脚本动态为客户端添加静态IP

OpenVPN根据脚本动态为客户端添加静态IP

在我的 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}"

相关内容