Skip to content

GOST relay — mihomo

mihomo может подключаться к relay-серверу GOST как к исходящему, используя протокол relay GOST. Соединение может быть открытым или обёрнутым в TLS, при желании — с мультиплексированием потоков, и аутентифицируется парой имя пользователя / пароль.

Исходящий

Запись в proxies: с type: gost-relay. Встраивает BasicOption (общие поля исходящих).

ПолеТипПо умолчаниюДопустимые значенияОписание
namestring(required)<string>Уникальное имя прокси.
serverstring(required)<host>Хост/IP relay-сервера GOST.
portint(required)<port>Порт relay-сервера GOST.
forwardboolfalsetrue | falseРежим forward: отправлять relay-запрос с пустым адресом назначения, чтобы сервер направил соединение на собственный преднастроенный апстрим вместо адреса, запрошенного mihomo.
udpboolfalsetrue | falseВключить ретрансляцию UDP.
tlsboolfalsetrue | falseОбернуть relay-соединение в TLS.
muxboolfalsetrue | falseМультиплексировать несколько потоков в одном соединении (smux).
snistring(server name)<SNI>TLS SNI при включённом `tls`. По умолчанию — значение `server`.
usernamestring(unset)<string>Имя пользователя для аутентификации relay.
passwordstring(unset)<string>Пароль для аутентификации relay.
skip-cert-verifyboolfalsetrue | falseОтключить проверку TLS (только для тестов).
name-cert-verifystring(unset)<hostname>Проверять сертификат сервера по этому имени хоста вместо SNI.
fingerprintstring(unset)<SHA256 hex>Зафиксировать TLS-сертификат сервера по этому отпечатку.
certificatestring(unset)<PEM file path>Клиентский сертификат (mTLS).
private-keystring(unset)<key file path>Закрытый ключ, соответствующий `certificate`.
client-fingerprintstring(global)chrome | firefox | safari | ios | edge | random | randomizedИмитируемый отпечаток client hello uTLS.

Исходный код: adapter/outbound/gost_relay.go:19-37 · зафиксировано на v1.19.29 (e26714a)

Примеры

Исходящее — обычный relay с аутентификацией:

yaml
proxies:
  - name: gost-srv
    type: gost-relay
    server: relay.example.com
    port: 8443
    username: <username>
    password: <password>
    udp: true

Исходящее — relay поверх TLS с мультиплексированием:

yaml
proxies:
  - name: gost-tls
    type: gost-relay
    server: relay.example.com
    port: 443
    tls: true
    sni: relay.example.com
    mux: true
    username: <username>
    password: <password>
    udp: true

Примечания

  • По умолчанию mihomo отправляет запрошенное назначение relay-серверу, и сервер сам подключается туда. При forward: true relay-запрос несёт пустой адрес назначения, и сервер направляет соединение на собственный преднастроенный апстрим вместо адреса, который запросил mihomo, — полезно при сцеплении с relay, у которого уже есть фиксированный следующий переход.
  • mux заворачивает (опционально TLS-)соединение в сессию smux и открывает поток на каждое подключение, мультиплексируя несколько логических соединений в одном нижележащем сокете.
  • tls включает TLS для relay-соединения. sni переопределяет имя сервера в рукопожатии (по умолчанию — server); skip-cert-verify, name-cert-verify, fingerprint, certificate/private-key (mTLS) и client-fingerprint (uTLS) настраивают слой TLS. Без включённого tls они не действуют.
  • udp: true включает ретрансляцию UDP через сервер.

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

  • GOST — отдельный relay-проект со своим протоколом. Ни у Xray-core, ни у sing-box нет встроенного клиента relay GOST, так что это исходящее специфично для mihomo — чтобы достучаться до конечной точки GOST из тех ядер, её пришлось бы прикрыть протоколом, который они оба поддерживают (например, хопом Shadowsocks или SOCKS).

Исходный код: adapter/outbound/gost_relay.go:19-37 · v1.19.29 (e26714a)

Core Tutorial от Argsment