Skip to content

Основы

Эта страница описывает плоские ключи верхнего уровня YAML-документа — порты слушателей, контроль доступа, сетевые флаги и выбор режима маршрутизации. Все они находятся непосредственно в RawConfig и пробрасываются в рантайм в config/config.go.

Параметры

ПолеТипПо умолчаниюДопустимые значенияОписание
portint00 | <port>Порт прослушивания HTTP-прокси. 0 отключает.
socks-portint00 | <port>Порт прослушивания SOCKS5. 0 отключает.
redir-portint00 | <port>Порт входящего Linux REDIRECT (iptables NAT). 0 отключает.
tproxy-portint00 | <port>Порт входящего Linux TPROXY (iptables mangle). 0 отключает.
mixed-portint00 | <port>Совмещённый порт, обслуживающий HTTP и SOCKS5 на одном слушателе. 0 отключает.
inbound-tfoboolfalsetrue | falseВключить TCP Fast Open на входящих слушателях (только Linux).
inbound-mptcpboolfalsetrue | falseВключить Multipath TCP на входящих слушателях (только Linux).
authentication[]string[]<user:pass>Список учётных данных аутентификации HTTP/SOCKS. Пустой список отключает аутентификацию.
skip-auth-prefixes[]netip.Prefix[]<CIDR>Префиксы IP-источников, которые обходят аутентификацию.
lan-allowed-ips[]netip.Prefix[]<CIDR>Когда allow-lan равно true, ограничить доступ этими префиксами IP-источников.
lan-disallowed-ips[]netip.Prefix[]<CIDR>Когда allow-lan равно true, запретить доступ с этих префиксов IP-источников.
allow-lanboolfalsetrue | falseПривязывать слушателей к 0.0.0.0 / :: вместо 127.0.0.1.
bind-addressstring** | <address>Переопределить адрес привязки; * следует выбору allow-lan.
modeT.TunnelModerulerule | global | directПолитика принятия решений туннеля. `rule` использует список правил; `global` направляет всё через GLOBAL; `direct` полностью обходит прокси.
unified-delayboolfalsetrue | falseВычитать время TLS-рукопожатия из задержки URL-теста, чтобы сравнение задержек между прокси было честным.
ipv6boolfalsetrue | falseГлавный переключатель IPv6. При false записи AAAA отфильтровываются, а маршрутизация IPv6 отключена.
interface-namestring(auto)<interface>Привязать все исходящие подключения к этому интерфейсу (например, eth0).
routing-markint0<uint32>Linux SO_MARK, применяемый к исходящим сокетам. 0 отключает.
tcp-concurrentboolfalsetrue | falseУстраивать гонку подключений по A- и AAAA-записям для каждого соединения и использовать то, которое установится первым (в духе Happy Eyeballs).
find-process-modeprocess.FindProcessModestrictstrict | always | offНасколько активно определять процесс-инициатор для маршрутизации (правила `PROCESS-NAME`).
global-client-fingerprintstring(removed)<utls fingerprint>Удалён и игнорируется. Вместо него задавайте `client-fingerprint` непосредственно у каждого прокси.
global-uastringclash.meta/<version><string>User-Agent по умолчанию для загрузки подписок и ресурсов.
etag-supportbooltruetrue | falseУчитывать заголовки ETag при повторной загрузке URL подписок.
keep-alive-idleint0<seconds>Время простоя TCP keepalive. 0 означает значение ОС по умолчанию.
keep-alive-intervalint0<seconds>Интервал зондов TCP keepalive. 0 означает значение ОС по умолчанию.
disable-keep-aliveboolfalsetrue | falseПолностью отключить TCP keepalive.

Исходный код: config/config.go:399-467 · зафиксировано на v1.19.29 (e26714a)

Пример

yaml
mode: rule
mixed-port: 7890
allow-lan: false
bind-address: '*'
ipv6: false
unified-delay: true
tcp-concurrent: true
find-process-mode: strict
global-ua: my-mihomo/1.0
keep-alive-idle: 600
keep-alive-interval: 30

Примечания

  • port / socks-port / mixed-port совместимы между собой — можно открыть все три, но дублирование роли HTTP на port и mixed-port одновременно лишь расходует лишний слушатель.
  • Значение * для bind-address обрабатывается особо: оно означает «следовать текущему решению allow-lan» (0.0.0.0 при true, 127.0.0.1 при false).
  • find-process-mode: always заставляет маршрутизатор выполнять платформозависимый системный вызов поиска процесса для каждого соединения, что дорого на нагруженных системах macOS / Windows. Предпочитайте strict (значение по умолчанию), если правила PROCESS-NAME не критичны.
  • global-client-fingerprint был удалён: теперь он разбирается, но игнорируется. Задавайте client-fingerprint непосредственно в каждой записи прокси.
  • Файл конфигурации может быть зашифрован age. Перед разбором YAML mihomo пытается расшифровать файл с помощью age; если файл зашифрован, он прозрачно расшифровывается при загрузке, и полученный YAML разбирается как обычно. Обычные (незашифрованные) файлы конфигурации загружаются без изменений.

Исходный код: config/config.go:399-467 · v1.19.29 (e26714a)

Core Tutorial от Argsment