Files
hysteria2/README.md
T
Sergey Antropoff 47e440341a Initial commit: Ansible role for Hysteria2 VPN server deployment.
Includes install/update/uninstall playbooks, Makefile, vault-based SSH credentials, per-server and global HTML export with QR codes.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-01 02:02:58 +03:00

6.6 KiB
Raw Blame History

Ansible-роль: Hysteria2 Server

Ansible-роль для установки Hysteria 2 на Debian/Ubuntu VPS: ACME-сертификат, masquerade под nginx, несколько пользователей, экспорт URL/QR и HTML-каталог.

Быстрый старт

cd ~/Разработка/hysteria2

make init            # inventory, group_vars, vault, .vault_pass
# отредактировать:
#   inventory/hosts.yml
#   group_vars/all.yml
#   group_vars/hysteria2_servers/vault.yml

make vault-encrypt   # зашифровать пароли VPS
make ping            # проверить SSH
make install         # установка → output/ → браузер откроется сам

Makefile

Команда Описание
make help Справка
make init Создать конфиги из .example
make ping Проверить SSH к VPS
make status systemctl status hysteria-server
make install Установка + экспорт + output/index.html + открытие в браузере
make update Обновить бинарник, конфиг, перевыпустить экспорт
make export Только экспорт URL/QR/HTML
make uninstall Удалить Hysteria2 с VPS
make vault-encrypt Зашифровать vault
make vault-edit Редактировать vault

Примеры

make install LIMIT=vps-de
make update LIMIT=vps-nl
make export
make uninstall LIMIT=vps-de EXTRA_VARS='hysteria2_uninstall_remove_local_output=true'
make install EXTRA_VARS='hysteria2_open_browser=false'   # без авто-открытия браузера

Inventory

all:
  children:
    hysteria2_servers:
      hosts:
        vps-de:
          ansible_host: 203.0.113.10
          ansible_port: 2222              # SSH-порт (если не 22)
          ansible_user: root
          ansible_password: "{{ vault_ssh_passwords['vps-de'] }}"
          hysteria2_domain: vpn-de.example.com
          hysteria2_users:
            - my
            - friend

        vps-nl:
          ansible_host: 203.0.113.20
          ansible_user: root
          ansible_password: "{{ vault_ssh_passwords['vps-nl'] }}"
          hysteria2_domain: vpn-nl.dynu.net
          hysteria2_users:
            - alice
            - bob

SSH-подключение к VPS

Параметр Где Описание
ansible_host inventory IP VPS
ansible_port inventory SSH-порт (по умолчанию 22)
ansible_user inventory Пользователь SSH (обычно root)
ansible_password inventory + vault Пароль из vault_ssh_passwords
ansible_ssh_private_key_file inventory Альтернатива паролю — SSH-ключ
# group_vars/hysteria2_servers/vault.yml
vault_ssh_passwords:
  vps-de: "root-password-1"
  vps-nl: "root-password-2"

Ключи в vault_ssh_passwords совпадают с именами хостов в inventory.

Пароли VPN-пользователей

  1. Vault (рекомендуется):
vault_hysteria2_user_passwords:
  vps-de:
    friend: "Aingae0Okit1eek4eeZahFohVei4akee"
  1. Per-host в inventory:
hysteria2_user_passwords:
  friend: "custom-password"
  1. Автогенерацияpwgen -s 40, если пароль не задан.

При make update пароли подтягиваются из output/<server>/server-info.yml, если не указаны в vault/inventory.

Результат: папка output/

output/
├── index.html              ← общий каталог всех серверов (открывается в браузере)
├── vps-de/
│   ├── index.html          ← страница сервера
│   ├── my.url
│   ├── my.png              ← QR PNG
│   ├── my.qr.txt           ← QR ASCII
│   ├── my.txt
│   └── server-info.yml
└── vps-nl/
    └── ...

HTML-страницы

output/index.html — общий каталог:

  • все серверы и пользователи на одной странице
  • навигация по серверам
  • поля ссылки/пароля с кнопкой копирования
  • QR-коды
  • ссылки на файлы и страницы серверов

output/<server>/index.html — страница одного сервера (тот же стиль, все пользователи сервера).

После make install, make update и make export output/index.html автоматически открывается в браузере (macOS: open, Linux: xdg-open).

Отключить авто-открытие:

# group_vars/all.yml
hysteria2_open_browser: false

Или: make install EXTRA_VARS='hysteria2_open_browser=false'

QR-коды

PNG генерируются средствами Ansible (без Python):

  1. apt install qrencode на VPS (остаётся установленным)
  2. qrencode -o user.png "hysteria2://..."
  3. fetch — скачивание PNG на control node

ASCII QR — hysteria share --qruser.qr.txt.

Переменные

Переменная Где Описание
hysteria2_domain host Домен с A-записью на IP
hysteria2_users host Список имён VPN-пользователей
hysteria2_acme_email group Email для Let's Encrypt
hysteria2_user_passwords host/vault Свои пароли VPN
hysteria2_output_dir group Папка экспорта (по умолчанию ./output)
hysteria2_output_name host Имя подпапки (по умолчанию inventory_hostname)
hysteria2_generate_qr_png group PNG QR через qrencode
hysteria2_open_browser group Открыть output/index.html после экспорта
hysteria2_uninstall_remove_local_output extra-vars Удалить output/<server>/ при uninstall

Безопасность

  • output/ содержит пароли и URL — в .gitignore
  • inventory/hosts.yml, vault.yml, .vault_pass — не коммитить
  • После make init выполните make vault-encrypt

Требования

  • Ansible 2.14+
  • Debian/Ubuntu VPS с sudo
  • Домен с A-записью на IP сервера
  • Для авто-открытия браузера: macOS или Linux с xdg-open