安装
使用docker部署OpenVPN Access Server最新版本(3.2.2)
由于使用的是1panel面板部署,所以部署过程略过(可参考其他安装步骤)
解除2用户限制
OpenVPN Access Server在无授权的情况下只有2个,意味着同时只能2个连接在线

根据公开教程,步骤繁杂,而且有很多人出现各种各样的问题,所以编写了一个shell脚本用来自动化hookOpenVPN Access Server
#!/bin/bash
# 第一步:更新系统包
apt update -y && apt upgrade -y && apt install zip unzip vim -y
# 第二步:切换到/tmp
cd /tmp
# 第三步:提取Python版本并备份
py_file=$(ls /usr/local/openvpn_as/lib/python/pyovpn-2.0-py*.egg 2>/dev/null | head -1)
if [ -z "$py_file" ]; then
echo "Error: pyovpn egg file not found"
exit 1
fi
py_version=$(echo "$py_file" | grep -oP 'pyovpn-2.0-py\K[0-9.]+' | sed 's/\.$//')
echo "Detected Python version: $py_version"
cp "$py_file" ./
cp "$py_file" "$py_file.bak"
# 第四步:解压
unzip -q "pyovpn-2.0-py${py_version}.egg"
# 第五步:重命名原文件
cd ./pyovpn/lic/
mv uprop.pyc uprop2.pyc
# 第六步:创建新uprop.py
cat > uprop.py << 'EOF'
from pyovpn.lic import uprop2
old_figure = None
def new_figure(self, licdict):
ret = old_figure(self, licdict)
ret['concurrent_connections'] = 4294967295
return ret
for x in dir(uprop2):
if x[:2] == '__':
continue
if x == 'UsageProperties':
exec('old_figure = uprop2.UsageProperties.figure')
exec('uprop2.UsageProperties.figure = new_figure')
exec('%s = uprop2.%s' % (x, x))
EOF
# 第七步:编译
python3 -O -m compileall uprop.py 2>/dev/null
if [ -f __pycache__/uprop.*.pyc ]; then
mv __pycache__/uprop.*.pyc uprop.pyc
else
# 如果编译失败,直接复制py文件作为pyc
cp uprop.py uprop.pyc
fi
# 第八步:回到上级目录
cd ../../
# 第九步:重新打包
zip -rq "pyovpn-2.0-py${py_version}.egg" ./pyovpn ./EGG-INFO ./common
# 第十步:覆盖原文件
mv -f "pyovpn-2.0-py${py_version}.egg" "/usr/local/openvpn_as/lib/python/pyovpn-2.0-py${py_version}.egg"
# 第十一步:提醒重启
echo "操作完成!请重启OpenVPN容器使配置生效"
echo "命令示例:docker restart openvpn_as"或者在docker容器内直接执行
apt update -y && apt upgrade -y && apt install zip unzip -y && cd /tmp && py_file=$(ls /usr/local/openvpn_as/lib/python/pyovpn-2.0-py*.egg 2>/dev/null | head -1) && py_version=$(echo "$py_file" | grep -oP 'pyovpn-2.0-py\K[0-9.]+') && cp "$py_file" ./ && cp "$py_file" "$py_file.bak" && unzip -q "pyovpn-2.0-py${py_version}.egg" && cd ./pyovpn/lic/ && mv uprop.pyc uprop2.pyc && cat > uprop.py << 'EOF'
from pyovpn.lic import uprop2
old_figure = None
def new_figure(self, licdict):
ret = old_figure(self, licdict)
ret['concurrent_connections'] = 4294967295
return ret
for x in dir(uprop2):
if x[:2] == '__':
continue
if x == 'UsageProperties':
exec('old_figure = uprop2.UsageProperties.figure')
exec('uprop2.UsageProperties.figure = new_figure')
exec('%s = uprop2.%s' % (x, x))
EOF
python3 -O -m compileall uprop.py >/dev/null 2>&1 && mv __pycache__/uprop.*.pyc uprop.pyc && cd ../../ && zip -rq "pyovpn-2.0-py${py_version}.egg" ./pyovpn ./EGG-INFO ./common && mv -f "pyovpn-2.0-py${py_version}.egg" "/usr/local/openvpn_as/lib/python/pyovpn-2.0-py${py_version}.egg" && echo "操作完成!请重启OpenVPN容器使配置生效" && echo "命令示例:docker restart openvpn_as"注意:ret['concurrent_connections'] = 4294967295中的4294967295是授权数量
4294967295是uint32_t的最大值,按照自己想要的改,不超过这个值就行
执行完成后会提示重启容器

提示重启后重启docker容器,保证效果
实际效果
顺利突破2用户的限制

常见问题
一、多端同时在线
根据官方文档,用户分为:
user_connect: Allows multiple VPN connections.
user_connect:允许建立多个 VPN 连接。user_compile: Restricts users ot a single VPN connection.
user_compile:限制用户只能使用一个 VPN 连接。
只有用户是user_connect状态才能多端同时在线
想要同时在线,不能进行以下设置:
VPN gateway settings. VPN 网关设置。
Port forwarding (DMZ). 端口转发(DMZ 模式)。
User-level access rules. 用户级别的访问规则。
Admin access. 管理员权限。
Static IP assignment. 静态 IP 分配。
设置完成后需要重启应用
来源:OpenVPN 支持中心
参考来源
参考自
OpenVPN AS 3.2.2部署+限制解除
https://wcyuns.cn/archives/openvpn-AS-hook
Comments