Hysteria 2 — прокси-протокол, который работает поверх QUIC, транспорта на основе UDP, лежащего в основе HTTP/3. Он рассчитан на скорость в сетях с потерями пакетов: вместо того чтобы замедляться при каждой потере, он может отправлять данные с заданной вами скоростью. Для того, кто не знает пароля, сервер Hysteria 2 может выглядеть как обычный сайт на HTTP/3.

В этой статье разберем, как он работает, что делают его настройки и где у него слабые места.

Немного истории

Исходный Hysteria — проект с открытым кодом от разработчиков Apernet, созданный для быстрой работы прокси на плохих и дальних каналах. Hysteria 2, выпущенный в 2023 году, — не обновление, а переработка: он проходит аутентификацию по HTTP/3, поэтому сервер может выдавать себя за веб-сервер, и он несовместим с исходным протоколом.

Помимо официальных сервера и клиента, Hysteria 2 поддерживают sing-box, Mihomo и Xray.

Как работает Hysteria 2

Большинство прокси-протоколов, например Trojan и VLESS, работают поверх TCP. Hysteria 2 работает поверх QUIC, который, в свою очередь, работает поверх UDP и содержит встроенный TLS 1.3.

Соединение устанавливается так:

  1. Клиент открывает соединение QUIC с UDP-портом сервера. TLS-рукопожатие использует имя протокола h3 (HTTP/3), как это сделал бы браузер.
  2. Клиент отправляет HTTP/3-запрос с вашим паролем.
  3. Если пароль верный, сервер принимает клиента. Если нет, сервер ведет себя как обычный веб-сервер — это его маскировка (masquerade).
  4. Каждое TCP-соединение с вашего устройства становится потоком QUIC внутри этого единственного соединения.
  5. UDP-пакеты передаются как датаграммы QUIC в том же соединении.

Поскольку множество соединений делят одно соединение QUIC, новое соединение не требует нового рукопожатия.

Brutal: отправка с заданной скоростью

TCP и большинство реализаций QUIC считают потерю пакета признаком перегрузки и замедляются. На длинном зашумленном канале из-за этого скорость может оставаться намного ниже того, что способна пропустить линия.

Алгоритм управления перегрузкой Brutal в Hysteria работает иначе. Клиент сообщает серверу, с какой скоростью может принимать данные, и сервер отправляет их с этой скоростью даже при потерях пакетов, досылая недостающее. Именно поэтому Hysteria 2 может держать скорость там, где протоколы на основе TCP проседают.

Подвох в том, что скорость должна быть близка к вашей реальной пропускной способности. Если задать слишком высокую, потери растут быстрее, чем выигрыш, и соединение становится медленнее. Кроме того, Brutal не уступает другому трафику в вашей сети. Если пропускная способность не задана, Hysteria 2 переходит на BBR — стандартный алгоритм управления перегрузкой, который сам подстраивает скорость.

Salamander: обфускация

Обычный трафик Hysteria 2 — это QUIC, а QUIC легко распознать. Salamander перемешивает каждый пакет с помощью общего пароля, чтобы соединение больше не было похоже на QUIC. Некоторые серверы предлагают Gecko, который вдобавок разбивает и дополняет первые пакеты, чтобы их размеры ничего не выдавали.

Есть компромисс: с включенной обфускацией сервер уже не говорит на чистом QUIC, поэтому не может одновременно выдавать себя за обычный сайт на HTTP/3. Приходится выбирать одну из двух маскировок.

Смена портов

Некоторые сети через какое-то время замедляют или блокируют отдельный UDP-порт. При смене портов (port hopping) сервер слушает диапазон UDP-портов, например 20000-30000, а клиент время от времени переходит на другой порт — по умолчанию каждые 30 секунд.

Маскировка

Сервер, который не узнал клиента, может отдать сайт, проксировать чужой сайт или вернуть простую страницу. Тогда зондирование выглядит как посещение обычного сайта. Маскировка — настройка сервера, на устройстве ничего менять не нужно.

Сертификаты и закрепление

Hysteria 2 всегда использует TLS, поэтому серверу нужен сертификат. Многие серверы используют самоподписанный сертификат вместо домена с публичным сертификатом. Тогда у клиента два варианта:

  • Закрепить сертификат (pinSHA256): доверять ровно этому сертификату и никакому другому. Это безопасный вариант.
  • Не проверять сертификат (insecure=1): доверять любому сертификату. Тогда любой, кто находится между вами и сервером, сможет читать ваш трафик. Избегайте этого.

Сильные и слабые стороны

Сильные стороны:

  • Держит скорость на каналах с потерями благодаря Brutal и QUIC.
  • Быстрое подключение. Множество соединений делят одно соединение QUIC.
  • Нативно передает UDP в датаграммах QUIC.
  • Гибкая маскировка. Сайт-маскировка, обфускация Salamander или Gecko и смена портов.
  • Работает с самоподписанными сертификатами — безопасно, через закрепление.

Слабые стороны:

  • Зависит от UDP. Некоторые сети, например офисный Wi-Fi или некоторые мобильные операторы, блокируют или замедляют UDP. Тогда Hysteria 2 работает медленно или не подключается вовсе.
  • Brutal нужна правильная цифра. Неверная пропускная способность только ухудшает ситуацию, а к другому трафику Brutal не справедлив.
  • Без CDN. Подключаться к серверу приходится напрямую.
  • Сложнее обнаружить — не значит невозможно. QUIC на необычных портах или трафик, не похожий ни на один известный протокол, все равно может выделяться.

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

Hysteria 2 VLESS + REALITY Trojan Shadowsocks
Работает поверх UDP (QUIC) TCP TCP TCP и UDP
Шифрование TLS 1.3 внутри QUIC REALITY (TLS 1.3) TLS Собственный шифр
Хорош на каналах с потерями Да Средне Средне Средне
Работает, где UDP заблокирован Нет Да Да Только TCP
Нужен сертификат Да, подойдет самоподписанный Нет Да Нет
Ответ на зондирование Сайт-маскировка, если настроен Заимствованный сайт Резервный сайт, если настроен Обрывает соединение

Все протоколы рядом — в статье Сравнение прокси-протоколов. Если вы еще не знакомы с Shadowsocks, прочитайте Что такое Shadowsocks?

Как выглядит ссылка Hysteria 2

Серверами обычно делятся в виде ссылок hysteria2:// или hy2:// — это та же ссылка с более коротким названием:

hysteria2://secret@hy2.example.com:443/?sni=hy2.example.com#Basic
  • secret — пароль.
  • hy2.example.com:443 — сервер и UDP-порт.
  • sni — имя сервера TLS.
  • #Basic — название сервера в приложении.

Дополнительные настройки добавляются параметрами. Обфускация Salamander с паролем hidden:

hysteria2://secret@hy2.example.com:443/?obfs=salamander&obfs-password=hidden#Salamander

Смена портов в диапазоне от 20000 до 30000, указанном в порте:

hysteria2://secret@hy2.example.com:443,20000-30000/?sni=hy2.example.com#Hopping

Самоподписанный сертификат, закрепленный по SHA-256:

hysteria2://secret@203.0.113.7:443/?sni=hy2.example.com&pinSHA256=abababababababababababababababababababababababababababababababab#Pinned

Все параметры перечислены в справке по Hysteria 2.

Hysteria 2 на iPhone

Potatso — бесплатный прокси-клиент для iPhone и iPad с поддержкой Hysteria 2: обфускация Salamander и Gecko, смена портов, входящая пропускная способность и закрепление сертификата. Он проверен на официальном сервере, sing-box, Mihomo и Xray. Инструкция Как пользоваться Hysteria 2 на iPhone поможет импортировать ссылку и подключиться.

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

Для чего нужен Hysteria 2?
Hysteria 2 — прокси-протокол, который дает хорошую скорость в сетях с потерями пакетов, например на длинных международных маршрутах или в перегруженных мобильных сетях. Он работает поверх QUIC — протокола на основе UDP, на котором построен HTTP/3, — и передает и TCP-, и UDP-трафик.
Hysteria 2 быстрее VLESS или Trojan?
Может быть быстрее на каналах с потерями или на больших расстояниях, потому что продолжает отправлять данные с заданной скоростью, даже когда пакеты теряются. В чистой сети разница часто невелика, а в сетях, которые замедляют или блокируют UDP, он может работать медленнее или не работать вовсе.
Что такое Salamander в Hysteria 2?
Salamander — необязательная обфускация Hysteria 2. Она перемешивает каждый пакет с помощью общего пароля, чтобы соединение больше не было похоже на QUIC. Клиент и сервер должны использовать один и тот же пароль обфускации.
Нужны ли Hysteria 2 домен и сертификат?
Нужен TLS-сертификат, но он может быть самоподписанным. С самоподписанным сертификатом закрепите его на клиенте по SHA-256, а не отключайте проверку сертификата.
Hysteria 2 и Hysteria — одно и то же?
Нет. Hysteria 2 — переработанная версия исходного протокола Hysteria, несовместимая с ним. Клиенту Hysteria 2 нужен сервер Hysteria 2.

Другие языки: English · 简体中文 · 繁體中文 · 日本語