Создание скриптов для управления пользователями VPN: полное руководство

Управление пользователями на VPN-сервере — задача, которая быстро перестаёт быть ручной, как только количество клиентов переваливает за десяток. Добавление новых пользователей, генерация ключей, выдача конфигураций, блокировка доступа, ротация сертификатов — всё это требует автоматизации. В этой статье мы разберём, как создавать скрипты для управления пользователями VPN на примере OpenVPN, WireGuard и Xray. Вы узнаете, как писать простые и эффективные Bash-скрипты, использовать Python для более сложной логики и интегрировать всё это в единую систему администрирования.

Но прежде чем мы перейдём к коду, давайте поговорим о том, почему автоматизация управления пользователями — это не просто удобство, а необходимость, особенно если вы используете личный VPN-сервер на VPS.

📑 Содержание:

Зачем автоматизировать управление пользователями VPN?

Представьте ситуацию: у вас 50 пользователей, каждому нужно выдать индивидуальные сертификаты и конфигурационные файлы. Вручную это займёт несколько часов, а если пользователь потерял ключи или нужно отозвать доступ — процесс повторяется. Автоматизация решает эти проблемы:

💡 Важно:

Если вы используете личный VPN-сервер на VPS, автоматизация становится особенно актуальной. Вы сами отвечаете за безопасность и доступ пользователей — скрипты помогут вам поддерживать порядок без лишних хлопот.

Скрипты для OpenVPN

OpenVPN — один из самых популярных протоколов, и для него существует множество готовых решений. Однако мы рассмотрим, как написать собственные скрипты для управления пользователями.

Структура файлов OpenVPN

Для управления пользователями OpenVPN используются следующие файлы и директории:

Пример скрипта добавления пользователя (Bash)

📄 add_user.sh

#!/bin/bash # Скрипт для добавления нового пользователя OpenVPN USERNAME=$1 if [ -z "$USERNAME" ]; then echo "Использование: $0 <имя_пользователя>" exit 1 fi cd /etc/openvpn/easy-rsa ./easyrsa gen-req "$USERNAME" nopass ./easyrsa sign-req client "$USERNAME" # Создание конфигурационного файла cat > /etc/openvpn/clients/"$USERNAME".ovpn <<EOF client dev tun proto udp remote YOUR_SERVER_IP 1194 resolv-retry infinite nobind persist-key persist-tun remote-cert-tls server cipher AES-256-GCM verb 3 <ca> $(cat /etc/openvpn/easy-rsa/pki/ca.crt) </ca> <cert> $(cat /etc/openvpn/easy-rsa/pki/issued/"$USERNAME".crt) </cert> <key> $(cat /etc/openvpn/easy-rsa/pki/private/"$USERNAME".key) </key> EOF echo "✅ Пользователь $USERNAME добавлен. Конфиг: /etc/openvpn/clients/$USERNAME.ovpn"

Пример скрипта удаления пользователя

📄 remove_user.sh

#!/bin/bash # Скрипт для удаления пользователя OpenVPN (отзыв сертификата) USERNAME=$1 if [ -z "$USERNAME" ]; then echo "Использование: $0 <имя_пользователя>" exit 1 fi cd /etc/openvpn/easy-rsa ./easyrsa revoke "$USERNAME" ./easyrsa gen-crl # Копируем новый CRL в основную директорию cp /etc/openvpn/easy-rsa/pki/crl.pem /etc/openvpn/ # Удаляем файлы клиента rm -f /etc/openvpn/clients/"$USERNAME".ovpn echo "❌ Пользователь $USERNAME удалён. Сертификат отозван."

Эти скрипты можно расширить, добавив проверку на существование пользователя, логирование действий и отправку конфигурации по email.

Скрипты для WireGuard

WireGuard проще в управлении, так как использует статические ключи и не требует сертификатов. Основной файл конфигурации — /etc/wireguard/wg0.conf.

Структура конфигурации WireGuard

Каждый пользователь — это секция [Peer] с публичным ключом, разрешёнными IP-адресами и опциональными настройками.

Пример скрипта добавления пользователя

📄 wg_add_user.sh

#!/bin/bash # Скрипт для добавления нового пользователя WireGuard USERNAME=$1 if [ -z "$USERNAME" ]; then echo "Использование: $0 <имя_пользователя>" exit 1 fi # Генерация ключей PRIVATE_KEY=$(wg genkey) PUBLIC_KEY=$(echo "$PRIVATE_KEY" | wg pubkey) # Определение следующего доступного IP-адреса (подсеть 10.0.0.0/24) LAST_IP=$(grep -oP '10\.0\.0\.\d+' /etc/wireguard/wg0.conf | sort -n | tail -1 | cut -d. -f4) if [ -z "$LAST_IP" ]; then NEXT_IP=2 else NEXT_IP=$((LAST_IP + 1)) fi # Добавление пира в конфигурацию cat >> /etc/wireguard/wg0.conf <<EOF [Peer] PublicKey = $PUBLIC_KEY AllowedIPs = 10.0.0.$NEXT_IP/32 EOF # Создание конфигурации для клиента cat > /root/"$USERNAME"-wg.conf <<EOF [Interface] PrivateKey = $PRIVATE_KEY Address = 10.0.0.$NEXT_IP/24 DNS = 1.1.1.1 [Peer] PublicKey = $(wg show wg0 public-key) Endpoint = YOUR_SERVER_IP:51820 AllowedIPs = 0.0.0.0/0 PersistentKeepalive = 25 EOF # Перезагрузка WireGuard wg syncconf wg0 <(wg-quick strip wg0) echo "✅ Пользователь $USERNAME добавлен. IP: 10.0.0.$NEXT_IP" echo "📄 Конфиг клиента: /root/$USERNAME-wg.conf"

Пример скрипта удаления пользователя

📄 wg_remove_user.sh

#!/bin/bash # Скрипт для удаления пользователя WireGuard по публичному ключу PUBLIC_KEY=$1 if [ -z "$PUBLIC_KEY" ]; then echo "Использование: $0 <публичный_ключ>" exit 1 fi # Удаление пира из конфигурации sed -i "/^\[Peer\]$/,/^$/d" /etc/wireguard/wg0.conf # Более точное удаление: ищем секцию с нужным ключом awk -v key="$PUBLIC_KEY" ' BEGIN { skip=0 } /^\[Peer\]/ { skip=0 } skip { next } $0 ~ "PublicKey = " key { skip=1; next } !skip { print } ' /etc/wireguard/wg0.conf > /tmp/wg0.conf.tmp mv /tmp/wg0.conf.tmp /etc/wireguard/wg0.conf # Перезагрузка WireGuard wg syncconf wg0 <(wg-quick strip wg0) echo "❌ Пользователь с ключом $PUBLIC_KEY удалён."

Скрипты для Xray (XHTTP + Reality)

Xray — это современный прокси-сервер, который поддерживает протоколы XHTTP, Reality, VLESS, Trojan и другие. Управление пользователями в Xray осуществляется через JSON-конфигурацию.

Технология XHTTP + Reality — это передовой метод маскировки VPN-трафика под обычный HTTPS-запрос к легитимному сайту. DPI-системы не могут отличить ваше соединение от реального браузера Chrome, потому что:

  • Имитация TLS-рукопожатия — соединение выглядит как стандартный HTTPS-запрос.
  • Маскировка под Chrome — все параметры соответствуют реальному браузеру.
  • Отсутствие характерных сигнатур — в отличие от OpenVPN или WireGuard, у XHTTP нет узнаваемых паттернов.

Для управления пользователями в Xray используется файл /etc/xray/config.json. Рассмотрим примеры скриптов.

Структура конфигурации Xray

В конфигурации Xray пользователи определяются в секции inbounds с указанием clients — массива объектов с полями id (UUID) и email.

Пример скрипта добавления пользователя (Python)

📄 xray_add_user.py

#!/usr/bin/env python3 import json import uuid import sys import os CONFIG_PATH = "/etc/xray/config.json" def add_user(email): with open(CONFIG_PATH, 'r') as f: config = json.load(f) new_id = str(uuid.uuid4()) new_user = { "id": new_id, "email": email, "flow": "xtls-rprx-vision" } # Находим нужный inbound (обычно с protocal = "vless" или "trojan") for inbound in config.get("inbounds", []): if inbound.get("protocol") in ["vless", "trojan"]: clients = inbound.get("settings", {}).get("clients", []) clients.append(new_user) inbound["settings"]["clients"] = clients break else: print("❌ Inbound с поддерживаемым протоколом не найден") sys.exit(1) with open(CONFIG_PATH, 'w') as f: json.dump(config, f, indent=2) # Перезапуск Xray os.system("systemctl restart xray") print(f"✅ Пользователь {email} добавлен. UUID: {new_id}") if __name__ == "__main__": if len(sys.argv) != 2: print("Использование: python3 xray_add_user.py ") sys.exit(1) add_user(sys.argv[1])

Пример скрипта удаления пользователя

📄 xray_remove_user.py

#!/usr/bin/env python3 import json import sys import os CONFIG_PATH = "/etc/xray/config.json" def remove_user(email): with open(CONFIG_PATH, 'r') as f: config = json.load(f) removed = False for inbound in config.get("inbounds", []): if inbound.get("protocol") in ["vless", "trojan"]: clients = inbound.get("settings", {}).get("clients", []) new_clients = [c for c in clients if c.get("email") != email] if len(new_clients) != len(clients): removed = True inbound["settings"]["clients"] = new_clients if not removed: print(f"❌ Пользователь {email} не найден") sys.exit(1) with open(CONFIG_PATH, 'w') as f: json.dump(config, f, indent=2) os.system("systemctl restart xray") print(f"❌ Пользователь {email} удалён.") if __name__ == "__main__": if len(sys.argv) != 2: print("Использование: python3 xray_remove_user.py ") sys.exit(1) remove_user(sys.argv[1])

Python для сложной автоматизации

Bash-скрипты хороши для простых задач, но для сложной логики (интеграция с базой данных, веб-интерфейс, API) лучше использовать Python. Вот пример структуры для управления пользователями через SQLite:

📄 vpn_manager.py (фрагмент)

import sqlite3 import uuid import json import subprocess class VPNManager: def __init__(self, db_path="users.db"): self.conn = sqlite3.connect(db_path) self.cursor = self.conn.cursor() self._init_db() def _init_db(self): self.cursor.execute(''' CREATE TABLE IF NOT EXISTS users ( id TEXT PRIMARY KEY, username TEXT UNIQUE, protocol TEXT, config TEXT, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, active BOOLEAN DEFAULT 1 ) ''') self.conn.commit() def add_user(self, username, protocol="wireguard"): # Генерация конфигурации в зависимости от протокола if protocol == "wireguard": config = self._generate_wireguard_config(username) elif protocol == "openvpn": config = self._generate_openvpn_config(username) elif protocol == "xray": config = self._generate_xray_config(username) else: raise ValueError(f"Неподдерживаемый протокол: {protocol}") user_id = str(uuid.uuid4()) self.cursor.execute( "INSERT INTO users (id, username, protocol, config) VALUES (?, ?, ?, ?)", (user_id, username, protocol, json.dumps(config)) ) self.conn.commit() return user_id, config def remove_user(self, username): self.cursor.execute("UPDATE users SET active = 0 WHERE username = ?", (username,)) self.conn.commit() # Дополнительно: отзыв сертификатов/ключей def get_user_config(self, username): self.cursor.execute("SELECT config FROM users WHERE username = ? AND active = 1", (username,)) row = self.cursor.fetchone() if row: return json.loads(row[0]) return None # ... остальные методы

Лучшие практики и безопасность

При создании скриптов для управления пользователями VPN важно соблюдать несколько правил:

🔒 Безопасность прежде всего:

Если вы используете личный VPN-сервер на VPS, вы несёте полную ответственность за безопасность данных. Автоматизация должна не только упрощать управление, но и усиливать защиту. Используйте Fail2Ban, настраивайте брандмауэр и регулярно обновляйте сервер.

Личный VPS — идеальная платформа для автоматизации

🚀 Почему личный VPS лучше массового VPN?

В отличие от обычных VPN-сервисов, где 1000+ человек сидят на одном IP, вы получаете персональный VPS.

  • Никаких «шумных соседей»: ваш IP-адрес используете только вы. Никто не сможет «подставить» вас своей активностью.
  • Стабильная скорость: пропускная способность не делится между сотнями пользователей.
  • Минимальный риск блокировок: массовые IP-адреса часто попадают в бан-листы из-за действий других пользователей. Ваш личный IP — чистый.
  • Полный контроль: вы сами управляете сервером, выбираете протоколы и настройки безопасности. Вы можете запускать свои скрипты и полностью контролировать процесс.
  • Технология XHTTP + Reality: ваш трафик маскируется под обычный HTTPS, DPI не может его отличить от обычного браузера Chrome.

🎯 Нас в 1000 раз сложнее заблокировать и отследить.

Потому что каждый клиент VPS-VPN — это отдельный выделенный сервер с уникальным IP-адресом и индивидуальными настройками маскировки.

Скрипты, которые мы рассмотрели, прекрасно работают на любом VPS. Но если вы хотите получить максимальную защиту от DPI и блокировок, выбирайте решение с поддержкой XHTTP + Reality. Эта технология делает ваш трафик неотличимым от обычного веб-сёрфинга, а значит — ваши пользователи всегда будут на связи.

🔥 Получите свой личный VPN-сервер с технологией XHTTP + Reality

Мы в VPS-VPN предлагаем полностью выделенный VPN-сервер на вашем собственном VPS. Никаких общих IP, никаких «соседей», только ваш трафик и максимальная защита.

Ваш трафик будет неотличим от обычного HTTPS — DPI-системы увидят обычный браузер Chrome. Нас в 1000 раз сложнее заблокировать.

А наши скрипты для управления пользователями помогут вам автоматизировать администрирование и сэкономить время.

🚀 Заказать личный VPN-сервер

Заключение

Создание скриптов для управления пользователями VPN — это ключевой навык для любого администратора, который хочет эффективно управлять своей VPN-инфраструктурой. Мы рассмотрели примеры для OpenVPN, WireGuard и Xray, а также затронули вопросы безопасности и лучшие практики.

Автоматизация — это не просто удобство, это необходимость в современном мире, где количество пользователей и угроз постоянно растёт. А использование личного VPS с технологией XHTTP + Reality даёт вам не только полный контроль, но и максимальную защиту от блокировок.

✅ Готовы попробовать?

Выберите VPS-VPN — и получите не просто VPN, а полноценный выделенный сервер с передовыми технологиями маскировки. Автоматизируйте управление пользователями с помощью скриптов и наслаждайтесь стабильной и безопасной работой.

Интернет должен быть свободным, быстрым и безопасным. Выбирайте решение, которое работает по-настоящему.