Hysteria2 на Ubuntu 24.04: пошаговая установка
Классический OpenVPN и даже WireGuard всё чаще режут именно по паттерну трафика, а не по IP: DPI видит характерный TLS-хендшейк или UDP-поток с постоянным размером пакетов и просто душит скорость до нуля. Hysteria2 заходит с другой стороны — маскируется под обычный QUIC-трафик HTTP/3, какой генерируют YouTube, Google и Cloudflare, и добавляет агрессивный алгоритм борьбы с потерями пакетов. Ниже — установка на чистый Ubuntu 24.04, от сертификата до первого успешного подключения клиента.
Содержание
Обсудить статью, задать вопрос или начать новую тему
Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.
Перейти в сообщество →Что такое Hysteria2 и почему он работает против DPI
Hysteria2 — это протокол поверх QUIC (UDP), то есть поверх того же транспорта, что использует HTTP/3. Для системы глубокой инспекции пакетов трафик выглядит как обычный веб-серфинг на 443/UDP, а не как отдельный туннельный протокол со своей сигнатурой. У этого подхода два практических преимущества:
- Маскировка (masquerade). Сервер Hysteria2 умеет по обычному HTTP-запросу на тот же порт отвечать как настоящий сайт-прокси — если зайти на него браузером без нужных учётных данных, он честно отдаст чужую страницу, а не «Connection refused» или явный признак VPN.
- Congestion control Brutal. Вместо стандартного TCP-подобного алгоритма Hysteria2 использует Brutal — он не снижает скорость агрессивно при первых потерях пакетов, что критично на линиях с шейпингом или искусственной деградацией QUIC-трафика у части провайдеров.
Важная оговорка: DPI-технологии развиваются, и нет протокола с гарантией «навсегда неубиваем». Hysteria2 на конец августа 2026 года — один из наиболее устойчивых вариантов именно там, где режут по протоколу, а не по IP-адресу; если провайдер блокирует конкретные подсети дата-центров, поможет только смена сервера, а не смена протокола. Если вы ещё выбираете между протоколами вообще, сначала загляните в гид по выбору протокола VPN по сценариям — Hysteria2 там сравнивается с VLESS Reality, WireGuard и Shadowsocks.
Подготовка сервера: Ubuntu 24.04, домен и порты
Понадобится:
- VPS на Ubuntu 24.04 с белым IP (подойдёт минимальная конфигурация — 1 vCPU, 1 ГБ RAM тянет десятки клиентов);
- root-доступ по SSH;
- по желанию — домен, направленный A-записью на IP сервера (для нормального Let's Encrypt-сертификата и лучшей маскировки под HTTPS-сайт). Без домена тоже можно, но с самоподписанным сертификатом.
Обновите систему и откройте нужный порт. Hysteria2 по умолчанию слушает UDP (в примерах ниже — 443/UDP, но можно взять любой свободный):
apt update && apt -y upgrade
apt -y install curl ufw
ufw allow 22/tcp
ufw allow 443/udp
ufw enable
Если сервер арендован у провайдера с собственным firewall (в панели, а не только ufw на самой машине), не забудьте открыть UDP/443 и там — иначе пакеты срежутся ещё до ufw.
Арендуйте сервер под свои задачи!
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.
Арендовать серверУстановка Hysteria2 официальным скриптом
Проект поддерживает официальный установщик, который сам определяет архитектуру, ставит бинарник в /usr/local/bin/hysteria и создаёт systemd-юнит:
bash <(curl -fsSL https://get.hy2.sh/)
Скрипт спросит, ставить ли системный сервис — соглашайтесь. После установки проверьте версию:
hysteria version
Конфигурация сервера по умолчанию ожидается в /etc/hysteria/config.yaml — файла пока нет, создадим его на следующем шаге. Каталог /etc/hysteria/ уже создан установщиком, там же будут лежать сертификаты.
Сертификат: домен с Let's Encrypt или самоподписанный
Есть два рабочих варианта, выбирайте по ситуации.
Вариант А — есть домен. Hysteria2 умеет получать сертификат Let's Encrypt автоматически, без отдельного certbot или acme.sh — достаточно указать домен и почту прямо в конфиге сервера (см. следующий раздел, блок acme). Требование: домен должен резолвиться на IP сервера, а порт 80/TCP должен быть временно свободен — Hysteria использует HTTP-01 challenge при первом запуске. Если хотите управлять сертификатами отдельно и точнее понимать разницу инструментов, у нас есть отдельный разбор certbot против acme.sh — с Hysteria2 подойдёт любой из них как альтернатива встроенному ACME.
Вариант Б — домена нет. Генерируем самоподписанный сертификат вручную и маскируем его под чужой популярный сайт (SNI-подмена), чтобы при беглом осмотре TLS-отпечаток не выглядел подозрительно:
openssl req -x509 -nodes -newkey ec \
-pkeyopt ec_paramgen_curve:prime256v1 \
-keyout /etc/hysteria/server.key \
-out /etc/hysteria/server.crt \
-subj "/CN=www.bing.com" -days 3650
chown hysteria:hysteria /etc/hysteria/server.key /etc/hysteria/server.crt 2>/dev/null || true
Здесь CN=www.bing.com — просто пример домена-прикрытия, можно взять любой крупный сайт, отвечающий по HTTPS. С самоподписанным сертификатом клиент обязан явно разрешить недоверенный сертификат (insecure: true), это нормально для такой схемы, но не подходит, если вам важна защита от активного MITM на промежуточных узлах — тогда нужен вариант А с реальным доменом.
Конфигурация сервера: config.yaml
Создайте /etc/hysteria/config.yaml. Ниже — рабочий пример с доменом и встроенным ACME:
listen: :443
acme:
domains:
- vpn.example.com
email: admin@example.com
auth:
type: password
password: ЗАМЕНИТЕ_НА_ДЛИННЫЙ_ПАРОЛЬ
obfs:
type: salamander
salamander:
password: ЕЩЁ_ОДИН_ПАРОЛЬ_ДЛЯ_OBFS
masquerade:
type: proxy
proxy:
url: https://www.bing.com
rewriteHost: true
bandwidth:
up: 100 mbps
down: 100 mbps
Для варианта без домена замените блок acme на прямое указание сертификата:
listen: :443
tls:
cert: /etc/hysteria/server.crt
key: /etc/hysteria/server.key
auth:
type: password
password: ЗАМЕНИТЕ_НА_ДЛИННЫЙ_ПАРОЛЬ
obfs:
type: salamander
salamander:
password: ЕЩЁ_ОДИН_ПАРОЛЬ_ДЛЯ_OBFS
Пояснения по ключевым блокам:
auth— простейший вариант через пароль. Для нескольких пользователей с разными лимитами трафика есть режимauth.type: httpс внешним webhook-сервером аутентификации, но для одного-двух устройств пароля достаточно.obfs.salamander— дополнительный слой обфускации поверх QUIC. Не обязателен, но усложняет активное зондирование порта со стороны DPI (когда система сама пробует достучаться до порта и по ответу определяет протокол).masquerade— что сервер отдаёт при обычном HTTP-запросе без валидной аутентификации Hysteria.type: proxyперенаправляет такой запрос на реальный сайт — это и есть та самая маскировка «выглядит как веб-сервер».bandwidth— заявленная пропускная способность канала, участвует в расчёте Brutal congestion control. Указывайте с запасом вниз, а не вверх — заниженное значение ограничит скорость искусственно, завышенное собьёт расчёт борьбы с потерями пакетов.
Проверьте конфиг на синтаксис и запустите сервис:
systemctl enable --now hysteria-server.service
systemctl status hysteria-server.service
journalctl -u hysteria-server.service -f
Если в логе видно server up and running и нет ошибок ACME/сертификата — сервер поднят.
Клиент, автозапуск и проверка подключения
На стороне клиента официальный бинарник ставится тем же скриптом (bash <(curl -fsSL https://get.hy2.sh/) на Linux-машине, либо приложение Hysteria/NekoRay/v2rayN на десктопе, Shadowrocket/Hiddify на iOS, NekoBox на Android — они умеют импортировать протокол Hysteria2 по ссылке или YAML).
Пример клиентского config.yaml для CLI-клиента (вариант с доменом и валидным сертификатом):
server: vpn.example.com:443
auth: ЗАМЕНИТЕ_НА_ДЛИННЫЙ_ПАРОЛЬ
obfs:
type: salamander
salamander:
password: ЕЩЁ_ОДИН_ПАРОЛЬ_ДЛЯ_OBFS
tls:
sni: vpn.example.com
insecure: false
socks5:
listen: 127.0.0.1:1080
http:
listen: 127.0.0.1:8080
Для самоподписанного варианта — sni: www.bing.com (то же значение, что в CN сертификата) и insecure: true.
Запуск и проверка:
hysteria client -c config.yaml
В другом терминале проверьте, что трафик реально идёт через туннель:
curl -x socks5h://127.0.0.1:1080 https://ifconfig.me
IP в ответе должен совпадать с IP вашего сервера, а не с домашним. Дополнительно стоит прогнать проверку на утечку DNS — Hysteria2 сам по себе не гарантирует, что системный резолвер не пойдёт в обход туннеля, если клиентское приложение настроено криво.
Для автозапуска клиента на Linux-машине (не только на сервере) можно оформить его тоже как systemd-юнит по аналогии с серверным, либо использовать штатный автозапуск GUI-клиента на десктопе — там обычно есть чекбокс «запускать при старте системы».
Арендуйте сервер под свои задачи!
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.
Арендовать серверНужны сами нейросети для контента?
Генерируйте изображения, видео и озвучку нейросетями на falapi.io — десятки моделей в одном окне. Оплата картой РФ и по СБП.
Частые вопросы
Hysteria2 работает через TCP или только UDP?
Только UDP (поверх QUIC). Если провайдер режет UDP целиком, а не по сигнатуре, протокол не поможет — тогда нужен TCP-based вариант вроде VLESS Reality или Shadowsocks.
Нужен ли обязательно домен?
Нет, самоподписанный сертификат с insecure: true на клиенте работает штатно. Домен даёт более убедительную маскировку и защиту от активного MITM, но не является обязательным условием запуска.
Чем Hysteria2 отличается от Xray/VLESS Reality?
Reality маскируется под TLS-рукопожатие реального сайта на уровне TCP, Hysteria2 — под QUIC/HTTP3 на UDP и добавляет свой congestion control. Это разные модели обхода DPI, и в спорных сетях иногда стоит держать оба варианта на разных портах — если интересно второе решение, есть отдельная статья про установку Xray и VLESS Reality на VPS.
Можно ли раздать доступ нескольким людям с разными паролями?
Да, через auth.type: userpass с списком пар логин/пароль в конфиге, либо через внешний HTTP-webhook для динамической выдачи и учёта трафика — это отдельная настройка поверх базового конфига из этой статьи.
Как понять, что сервер жив и туннель не отвалился без постоянного ручного контроля?
Поднимите отдельный мониторинг порта и аптайма — подойдёт связка из статьи про мониторинг доступности VPN-сервера через Uptime Kuma, она применима к любому UDP/TCP-сервису, включая Hysteria2.
Почему в конфиге обязательно указывать примерную полосу пропускания?
Brutal-алгоритм Hysteria2 рассчитывает темп отправки пакетов исходя из заявленных bandwidth.up/bandwidth.down, а не подстраивается адаптивно, как классический TCP. Заниженное значение — это искусственный потолок скорости, завышенное — потери пакетов и просадки, которые Brutal не успевает компенсировать.
Обсудить статью, задать вопрос или начать новую тему
Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.
Перейти в сообщество →