Слушатель 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).
| Поле | Тип | По умолчанию | Допустимые значения | Описание |
|---|---|---|---|---|
token | string | (unset) | <string> | Общий токен аутентификации, который realm должны предъявить, чтобы зарегистрироваться на этом слушателе или обслуживаться им. |
max-realms | int | 0 | <int> | Максимальное число realm, размещаемых этим слушателем. 0 оставляет без ограничения. |
max-realms-per-ip | int | 0 | <int> | Ограничение числа размещаемых realm на один клиентский IP. 0 оставляет без ограничения. |
trusted-proxy-header | string | (unset) | <header name> | HTTP-заголовок с реальным IP клиента, когда слушатель стоит за фронтирующим прокси. |
realm-name-pattern | string | (unset) | <pattern> | Шаблон, ограничивающий допустимые имена realm. |
certificate | string | (required) | <PEM file path> | TLS-сертификат сервера (путь к PEM). |
private-key | string | (required) | <key file path> | Закрытый TLS-ключ. |
client-auth-type | string | (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-cert | string | (unset) | <PEM file path> | Набор CA-сертификатов, принимаемых как корневые для клиентов. |
ech-key | string | (unset) | <ECH config> | Ключевой материал Encrypted Client Hello. |
alpn | []string | [h3] | h3 | ALPN, предлагаемый при TLS-рукопожатии (обычно `h3`). |
Исходный код: listener/inbound/hysteria2_realm.go:12-25 · зафиксировано на v1.19.29 (e26714a)
Пример
Минимальный realm-слушатель с общим токеном и ограничением числа realm на IP:
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)
