mistgate Документация

Hysteria2

Все настройки Hysteria2 в редакторе профиля, как нода обращается с трафиком и что получают и что требуют приложения.

На этой странице

Hysteria2 — протокол поверх UDP на основе QUIC. В Mistgate это протокол приложений по ссылке: человек добавляет одну ссылку и получает все серверы Hysteria2 своей группы. У каждого человека свой секретный токен; нода знает только его хеш. На этой странице — настройки профиля Hysteria2 и что они делают; как профиль создаётся и ставится на ноды, описано в разделе Профили.

Настройки#

Редактор раскладывает настройки по группам Основное, Обфускация и Продвинутое. Критичные настройки ломают уже выданные людям серверы, пока их приложение не обновит подписку; перед их сохранением редактор переспрашивает (см. Профили).

Настройка По умолчанию Критичная Что делает
Порт 443 да UDP-порт, на котором слушает нода. Нода может взять для себя другой.
Прыжки по портам выключено (0 и 0) да Диапазон UDP, который нода перенаправляет на порт. См. ниже.
Домен (SNI) пусто да Имя сервера в сертификате — его видит приложение. Пусто — адрес ноды.
Сертификат Let's Encrypt да Let's Encrypt или Самоподписанный (с пином). См. Профили.
Обфускация Salamander да Нет, Salamander или Gecko (эксперимент.).
Пароль обфускации сгенерирован да 8–128 символов, одинаковый у ноды и в приложении.
Маскировка Встроенный сайт нет Что нода отвечает всем, кто не клиент Hysteria2: Встроенный сайт или Ничего (404).
Не доверять заявленной скорости клиента (всегда BBR) включено нет См. «Скорость и честность».
Профиль BBR Обычный нет Обычный, Осторожный или Агрессивный.
Потолок отдачи 0 (без ограничения) нет Мбит/с, до 100000: с какой скоростью один клиент может отправлять на ноду.
Потолок загрузки 0 (без ограничения) нет Мбит/с, до 100000: с какой скоростью нода может отправлять одному клиенту.
Пропускать UDP включено нет Выключено — клиенты смогут туннелировать только TCP.
Выход Напрямую нет Напрямую или WARP. См. WARP.

Новый профиль всегда начинается со сгенерированного пароля Salamander и с выключенным доверием к заявленной скорости клиента.

Обфускация#

Salamander оборачивает каждый пакет так, что рукопожатие QUIC перестаёт быть похожим на QUIC; пароль общий у ноды и приложения. Gecko — другая обфускация того же ядра Hysteria2, она помечена как экспериментальная. С Нет трафик — обычный QUIC.

Смена типа или пароля ломает сервер у всех, пока их приложение не обновит подписку. Сгенерировать создаёт новый пароль.

Маскировка#

Всякий, кто подключается не как клиент Hysteria2, видит сайт. С Встроенный сайт нода показывает нейтральный встроенный сайт по HTTP/3 на UDP-порту и по HTTPS на TCP 443 рядом с ним и, как настоящий сайт, сообщает, что на UDP-порту есть HTTP/3. С Ничего (404) на любой такой запрос приходит обычный 404.

На TCP 443 нода ещё и отвечает Let's Encrypt, поэтому на нодах с профилями Let's Encrypt этот порт должен быть свободен.

Скорость и честность#

Клиент Hysteria2 может заявить свою скорость и попросить сервер слать с ней (Brutal). Тогда один клиент, заявивший огромную скорость, способен занять весь канал ноды. Если включено Не доверять заявленной скорости клиента (всегда BBR), нода не учитывает заявленную скорость и использует управление перегрузкой BBR, которое делит канал поровну. Профиль BBR настраивает, насколько быстро BBR разгоняется.

Потолок отдачи и Потолок загрузки ограничивают каждого клиента профиля. Ограничение на одного человека задаётся у пользователя: Лимит скорости в карточке пользователя (экспериментально; действует на Hysteria2). См. Пользователи и группы.

Прыжки по портам#

Если задан диапазон, нода перенаправляет каждый UDP-пакет, пришедший на любой порт из диапазона, на порт профиля. Клиент может менять порты посреди соединения, и фильтр, который закрыл один порт, его не остановит. Нода делает это перенаправлением в файрволе.

Правила:

  • диапазон начинается с 1024 или выше и содержит не больше 20000 портов;
  • порт профиля должен быть вне диапазона;
  • диапазон не должен пересекаться с портом или диапазоном другого профиля на ноде — панель откажет до нажатия кнопки;
  • нода тоже откажется от диапазона, который задел бы её SSH-порт или порт другого профиля. Сам профиль будет слушать свой порт, но диапазон не установится: у профиля будет ошибка «port hop rejected: …», а в событиях ноды — «профиль не принял прыжки по портам».
Важно

диапазон передаёт только формат Mihomo: приложения на ядре mihomo получают порты и интервал прыжка 30 секунд. Список ссылок (Happ и другие приложения, которые читают ссылки) передаёт один порт. У двойника профиля с WARP прыжков нет.

Домен (SNI) и сертификаты#

Домен, сертификат и то, как они связаны с адресом ноды, описаны в разделе Профили. Коротко: Let's Encrypt нужен домен, у которого A-запись указывает на ноду, и открытые порты 80 и 443; самоподписанный сертификат работает и по IP, приложение сверяет его отпечаток.

Как нода обращается с трафиком#

  • Сниффинг. Нода читает имя назначения в первых байтах соединения (HTTP Host или имя сервера в TLS) и использует его вместо IP, который прислало приложение. DNS-ответу на стороне приложения нода не доверяет, поэтому подменённый или заблокированный DNS у человека не мешает.
  • DNS ноды. Эти имена нода разрешает сама, резолверами из настройки DNS для трафика пользователей у ноды; пусто — резолвер самого сервера. Предпочитается IPv4; IPv6 — для имени без A-записи. Выход через WARP разрешает имена так же. См. Ноды и DNS.
  • Закрытые адреса. Через туннель нельзя попасть в частные сети, на loopback, link-local, адреса метаданных облака и на любой адрес самой ноды.
  • Пользователи. Добавление, удаление или отключение человека меняет только список токенов на ноде: больше никто не отключается. Удалённый человек или человек с закончившимся сроком отрезается на следующем же пакете.

Что получают приложения#

Hysteria2 передают два формата; какой достанется приложению, решают правила на странице Подписки.

Список ссылок. По ссылке на каждый сервер; его читают Happ и большинство других приложений:

ini
hysteria2://<токен>@de1.example.com:443/?obfs=salamander&obfs-password=<пароль>&sni=de1.example.com#<название сервера>
  • obfs и obfs-password есть, когда включена обфускация;
  • sni есть, когда имя сервера — домен;
  • при самоподписанном сертификате в ссылке есть insecure=1 вместе с pinSHA256=<64 шестнадцатеричные цифры>: приложение примет только сертификат с этим отпечатком;
  • #<название сервера> — название по шаблону, в URL-кодировке.

Mihomo YAML. Приложения на ядре mihomo (Clash Verge, FlClash и другие) получают по прокси на каждый сервер:

yaml
- name: "🇩🇪 Германия"
  type: hysteria2
  server: "de1.example.com"
  port: 443
  ports: "20000-30000"
  hop-interval: "30"
  password: "<токен>"
  obfs: salamander
  obfs-password: "<пароль>"
  sni: "de1.example.com"
  skip-cert-verify: false
  alpn: [h3]

ports и hop-interval есть только при прыжках по портам. При самоподписанном сертификате вместо проверки домена в прокси указан fingerprint с пином.

Что нужно приложениям#

  • Приложение, которое читает ссылки Hysteria2 (Happ и похожие), или приложение на ядре mihomo (Clash Verge, FlClash).
  • UDP до порта (и до диапазона прыжков, если он есть) должен доходить до ноды. Если хостер его режет, проверки глазами клиента падают по таймауту, а нода получает статус Трафик не идёт; смените порт. См. Здоровье.
  • Для профиля с самоподписанным сертификатом нода должна один раз его запустить: пин сообщает нода. До этого в ссылке нет пина, приложения отвергают сертификат, а формат Mihomo этот сервер пропускает.
Важно

панель пишет, что самоподписанный сертификат проверен с официальным клиентом Hysteria2 и с Mihomo, а в Happ — ещё нет. Сначала проверьте на своём телефоне.

Править страницу на GitHub