阿和
发布于 2025-06-17 / 5 阅读
0
0

openvpn-as连接数限制修改

官方提供的默认支持连接数2在大多数时候不够用所以需要调整 自动处理shell 可能需要调整授权文件目录(LICENSE_FILE_PATH)以及强依赖于unzip、zip包(此处使用的apt安装如报错请手动安装)

获取文件名称

进入/usr/local/openvpn_as/lib/python目录查找pyovpn-2.0-py3.12.egg格式的文件(红色字体内容的可能会变动)

#授权文件目录
LICENSE_FILE_PATH="/usr/local/openvpn_as/lib/python"
#授权文件名称 ps:版本不同此处内容也不同
LICENSE_FILE_NAME=$(ls -al $LICENSE_FILE_PATH | awk '{print $9}' | grep -E "^pyovpn-[0-9.]+-py3.[0-9]+.egg$")
echo "授权文件名称:${LICENSE_FILE_NAME}"

解压文件并修改限制

unzip -q pyovpn-2.0-py3.12.egg 
cd ./pyovpn/lic/
mv uprop.pyc uprop2.pyc

echo "写入新的授权文件内容"
# 写入新的文件内容
cat << EOF > uprop.py
from pyovpn.lic import uprop2
old_figure = None

def new_figure(self, licdict):
      ret = old_figure(self, licdict)
      ret['concurrent_connections'] = 2048
      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 && mv __pycache__/uprop.*.pyc uprop.pyc

cd ../../
zip -rq pyovpn-2.0-py3.12.upd.egg ./pyovpn ./EGG-INFO ./common

备份源文件并使用修改后的内容替换

cp /usr/local/openvpn_as/lib/python/pyovpn-2.0-py3.12.egg{,.bak}
# 移动到原始授权文件位置
mv /tmp/pyovpn-2.0-py3.12.upd.egg  /usr/local/openvpn_as/lib/python/pyovpn-2.0-py3.12.egg

重启openvpn-as服务

根据不同的部署方式命令不同请自行查阅

自动处理shell脚本内容

#!/bin/bash

# 生成随机字符串
random_string() {
    local length=$1
    cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w ${length} | head -n 1
}

# 工作目录
BASE_PATH=$(echo "/tmp/unlock-lic-$(random_string 6)")
mkdir -p "${BASE_PATH}" && cd "${BASE_PATH}"
echo "工作目录:${BASE_PATH}"

cleanup() {
    echo "正在清理临时目录: ${BASE_PATH}"
    rm -rf "${BASE_PATH}"
}
trap cleanup EXIT SIGINT SIGTERM ERR

#授权文件目录
LICENSE_FILE_PATH="/usr/local/openvpn_as/lib/python"
#授权文件名称 ps:版本不同此处内容也不同
LICENSE_FILE_NAME=$(ls -al $LICENSE_FILE_PATH | awk '{print $9}' | grep -E "^pyovpn-[0-9.]+-py3.[0-9]+.egg$")
echo "授权文件名称:${LICENSE_FILE_NAME}"

if [ -z "${LICENSE_FILE_NAME:-}" ]; then
    echo "未找到授权文件"
    exit 1
fi


# 检查是否安装了 unzip 和 zip
if ! command -v unzip >/dev/null 2>&1 || ! command -v zip >/dev/null 2>&1; then
    echo "正在安装 unzip 和 zip..."
    apt update && \
    apt install -y unzip zip && \
    apt-get clean && rm -rf /var/lib/apt/lists/* || \
    { echo "安装失败"; exit 1; }
else
    echo "unzip 和 zip 已存在,跳过安装"
fi

cp ${LICENSE_FILE_PATH}/${LICENSE_FILE_NAME} ./${LICENSE_FILE_NAME}

unzip -q ${LICENSE_FILE_NAME}


cd ./pyovpn/lic/
if [ -f "uprop2.pyc" ]; then
    echo "已存在破解信息请检查后再试"
    exit 1
fi

mv uprop.pyc uprop2.pyc

echo "写入新的授权文件内容"
# 写入新的文件内容
cat << EOF > uprop.py
from pyovpn.lic import uprop2
old_figure = None

def new_figure(self, licdict):
      ret = old_figure(self, licdict)
      ret['concurrent_connections'] = 2048
      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

echo "编译新的授权信息..."
#编译
python3 -O -m compileall uprop.py && mv __pycache__/uprop.*.pyc uprop.pyc

cd "${BASE_PATH}"
echo "正在重新打包授权文件内容"
# 重新打包
zip -rq ${LICENSE_FILE_NAME} ./pyovpn ./EGG-INFO ./common
# 备份原始授权文件
cp ${LICENSE_FILE_PATH}/${LICENSE_FILE_NAME}{,.bak}
# 移动到原始授权文件位置
mv ${LICENSE_FILE_NAME} ${LICENSE_FILE_PATH}/${LICENSE_FILE_NAME}

echo "请重新启动openvpn服务"


评论