Files
K3S/addons/hysteria2-server
Sergey Antropoff ed44d6418e Molecule и CI: единая схема тестов для аддонов и удобные параллельные прогоны
Makefile
- Уникальные имена контейнеров на каждый вызов make (ANSIBLE_RUN_ID); переопределение
  через ANSIBLE_CONTAINER_NAME / MOLECULE_CONTAINER_NAME; отдельное имя для
  Molecule, чтобы k3s-ansible и molecule не конфликтовали.
- Старые цели molecule-prometheus и molecule-istio переведены на molecule-addon
  (prometheus-stack, istio); добавлены явные molecule-addon-prometheus-stack и
  molecule-addon-istio; в molecule-addon-all включены prometheus-stack и istio
  (полный набор аддонов), скорректированы подписи.
- Phony-таргет dashboard (без внесения кода в dashboard/ в этот коммит).

Сценарии Molecule (converge/verify) — десятки аддонов
- Добавлены/выровнены переменные и шаблоны под текущие роли (harbor, hysteria2,
  ingress-*, jenkins, mediaserver, netbird, nextcloud, splitgw, vault,
  vaultwarden и др.).
- Helm/файлы на хост: delegate_to: localhost, run_once где уместно
  (technitium-dns, yandex-dns-controller); verify на localhost для
  file-based проверок.
- Уточнения проверок: metrics-server, minio, promtail, pushgateway, velero
  (bool из фактов/строк), splitgw (JSON, поиск портов/DNS-правил в структуре).
- В meta ролей: prometheus_stack + namespace, istio + namespace; у istio
  согласованы converge/verify (в т.ч. метрики, ослаблены жёсткие assert под
  шаблоны Kiali).
- csi-nfs: комментарий к volume_binding_mode (Immediate / WaitForFirstConsumer).

Инфраструктура
- .gitignore: каталог dashboard/ (локальная копия не в репозитории).
- docker-compose: убрано фиксированное container_name для параллельных
  ; TZ по умолчанию Europe/Moscow.
- roles/k3s/tasks/prereqs.yml: повторные попытки update_cache и apt install
  при кратковременных сбоях зеркал/сети.
2026-04-28 01:16:05 +03:00
..

Hysteria2 Server

Устанавливает Hysteria2 VPN-сервер на удалённый VPS. На выходе даёт готовый URL для вставки в Shadowrocket, NekoBox, Hiddify или vault_hysteria2_url (Prowlarr sidecar).

Что устанавливается

  • Бинарник hysteria последней версии с GitHub
  • Системный пользователь hysteria
  • Конфиг в /etc/hysteria/config.yaml
  • systemd-сервис hysteria2 (autostart)
  • Правило firewall (ufw / firewalld)
  • TLS: self-signed cert или Let's Encrypt (ACME) или свой сертификат

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

1. Добавить VPS в inventory

# inventory/hosts.ini
[hysteria2_server]
myvps ansible_host=1.2.3.4 ansible_user=root

2. Vault секреты

make vault-edit
# group_vars/all/vault.yml
vault_hysteria2_server_password: "my-secure-password-32chars+"
vault_hysteria2_obfs_password: "obfs-secret"   # если obfs включён

3. Деплой

С SSH-ключом (рекомендуется):

make addon-hysteria2-server

С SSH-паролем (ввод в терминале):

make addon-hysteria2-server ARGS="-k"

С SSH-паролем + sudo-паролем:

make addon-hysteria2-server ARGS="-k -K"

На конкретный хост (без inventory):

make addon-hysteria2-server ARGS="-i '1.2.3.4,' -u root -k"

После деплоя Ansible выведет готовый URL:

vault_hysteria2_url: "hysteria2://password@1.2.3.4:443?insecure=1#MyVPS"

Конфигурация

Режимы TLS

Self-signed (по умолчанию) — без домена, IP-only

# group_vars/all/main.yml
hysteria2_server_tls_mode: "selfsigned"

Клиент подключается с insecure=1. URL автоматически получает ?insecure=1.

ACME — Let's Encrypt (нужен домен)

hysteria2_server_tls_mode: "acme"
hysteria2_server_domain: "vpn.example.com"
hysteria2_server_acme_email: "admin@example.com"

Требования: порт 80 открыт, DNS A-запись указывает на VPS. Hysteria2 сам получает и обновляет сертификат.

Custom — свои cert/key файлы

hysteria2_server_tls_mode: "custom"
hysteria2_server_tls_cert_path: "/etc/hysteria/server.crt"
hysteria2_server_tls_key_path: "/etc/hysteria/server.key"

Сертификаты должны уже лежать на сервере до запуска роли.


Obfuscation (salamander)

Скрывает протокол от DPI — важно если Hysteria2 блокируется провайдером:

hysteria2_server_obfs_enabled: true
# vault.yml
vault_hysteria2_obfs_password: "random-obfs-phrase"

Лимиты полосы на клиента

hysteria2_server_up_mbps: 100     # исходящий с сервера (= входящий у клиента)
hysteria2_server_down_mbps: 100   # входящий на сервер (= исходящий у клиента)

0 — без ограничений.


Все переменные

hysteria2_server_version: ""          # "" = автоопределение последней версии
hysteria2_server_port: 443
hysteria2_server_password: "{{ vault_hysteria2_server_password }}"

hysteria2_server_tls_mode: "selfsigned"   # selfsigned | acme | custom
hysteria2_server_domain: ""
hysteria2_server_acme_email: ""
hysteria2_server_tls_cert_path: "/etc/hysteria/server.crt"
hysteria2_server_tls_key_path:  "/etc/hysteria/server.key"

hysteria2_server_obfs_enabled: false
hysteria2_server_obfs_password: "{{ vault_hysteria2_obfs_password | default('') }}"

hysteria2_server_masquerade_enabled: true
hysteria2_server_masquerade_url: "https://bing.com/"

hysteria2_server_up_mbps: 0
hysteria2_server_down_mbps: 0

hysteria2_server_name: "MyVPS"   # метка в URL (для клиентов)

Подключение SSH

Ключ (рекомендуется)

# Скопировать ключ на VPS
ssh-copy-id root@1.2.3.4

# Деплой
make addon-hysteria2-server

Пароль

# Ввод пароля в терминале:
make addon-hysteria2-server ARGS="-k"

Или хранить в vault (не рекомендуется для SSH):

# inventory/hosts.ini
[hysteria2_server]
myvps ansible_host=1.2.3.4 ansible_user=root ansible_ssh_pass="{{ vault_hysteria2_vps_ssh_password }}"

Нестандартный SSH порт

# inventory/hosts.ini
[hysteria2_server]
myvps ansible_host=1.2.3.4 ansible_user=root ansible_port=2222

Примеры inventory

Один VPS, root + ключ

[hysteria2_server]
myvps ansible_host=1.2.3.4 ansible_user=root

Один VPS, обычный пользователь + sudo

[hysteria2_server]
myvps ansible_host=1.2.3.4 ansible_user=ubuntu
make addon-hysteria2-server ARGS="-K"   # -K = prompt sudo password

Несколько серверов (мульти-регион)

[hysteria2_server]
vps-nl ansible_host=1.2.3.4 ansible_user=root
vps-de ansible_host=5.6.7.8 ansible_user=root

Что делать с URL после деплоя

Ansible выведет в конце:

vault_hysteria2_url: "hysteria2://mypassword@1.2.3.4:443?insecure=1&obfs=salamander&obfs-password=secret#MyVPS"

Вариант 1 — вставить в vault для Prowlarr:

# group_vars/all/vault.yml
vault_hysteria2_url: "hysteria2://mypassword@1.2.3.4:443?insecure=1#MyVPS"

Затем: make addon-mediaserver

Вариант 2 — вставить в Shadowrocket / NekoBox / Hiddify: Скопируй строку hysteria2://... и добавь как новый профиль в клиент.


Управление сервисом

# Статус
ssh root@1.2.3.4 systemctl status hysteria2

# Логи в реальном времени
ssh root@1.2.3.4 journalctl -u hysteria2 -f

# Перезапуск после изменения конфига
ssh root@1.2.3.4 systemctl restart hysteria2

# Обновить до последней версии
make addon-hysteria2-server

Обновление

# Скачает последнюю версию и перезапустит сервис
make addon-hysteria2-server

Для фиксации версии:

hysteria2_server_version: "app/v2.5.1"