安装

使用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 支持中心

参考来源

参考自

https://oskr.cn/archives/openvpnaccessserver294po-jie-ren-shu-xian-zhi