TUIC — mihomo
mihomo поддерживает и TUIC v4 (на токенах), и TUIC v5 (UUID+пароль) с обеих сторон. Входящее можно объявить двумя способами: стандартной записью в listeners: или верхнеуровневым блоком tuic-server.
Исходящий
Запись в proxies: с type: tuic. Встраивает BasicOption.
| Поле | Тип | По умолчанию | Допустимые значения | Описание |
|---|---|---|---|---|
name | string | (required) | <string> | Уникальное имя прокси. |
server | string | (required) | <host> | Имя хоста или IP вышестоящего сервера. |
port | int | (required) | <port> | Порт вышестоящего сервера. |
token | string | (unset) | <string> | Устаревший токен TUIC v4. Взаимоисключим с `uuid`+`password` (v5). |
uuid | string | (required for v5) | <UUID> | UUID пользователя (TUIC v5). |
password | string | (required for v5) | <string> | Пароль пользователя (TUIC v5). |
ip | string | (unset) | <host> | Переопределить IP назначения после разрешения имени. Используется, когда SNI / сертификат относятся к имени, не совпадающему с фактическим IP сервера. |
heartbeat-interval | int | 10000 | <milliseconds> | Интервал heartbeat QUIC. **Миллисекунды**, не секунды. |
alpn | []string | [h3] | h3 | Список ALPN. TUIC требует ALPN HTTP/3. |
reduce-rtt | bool | false | true | false | Использовать рукопожатие 0-RTT при переподключении. |
request-timeout | int | 8000 | <milliseconds> | Тайм-аут ответа сервера на кадр connect. В миллисекундах. |
udp-relay-mode | string | native | native | quic | Способ туннелирования UDP-пакетов. `native` (датаграммы) быстрее; `quic` (поток на каждый пакет) проходит через промежуточные узлы, блокирующие датаграммы. |
congestion-controller | string | cubic | cubic | new_reno | bbr | bbr_meta_v1 | bbr_meta_v2 | Контроллер перегрузки QUIC. `bbr` — BBR v2 в mihomo. `bbr_meta_v1`/`bbr_meta_v2` сохраняют старые варианты для взаимной совместимости. |
disable-sni | bool | false | true | false | Полностью убрать расширение SNI из TLS Client Hello. |
max-udp-relay-packet-size | int | 1252 | <bytes> | Максимальный размер UDP-полезной нагрузки до фрагментации. |
fast-open | bool | false | true | false | Отправлять кадр прокси-запроса в одном флайте с QUIC-рукопожатием. |
max-open-streams | int | 100 | <int> | Максимум одновременных потоков на QUIC-соединение. |
cwnd | int | 32 | <int> | Начальное окно перегрузки в пакетах. По умолчанию 32 (`transport/tuic/common/congestion.go:17-19`). |
bbr-profile | string | (unset) | default | aggressive | Профиль настройки BBR при `congestion-controller: bbr`. |
skip-cert-verify | bool | false | true | false | Отключить проверку TLS (только для тестов). |
name-cert-verify | string | (unset) | <hostname> | Проверять сертификат сервера по этому имени хоста вместо SNI. |
fingerprint | string | (unset) | <SHA256 hex> | Зафиксировать отпечаток TLS-сертификата сервера. |
certificate | string | (unset) | <PEM file path> | Клиентский сертификат (mTLS). |
private-key | string | (unset) | <key file path> | Закрытый ключ для `certificate`. |
recv-window-conn | int | 0 | <bytes> | Начальное окно приёма на соединение. 0 оставляет значение quic-go по умолчанию. |
recv-window | int | 0 | <bytes> | Начальное окно приёма на поток. 0 оставляет значение quic-go по умолчанию. |
disable-mtu-discovery | bool | false | true | false | Пропустить обнаружение MTU пути; полезно в сетях, отбрасывающих зонды. |
max-datagram-frame-size | int | 1252 | <bytes> | Максимальный размер кадра QUIC-датаграммы. |
sni | string | (server) | <SNI> | TLS Server Name Indication (SNI). |
ech-opts | ECHOptions | (disabled) | ECHOptions | Конфигурация Encrypted Client Hello. |
udp-over-stream | bool | false | true | false | Использовать кадрирование UDP-over-stream вместо QUIC-датаграмм. |
udp-over-stream-version | int | 1 | 1 | Версия кадрирования. Сейчас определена только 1. |
Исходный код: adapter/outbound/tuic.go:34-70 · зафиксировано на v1.19.29 (e26714a)
Входящий (в listeners)
Запись в listeners: с type: tuic. Встраивает BaseOption.
| Поле | Тип | По умолчанию | Допустимые значения | Описание |
|---|---|---|---|---|
token | []string | [] | [<string>] | Список устаревших токенов TUIC v4. Пустой список отключает v4. |
users | map[string]string | {} | {<uuid>: <password>} | Таблица пользователей TUIC v5. Ключи — UUID, значения — пароли. |
certificate | string | (required) | <PEM file path> | TLS-сертификат сервера. |
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. |
client-auth-cert | string | (unset) | <PEM file path> | Набор CA-сертификатов, принимаемых как корневые для клиентов. |
ech-key | string | (unset) | <ECH config> | Ключевой материал Encrypted Client Hello. |
congestion-controller | string | cubic | cubic | new_reno | bbr | bbr_meta_v1 | bbr_meta_v2 | Контроллер перегрузки QUIC на стороне сервера. |
max-idle-time | int | 0 | <milliseconds> | Тайм-аут простоя QUIC-соединения. 0 оставляет значение QUIC по умолчанию. |
authentication-timeout | int | 1000 | <milliseconds> | Максимальное ожидание кадра аутентификации от клиента, в миллисекундах. |
alpn | []string | [h3] | h3 | Список ALPN, предлагаемый при TLS-рукопожатии. |
max-udp-relay-packet-size | int | 1252 | <bytes> | Максимальный размер UDP-полезной нагрузки, принимаемой от клиентов. |
cwnd | int | 32 | <int> | Начальное окно перегрузки в пакетах. |
bbr-profile | string | (unset) | default | aggressive | Профиль настройки BBR. |
mux-option | MuxOption | (disabled) | MuxOption | Настройки мультиплексирования в стиле sing. |
Исходный код: listener/inbound/tuic.go:12-29 · зафиксировано на v1.19.29 (e26714a)
Входящий (верхнеуровневый tuic-server)
Верхнеуровневый блок tuic-server — альтернатива объявлению входящего TUIC в listeners. Он существует по историческим причинам; для новых конфигураций предпочитайте форму слушателя (она естественно сочетается с остальной моделью входящих).
| Поле | Тип | По умолчанию | Допустимые значения | Описание |
|---|---|---|---|---|
enable | bool | false | true | false | Главный переключатель верхнеуровневого входящего TUIC. При false остальная часть блока игнорируется. |
listen | string | 127.0.0.1:0 | <host:port> | Адрес прослушивания. Тот же синтаксис, что и в остальных местах mihomo. |
token | []string | [] | [<string>] | Список токенов TUIC v4. |
users | map[string]string | {} | {<uuid>: <password>} | Таблица пользователей TUIC v5. |
certificate | string | (required) | <PEM file path> | TLS-сертификат сервера. |
private-key | string | (required) | <key file path> | Закрытый TLS-ключ. |
congestion-controller | string | cubic | cubic | new_reno | bbr | bbr_meta_v1 | bbr_meta_v2 | Контроллер перегрузки QUIC на стороне сервера. |
max-idle-time | int | 0 | <milliseconds> | Тайм-аут простоя QUIC. |
authentication-timeout | int | 1000 | <milliseconds> | Тайм-аут кадра аутентификации клиента. |
alpn | []string | [h3] | h3 | Список ALPN. |
max-udp-relay-packet-size | int | 1252 | <bytes> | Максимальный размер UDP-полезной нагрузки. |
cwnd | int | 32 | <int> | Начальное окно перегрузки. |
Исходный код: config/config.go:329-342 · зафиксировано на v1.19.29 (e26714a)
Примеры
Исходящее — TUIC v5:
proxies:
- name: tuic-v5
type: tuic
server: example.com
port: 443
uuid: a3482e88-686a-4a58-8126-99c9df64b7bf
password: <password>
udp-relay-mode: native
congestion-controller: bbr
sni: example.com
alpn: [h3]
heartbeat-interval: 10000
reduce-rtt: trueИсходящее — TUIC v4 (устаревший):
proxies:
- name: tuic-v4
type: tuic
server: example.com
port: 443
token: <token>
udp-relay-mode: native
sni: example.com
alpn: [h3]Входящее в listeners:
listeners:
- name: tuic-in
type: tuic
listen: 0.0.0.0
port: 443
users:
a3482e88-686a-4a58-8126-99c9df64b7bf: <alice password>
6f4e6c2c-8b1d-4b4f-8e2e-1f2b5c9e0a3b: <bob password>
certificate: /etc/mihomo/server.crt
private-key: /etc/mihomo/server.key
congestion-controller: bbr
alpn: [h3]Верхнеуровневый tuic-server (историческая форма):
tuic-server:
enable: true
listen: 0.0.0.0:443
users:
a3482e88-686a-4a58-8126-99c9df64b7bf: <password>
certificate: /etc/mihomo/server.crt
private-key: /etc/mihomo/server.key
congestion-controller: bbr
alpn: [h3]Примечания
- Исходящий TUIC в mihomo выражает тайм-ауты и интервалы в миллисекундах, а не секундах —
heartbeat-interval: 10000это десять секунд.request-timeoutиauthentication-timeoutвходящего следуют той же конвенции. - Пять контроллеров перегрузки подключаются в
transport/tuic/common/congestion.go:20-53.bbr— современная реализация v2;bbr_meta_v1/bbr_meta_v2существуют исключительно для совместимости со старыми клиентами. cwnd: 0во время выполнения трактуется как32пакета (transport/tuic/common/congestion.go:17-19).- Верхнеуровневый блок
tuic-serverможет объявить только одно входящее TUIC. Для нескольких входящих TUIC на разных портах используйте формуlisteners:.
Сравнение с другими ядрами
- Xray-core не поддерживает TUIC. См. TUIC — Xray-core.
- sing-box поддерживает только TUIC v5 (без формы с токеном), использует имена полей в snake_case (
congestion_control,udp_relay_mode), принимает строки длительности в стиле Go ("3s") для тайм-аутов и предлагает меньший набор контроллеров перегрузки (cubic,new_reno,bbr). См. TUIC — sing-box.
Исходный код: adapter/outbound/tuic.go:34-70 · v1.19.29 (e26714a)
