Skip to content

Слушатель Hysteria2 realm — mihomo

Слушатель Hysteria2 realm размещает несколько «realm» Hysteria2 — арендаторов — за одной конечной точкой. Каждый realm — независимый сервис Hysteria2, мультиплексируемый на один и тот же слушающий адрес и различаемый по идентичности realm, а не по отдельному порту. Клиенты попадают в realm, задавая realm-opts в обычном прокси Hysteria2: они указывают управляющую конечную точку этого слушателя, предъявляют общий токен и называют realm, к которому хотят присоединиться.

Это серверная сторона функциональности realm. Поддержка realm — новая и продвинутая возможность; большинство развёртываний вместо этого используют обычный слушатель hysteria2.

Слушатель

Запись в listeners: с type: hysteria2-realm. Встраивает BaseOption (listen, port).

ПолеТипПо умолчаниюДопустимые значенияОписание
tokenstring(unset)<string>Общий токен аутентификации, который realm должны предъявить, чтобы зарегистрироваться на этом слушателе или обслуживаться им.
max-realmsint0<int>Максимальное число realm, размещаемых этим слушателем. 0 оставляет без ограничения.
max-realms-per-ipint0<int>Ограничение числа размещаемых realm на один клиентский IP. 0 оставляет без ограничения.
trusted-proxy-headerstring(unset)<header name>HTTP-заголовок с реальным IP клиента, когда слушатель стоит за фронтирующим прокси.
realm-name-patternstring(unset)<pattern>Шаблон, ограничивающий допустимые имена realm.
certificatestring(required)<PEM file path>TLS-сертификат сервера (путь к PEM).
private-keystring(required)<key file path>Закрытый TLS-ключ.
client-auth-typestring(none)no-client-cert | request-client-cert | require-any-client-cert | verify-client-cert-if-given | require-and-verify-client-certРежим клиентской аутентификации mTLS (например, `require-and-verify-client-cert`).
client-auth-certstring(unset)<PEM file path>Набор CA-сертификатов, принимаемых как корневые для клиентов.
ech-keystring(unset)<ECH config>Ключевой материал Encrypted Client Hello.
alpn[]string[h3]h3ALPN, предлагаемый при TLS-рукопожатии (обычно `h3`).

Исходный код: listener/inbound/hysteria2_realm.go:12-25 · зафиксировано на v1.19.29 (e26714a)

Пример

Минимальный realm-слушатель с общим токеном и ограничением числа realm на IP:

yaml
listeners:
  - name: hy2-realm-server
    type: hysteria2-realm
    listen: 0.0.0.0
    port: 443
    token: <realm-token>
    max-realms: 16
    max-realms-per-ip: 2
    certificate: /etc/mihomo/server.crt
    private-key: /etc/mihomo/server.key
    alpn: [h3]

Клиент присоединяется к realm на этом слушателе, добавляя realm-opts в своё исходящее подключение — см. Hysteria2 — mihomo.

Примечания

  • token — общий секрет. realm-opts.token клиента должен с ним совпадать, чтобы клиент мог зарегистрироваться на слушателе или обслуживаться им.
  • max-realms ограничивает общее число realm, размещаемых слушателем; max-realms-per-ip — их число на один клиентский IP. Оставьте оба значения по умолчанию, чтобы не вводить ограничений.
  • trusted-proxy-header имеет значение, только когда слушатель стоит за фронтирующим прокси, переписывающим адрес источника: поле называет заголовок, несущий исходный IP клиента, чтобы ограничения на IP оставались точными.
  • TLS обязателен: укажите certificate и private-key. Добавьте client-auth-type и client-auth-cert, чтобы требовать взаимный TLS, и ech-key, чтобы включить Encrypted Client Hello.

Сравнение с другими ядрами

  • Realm — возможность mihomo / Hysteria2. Ни Xray-core, ни sing-box не предоставляют эквивалентного мульти-realm-слушателя — каждый размещает по одному сервису Hysteria2 на входящее. Об их одноарендных слушателях см. Hysteria2 — Xray-core и Hysteria2 — sing-box.

Исходный код: listener/inbound/hysteria2_realm.go:12-25 · v1.19.29 (e26714a)

Core Tutorial от Argsment