MAATRIX / Блог / Hysteria2: поднять за 15 минут — быстрый старт

Hysteria2: поднять за 15 минут — быстрый старт

MAATRIX

Если вам не нужно разбираться, чем Brutal congestion control отличается от обычного TCP, а нужен рабочий обход DPI сегодня вечером — эта статья для вас. Один блок команд на сервере, одна ссылка на клиенте, никакого домена и ACME. Дальше по тексту — минимум объяснений, максимум copy-paste.

Обсудить статью, задать вопрос или начать новую тему

Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.

Перейти в сообщество →

Что нужно, чтобы уложиться в 15 минут

  • VPS с белым IP и root-доступом по SSH (Ubuntu 22.04/24.04 или Debian 11/12 — скрипт ниже отработает на обоих).
  • Открытый порт 443/UDP — если у провайдера свой firewall в панели (не только ufw на самой машине), откройте UDP/443 и там, иначе всё остальное бессмысленно.
  • Домен НЕ нужен. Быстрый путь ниже использует самоподписанный сертификат с маской под чужой сайт — это штатный режим Hysteria2, а не костыль. Если домен под рукой есть и хочется сразу нормальный Let's Encrypt через встроенный ACME — этот вариант подробно разобран в пошаговой установке Hysteria2 на Ubuntu 24.04, но тогда 15 минут не обещаю: придётся ждать DNS-резолвинг.

Считаем время грубо: 5 минут на сервер, 5 минут на клиент, 5 минут про запас на то, что пошло не так с первого раза (обычно — забытый порт в панели провайдера).

Один блок — установка, сертификат, конфиг

Заходите на сервер по SSH и выполняете целиком одним блоком. Скрипт ставит зависимости, открывает порт, качает официальный установщик Hysteria2, генерирует случайные пароли, делает самоподписанный сертификат под видом www.bing.com и сразу пишет рабочий config.yaml:

apt update && apt -y upgrade
apt -y install curl ufw openssl

ufw allow 22/tcp
ufw allow 443/udp
ufw --force enable

bash <(curl -fsSL https://get.hy2.sh/)

PASS=$(openssl rand -base64 24 | tr -dc 'A-Za-z0-9' | head -c 24)
OBFS=$(openssl rand -base64 24 | tr -dc 'A-Za-z0-9' | head -c 24)

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

cat > /etc/hysteria/config.yaml <<EOF
listen: :443

tls:
  cert: /etc/hysteria/server.crt
  key: /etc/hysteria/server.key

auth:
  type: password
  password: ${PASS}

obfs:
  type: salamander
  salamander:
    password: ${OBFS}

masquerade:
  type: proxy
  proxy:
    url: https://www.bing.com
    rewriteHost: true

bandwidth:
  up: 100 mbps
  down: 100 mbps
EOF

chown hysteria:hysteria /etc/hysteria/server.key /etc/hysteria/server.crt 2>/dev/null || true

systemctl enable --now hysteria-server.service

echo "===================================="
echo "IP сервера:     $(curl -s ifconfig.me)"
echo "Пароль auth:    ${PASS}"
echo "Пароль obfs:    ${OBFS}"
echo "===================================="

Последние три строчки — самое важное: скопируйте IP и оба пароля прямо из вывода терминала, они понадобятся на клиенте. bandwidth: 100 mbps — грубая оценка «на глаз», не точный бенчмарк вашего канала; если знаете реальную полосу сервера, подставьте своё значение, но сильно завышать не стоит — Brutal-алгоритм считает темп отправки пакетов от этой цифры.

Арендуйте сервер под свои задачи!

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.

Арендовать сервер

Проверка, что сервер поднялся

systemctl status hysteria-server.service
journalctl -u hysteria-server.service -n 20 --no-pager

Ищите в логе строку про успешный запуск сервера без ошибок TLS или биндинга порта. Если сервис в состоянии active (running) и ошибок нет — сервер готов, переходите к клиенту. Если нет — почти всегда причина одна из двух: порт 443/UDP не открыт у хостинг-провайдера в панели (не путать с ufw на самой машине), либо порт уже занят другим процессом. Разбор менее очевидных случаев — в статье Hysteria2: частые ошибки и решения.

Клиент: одна ссылка вместо ручного конфига

Самый быстрый способ подключиться с телефона или ноутбука — не писать YAML руками, а собрать ссылку-приглашение по схеме hy2:// и импортировать её в клиент одним действием (вставить ссылку или отсканировать QR-код, если приложение умеет генерировать его из текста):

hy2://ПАРОЛЬ_AUTH@IP_СЕРВЕРА:443/?insecure=1&obfs=salamander&obfs-password=ПАРОЛЬ_OBFS&sni=www.bing.com#MyHysteria

Подставьте значения из вывода скрипта на предыдущем шаге. insecure=1 обязателен именно для самоподписанного сертификата — без домена и настоящего Let's Encrypt клиент иначе откажется доверять серверу. sni=www.bing.com должен совпадать с CN из сертификата.

Что умеет принимать такую ссылку:

ПлатформаКлиентКак импортировать
AndroidNekoBox for Android«Импорт из буфера обмена»
iOSShadowrocket, Hiddifyвставить ссылку или сканировать QR
Windowsv2rayN, NekoRay«Импорт из буфера обмена»
macOSNekoRay, ClashMeta-совместимыевставить ссылку в подписку/сервер
Linux (CLI)официальный бинарник hysteriaссылку нужно вручную разложить на config.yaml — см. ниже

Для CLI-клиента на Linux ссылка не подходит напрямую, там всё равно нужен файл:

server: IP_СЕРВЕРА:443
auth: ПАРОЛЬ_AUTH

obfs:
  type: salamander
  salamander:
    password: ПАРОЛЬ_OBFS

tls:
  sni: www.bing.com
  insecure: true

socks5:
  listen: 127.0.0.1:1080

Запуск: hysteria client -c config.yaml, дальше curl -x socks5h://127.0.0.1:1080 https://ifconfig.me — в ответе должен быть IP сервера, а не ваш домашний. Если совпадает с домашним — трафик идёт мимо туннеля, проверьте, что клиент реально запущен и слушает 1080-й порт.

Что осознанно пропущено ради скорости

Этот быстрый путь — рабочий production-конфиг для одного-двух устройств, а не игрушечный пример, но кое-что в нём сознательно упрощено:

  • Сертификат самоподписанный. Для личного использования это нормально, но не защищает от активного MITM на промежуточных узлах так же строго, как настоящий домен с Let's Encrypt. Если это важно — путь с доменом и ACME описан в пошаговой установке на Ubuntu 24.04.
  • Один пароль на всех. Если сервер нужен нескольким людям с раздельным учётом трафика, штатный auth.type: password для этого не годится — нужен auth.type: http с внешним webhook или список пар логин/пароль, это уже отдельная настройка поверх сегодняшнего конфига.
  • Нет автоматического мониторинга. Скрипт поднимает сервис и включает автозапуск через systemd, но не следит, жив ли туннель через неделю. Если сервер важен для постоянной работы, а не разово, стоит добавить внешний контроль — например, по схеме из статьи про мониторинг доступности VPN-сервера через Uptime Kuma.
  • Firewall — только ufw. Скрипт открывает 22/tcp и 443/udp и включает ufw, но не трогает более тонкие правила (fail2ban на SSH, ограничение по IP и так далее) — для тестового или личного сервера этого достаточно, для боевого стоит закрутить сильнее отдельно.

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

Арендуйте сервер под свои задачи!

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.

Арендовать сервер

Нужны сами нейросети для контента?

Генерируйте изображения, видео и озвучку нейросетями на falapi.io — десятки моделей в одном окне. Оплата картой РФ и по СБП.

Частые вопросы

Точно хватит 15 минут?

На сам скрипт и подключение клиента — да, если порт открыт с первой попытки и install-скрипт хy2.sh отработал без сети-затыков. Основная задержка обычно не в Hysteria2, а в панели провайдера, где отдельно нужно открыть UDP-порт — это стоит проверить заранее, а не в процессе.

Можно ли потом добавить домен, не переустанавливая всё заново?

Да. Меняете блок tls на acme в config.yaml (см. пример с доменом в полной статье про установку), перезапускаете systemctl restart hysteria-server.service — пароли auth и obfs можно оставить прежние, они не привязаны к сертификату.

Зачем нужен obfs.salamander, если и так есть TLS?

QUIC и без него шифрован, но у него есть узнаваемые метаданные протокола Hysteria на уровне пакетов, по которым активное зондирование DPI иногда отличает его от «чистого» HTTP/3. Salamander дополнительно перемешивает эти метаданные — это не обязательный, но дешёвый по цене слой защиты, скрипт включает его по умолчанию.

Ссылка hy2:// — это официальный формат?

Да, это принятый в экосистеме Hysteria2 формат ссылки-приглашения, его понимают все основные GUI-клиенты (NekoBox, NekoRay, v2rayN, Shadowrocket, Hiddify). Официальный CLI-клиент сам такие ссылки не парсит — для него нужен YAML-файл, пример в разделе про клиент выше.

Что если после systemctl enable --now сервис сразу упал?

Смотрите journalctl -u hysteria-server.service -n 50 --no-pager — почти всегда это или занятый порт 443 (проверьте ss -ulnp | grep 443), или ошибка в самом config.yaml из-за случайно испорченного отступа при копировании. Больше сценариев разобрано в статье Hysteria2: частые ошибки и решения.

Подойдёт ли этот конфиг для постоянной ежедневной работы, а не только на попробовать?

Да, ничего в нём не является временным или демонстрационным — это тот же протокол, обфускация и маскировка, что и в подробной установке, просто без домена и с автоматической генерацией паролей вместо ручного ввода. Единственное, что стоит сделать дополнительно для долгосрочной эксплуатации, перечислено в разделе выше про осознанно пропущенное.

Обсудить статью, задать вопрос или начать новую тему

Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.

Перейти в сообщество →