Протокол Hysteria 2: обзор, установка, настройка и обход блокировок

Разбираем протокол Hysteria 2: принципы работы, маскировку под HTTP/3, обфускацию Salamander и Gecko, установку сервера и клиента, настройку аутентификации и маскировки, а также отвечаем на частые вопросы.

Что такое Hysteria и почему он быстрый

Hysteria — это прокси-протокол нового поколения, построенный на базе QUIC (RFC 9000) с расширением для ненадёжных дейтаграмм. В отличие от традиционных TCP-прокси, Hysteria использует UDP, что даёт значительный выигрыш в скорости и устойчивости к потерям пакетов. Протокол разработан для обхода блокировок и обеспечивает высокую производительность даже на нестабильных каналах.

Ключевая особенность Hysteria — возможность явно задавать скорость приёма и передачи на стороне клиента. Это позволяет адаптировать соединение под реальные возможности сети и избегать «узких мест», которые возникают при использовании стандартных алгоритмов управления перегрузкой, таких как Cubic или BBR. В результате Hysteria часто показывает лучшую скорость, чем Shadowsocks или XTLS-Reality, особенно на каналах с высоким RTT и потерями.

Как Hysteria маскируется под HTTP/3

Одна из главных «фишек» Hysteria — маскировка под стандартный трафик HTTP/3. Для внешнего наблюдателя (провайдера, DPI-системы) соединение выглядит как обычный запрос к веб-серверу по протоколу HTTP/3 (QUIC). Это достигается за счёт того, что сервер Hysteria реализует полноценный HTTP/3-сервер (RFC 9114) и обрабатывает обычные HTTP-запросы как стандартный веб-сервер.

При подключении реальный клиент Hysteria отправляет специальный POST-запрос на путь /auth с заголовком Hysteria-Auth, содержащим учётные данные. Если аутентификация успешна, сервер отвечает статусом 233 (нестандартный код, который не используется в обычном HTTP). Если же запрос не содержит корректных учётных данных, сервер ведёт себя как обычный веб-сервер: отдаёт контент, перенаправляет на другой сайт или возвращает 404. Это делает протокол устойчивым к активному зондированию.

Обфускация Salamander и Gecko: как это работает

Несмотря на маскировку под HTTP/3, трафик QUIC может быть заблокирован или ограничен провайдером. Для таких случаев Hysteria предлагает два уровня обфускации: Salamander и Gecko.

Salamander — это простой алгоритм, который преобразует каждый QUIC-пакет в случайные байты, не имеющие характерных признаков QUIC. Для этого используется ключ (пароль), который должен быть одинаковым на клиенте и сервере. Каждый пакет получает случайную 8-байтовую соль, на основе которой вычисляется хеш BLAKE2b-256, и полезная нагрузка XOR-ится с этим хешем. В результате трафик становится неотличим от случайного шума, что затрудняет его обнаружение.

Gecko — это более продвинутый уровень, который оборачивает Salamander. Его задача — скрыть характерную форму QUIC-датаграмм рукопожатия (long header). Пакеты с длинным заголовком разбиваются на несколько фрагментов случайного размера (от 2 до 8), каждый из которых дополняется случайным заполнением и отправляется как отдельная датаграмма. Это делает трафик похожим на обычный UDP-трафик, не имеющий структуры QUIC. Gecko рекомендуется использовать в сетях, где DPI активно анализирует первые пакеты соединения.

Установка сервера Hysteria 2 на Linux

Для установки сервера Hysteria 2 потребуется VPS с Debian или Ubuntu и доступом по SSH. Рекомендуется выполнить базовое обновление системы: sudo apt update && sudo apt full-upgrade -y. Затем можно воспользоваться официальным скриптом установки: bash <(curl -fsSL https://get.hy2.sh/). Если скрипт не запускается из-за прав, скачайте его и выполните с sudo: wget https://get.hy2.sh/install_server.sh && chmod 755 install_server.sh && sudo ./install_server.sh.

После установки необходимо создать конфигурационный файл /etc/hysteria/config.yaml. Минимальная конфигурация включает:

listen: :443
acme:
  domains:
    - your.domain.com
  email: your@email.com
auth:
  type: password
  password: your_secret_password
masquerade:
  type: proxy
  proxy:
    url: https://example.com/
    rewriteHost: true

Здесь listen указывает порт (по умолчанию 443), acme — домен и email для автоматического получения SSL-сертификата через Let's Encrypt, auth — пароль для аутентификации клиентов, а masquerade — режим маскировки (в данном случае обратный прокси на сайт example.com). После сохранения конфигурации запустите сервер командой sudo systemctl start hysteria и добавьте в автозагрузку: sudo systemctl enable hysteria.

Настройка клиента Hysteria 2

Клиент Hysteria 2 доступен для Windows, macOS, Linux, Android и iOS. Для настройки необходимо создать конфигурационный файл config.yaml (или использовать URI-ссылку). Пример конфигурации клиента:

server: your.domain.com:443
auth: your_secret_password
tls:
  sni: your.domain.com
  insecure: false
masquerade:
  type: proxy
  proxy:
    url: https://example.com/
    rewriteHost: true

Параметр server указывает адрес сервера и порт, auth — пароль, tls.sni — доменное имя для проверки сертификата. Если используется обфускация, добавьте секцию obfs:

obfs:
  type: salamander
  salamander:
    password: your_obfs_password

Для Gecko:

obfs:
  type: gecko
  gecko:
    password: your_obfs_password

После запуска клиента он создаст локальный SOCKS5-прокси (по умолчанию на порту 1080), через который можно направлять трафик браузера или других приложений.

Аутентификация: от пароля до HTTP-сервиса

Hysteria 2 поддерживает несколько способов аутентификации клиентов. Самый простой — единый пароль (type: password). Для многопользовательского режима используется type: userpass, где задаётся список пользователей и их паролей:

auth:
  type: userpass
  userpass:
    user1: pass1
    user2: pass2

Более гибкий вариант — HTTP-аутентификация (type: http). В этом случае при подключении клиента сервер отправляет POST-запрос на указанный URL с JSON-данными, содержащими адрес клиента, введённый пароль и объём переданных данных. Внешний сервис должен вернуть JSON с полем ok: true и идентификатором пользователя. Это позволяет интегрировать Hysteria с биллинговыми системами или собственными базами пользователей.

Также доступна командная аутентификация (type: command), при которой сервер выполняет указанную команду с аргументами (адрес, пароль, трафик). Команда должна вернуть код 0 и вывести идентификатор пользователя в stdout, если доступ разрешён.

Маскировка: как сделать сервер похожим на обычный сайт

Секция masquerade в конфигурации сервера определяет, как сервер будет отвечать на запросы, не являющиеся Hysteria-трафиком. Это важно для того, чтобы сервер не выглядел подозрительно при активном зондировании.

Доступны три режима:

  • file — сервер отдаёт статические файлы из указанной директории. Подходит, если у вас есть простой сайт.
  • proxy — сервер работает как обратный прокси и подменяет контент с другого сайта (например, https://news.ycombinator.com/). Это самый популярный вариант, так как не требует размещения собственного контента.
  • string — сервер всегда возвращает заданную строку с указанными HTTP-заголовками и кодом статуса.

Рекомендуется выбирать сайт, который находится в той же подсети, что и ваш VPS, чтобы трафик выглядел естественно. Если маскировка не настроена, Hysteria будет возвращать 404 для всех HTTP-запросов, что может привлечь внимание.

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

Некоторые провайдеры блокируют или ограничивают постоянные UDP-соединения на определённых портах. Для обхода этого ограничения Hysteria поддерживает механизм смены портов (port hopping). Клиент может подключаться к серверу через случайный порт из заданного диапазона, периодически меняя его.

В конфигурации клиента можно указать несколько портов через запятую или диапазон:

server: example.com:1234,5678,9012

или

server: example.com:20000-50000

Клиент будет случайным образом выбирать порт для каждого нового соединения и периодически переключаться (интервал задаётся параметром hopInterval в секции transport).

Сервер Hysteria не поддерживает прослушивание нескольких портов напрямую, поэтому для приёма соединений на разных портах необходимо настроить перенаправление через iptables. Например, чтобы перенаправить все UDP-пакеты с портов 20000-50000 на порт 443, выполните:

iptables -t nat -A PREROUTING -i eth0 -p udp --dport 20000:50000 -j DNAT --to-destination :443

Это позволит клиенту подключаться к любому порту из диапазона, а сервер будет принимать соединения на 443.

Сравнение Hysteria 2 с другими протоколами

Hysteria 2 часто сравнивают с Shadowsocks, V2Ray/XRay и XTLS-Reality. Главное преимущество Hysteria — использование QUIC и возможность явного управления скоростью, что даёт прирост производительности на нестабильных каналах. Однако у QUIC есть недостаток: он работает поверх UDP, который некоторые провайдеры блокируют или ограничивают. В таких случаях помогает обфускация Salamander или Gecko, но она может привлечь внимание, если весь UDP-трафик блокируется.

Shadowsocks и XTLS-Reality работают поверх TCP и используют более простые механизмы маскировки. XTLS-Reality, например, имитирует TLS-соединение с реальным сайтом, что делает его очень устойчивым к DPI. Hysteria 2, в свою очередь, маскируется под HTTP/3, что также является сильной стороной, но требует наличия домена и SSL-сертификата.

Выбор протокола зависит от конкретной сети и задач. Hysteria 2 — отличный выбор для обхода блокировок в странах с агрессивным DPI, особенно если важна скорость. Shadowsocks и XTLS-Reality могут быть более надёжными в сетях, где UDP полностью заблокирован.

Частые ошибки и советы по настройке

При настройке Hysteria 2 пользователи часто сталкиваются с типичными ошибками:

  • Неправильные отступы в YAML — Hysteria использует YAML, где отступы имеют значение. Используйте только пробелы, не табуляцию.
  • Неверный домен или email в ACME — если домен не делегирован на сервер или email некорректен, получение сертификата не удастся.
  • Порт 443 уже занят — если на сервере уже работает веб-сервер, используйте другой порт или настройте проксирование.
  • Проблемы с правами доступа к сертификатам — убедитесь, что файлы сертификатов читаемы для пользователя, от которого запускается Hysteria.

Рекомендуется всегда проверять логи сервера (journalctl -u hysteria) и клиента для диагностики. Также полезно использовать hysteria в режиме тестирования скорости, чтобы убедиться в корректности настроек.

Вопросы и ответы

Чем Hysteria 2 отличается от Hysteria 1?

Hysteria 2 — это полностью переработанная версия протокола, которая не совместима с первой. В Hysteria 2 улучшена маскировка под HTTP/3, добавлена поддержка обфускации Salamander и Gecko, а также улучшена производительность и стабильность. Конфигурация и клиенты также отличаются.

Можно ли использовать Hysteria 2 без собственного домена?

Для работы Hysteria 2 с автоматическим получением SSL-сертификата необходим домен. Однако можно использовать уже имеющиеся сертификаты (например, от другого сервиса) и указать их в конфигурации. Также возможно использование IP-адреса, но тогда потребуется самоподписанный сертификат и отключение проверки TLS на клиенте, что снижает безопасность.

Какой порт лучше выбрать для Hysteria 2?

По умолчанию Hysteria 2 использует порт 443, так как он ассоциируется с HTTPS и не вызывает подозрений. Если порт 443 занят, можно выбрать другой порт, например 8443 или 2053. Для обхода блокировок UDP можно использовать диапазон портов с механизмом port hopping.

Что делать, если Hysteria 2 заблокирован провайдером?

Если провайдер блокирует QUIC или UDP, попробуйте включить обфускацию Salamander или Gecko. Если это не помогает, рассмотрите использование другого протокола, например XTLS-Reality, или комбинируйте Hysteria с другими инструментами. Также можно попробовать сменить порт или использовать CDN, если это поддерживается.

Насколько безопасен Hysteria 2?

Hysteria 2 использует шифрование QUIC (TLS 1.3) и поддерживает аутентификацию. Трафик маскируется под HTTP/3, что затрудняет его обнаружение. Однако, как и любой прокси, Hysteria не обеспечивает полную анонимность — он скрывает содержимое трафика, но не факт использования прокси. Для полной анонимности рекомендуется использовать дополнительные инструменты, такие как Tor.

Какие клиенты поддерживают Hysteria 2?

Hysteria 2 имеет официальные клиенты для Windows, macOS, Linux, Android и iOS. Также существуют сторонние приложения, такие как NekoBox, Shadowrocket и другие, которые поддерживают Hysteria 2. Для настройки можно использовать конфигурационные файлы YAML или URI-ссылки.

Можно ли использовать Hysteria 2 для игр или стриминга?

Да, Hysteria 2 поддерживает UDP-проксирование, что делает его пригодным для игр и стриминга. Благодаря низкой задержке и высокой скорости, Hysteria 2 часто показывает лучшие результаты, чем другие протоколы. Однако для игр важно, чтобы сервер находился близко к игровому серверу, иначе задержка может быть высокой.