Что такое 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 часто показывает лучшие результаты, чем другие протоколы. Однако для игр важно, чтобы сервер находился близко к игровому серверу, иначе задержка может быть высокой.