OpenVPN's internal client IP address selection algorithm works as follows:
1 Use --client-connect script generated file for static IP (first choice).
2 Use --client-config-dir file for static IP (next choice).
3 Use --ifconfig-pool allocation for dynamic IP (last choice).
所以我们可以用这个脚本覆盖服务器ifconfig-pool。就我而言,我通过 IP 区分不同的客户端,并为特殊客户端设置静态 IP。当特殊IP出现时,会分配x.x.x.x一个静态IP给这个客户端。172.0.0.3的脚本client-connect是
$ cat /etc/openvpn/client-connect.sh
#!/bin/bash
if [ $trusted_ip = "x.x.x.x" ]; then
echo "static ip triggered for" $trusted_ip
echo "ifconfig-push 172.0.0.3 255.255.255.0" >> ${@:-1}
else
echo "still random ip for" $trusted_ip
fi
exit 0
我还在ifconfig-pool服务器端设置,以避免与172.0.0.3
mode server
server 172.0.0.0 255.255.255.0 'nopool'
ifconfig-pool 172.0.0.16 172.0.0.128 255.255.255.0
感谢IP Management 和 duplicate-cn,我们可以使用
--client-connect cmd
为不同的客户端将不同的配置写入动态生成的临时文件。在Reference manual for OpenVPN 2.4中,它说所以我们可以用这个脚本覆盖服务器
ifconfig-pool
。就我而言,我通过 IP 区分不同的客户端,并为特殊客户端设置静态 IP。当特殊IP出现时,会分配x.x.x.x
一个静态IP给这个客户端。172.0.0.3
的脚本client-connect
是我还在
ifconfig-pool
服务器端设置,以避免与172.0.0.3