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.
Соединение устанавливается так:
- Клиент открывает соединение QUIC с UDP-портом сервера. TLS-рукопожатие использует имя протокола
h3(HTTP/3), как это сделал бы браузер. - Клиент отправляет HTTP/3-запрос с вашим паролем.
- Если пароль верный, сервер принимает клиента. Если нет, сервер ведет себя как обычный веб-сервер — это его маскировка (masquerade).
- Каждое TCP-соединение с вашего устройства становится потоком QUIC внутри этого единственного соединения.
- 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.