👻 Прокси группа Smart
Тип прокси группы Smart использует адаптивный выбор узлов на основе весов. Вместо простого round-robin или ручной сортировки она непрерывно отслеживает реальную производительность каждого узла — задержку, процент успешных подключений, объём трафика — и автоматически направляет соединения к наилучшему доступному узлу.
Что нового в v1.19.33
Заголовок раздела «Что нового в v1.19.33»Тип группы smart взят из vernesong/mihomo. Группа сама выбирает узел по весам, которые считаются из реальной работы узлов: задержки, доли успешных подключений и трафика. Можно включить предсказание весов моделью LightGBM.
С v1.19.33 группа также узнаёт, куда ведёт каждый узел и какие сайты ему отказывают:
- Выход узла. Группа определяет страну и сеть (ASN), из которой выходит трафик узла. Для этого она отправляет через узел запрос к
cloudflare.com/cdn-cgi/trace,api.ip.sbилиipwho.is: если один не отвечает, используется следующий. - Ответы сайтов. Если сайт отказывает узлу (блокировка по региону, страница ошибки,
403, соединение без ответа), группа запоминает это и ведёт этот сайт через другие узлы. - Без поспешных выводов. Регион или сеть отмечаются как недоступные, только если отказали несколько независимых узлов из них. Один отказ ничего не решает, а когда узел снова отвечает, запись снимается.
Конфигурация
Заголовок раздела «Конфигурация»# Опционально: глобальные настройки LightGBM (на верхнем уровне конфига)lgbm-auto-update: truelgbm-update-interval: 72lgbm-url: "https://github.com/vernesong/mihomo/releases/download/LightGBM-Model/Model.bin"
proxy-groups: - name: Smart Group type: smart proxies: - Proxy A - Proxy B - Proxy C policy-priority: "Premium:0.9;SG:1.3" uselightgbm: false collectdata: false sample-rate: 1 prefer-asn: true tolerance: 50Параметры
Заголовок раздела «Параметры»Параметры группы
Заголовок раздела «Параметры группы»| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
type | string | — | Должно быть smart |
policy-priority | string | "" | Множители приоритета по имени узла, см. policy-priority |
uselightgbm | bool | false | Включить предсказание весов через ML-модель LightGBM |
collectdata | bool | false | Собирать обучающие данные в CSV для кастомной модели |
sample-rate | float | 1 | Доля соединений, которые записывает collectdata, в пределах (0, 1]. Значения вне диапазона (в том числе 0) означают 1, то есть 100% |
prefer-asn | bool | false | Приоритизировать поиск по ASN при выборе узла |
tolerance | int | 0 | Разница задержки в мс, в пределах которой узлы считаются равными, когда группа выбирает узлы по задержке; см. tolerance |
Глобальные параметры LightGBM (верхний уровень)
Заголовок раздела «Глобальные параметры LightGBM (верхний уровень)»Эти ключи лежат на верхнем уровне конфига; они также описаны на странице Общие настройки.
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
lgbm-auto-update | bool | false | Автоматически обновлять модель LightGBM |
lgbm-update-interval | int | 72 | Интервал обновления модели в часах |
lgbm-url | string | релиз vernesong LightGBM-Model/Model.bin | URL для загрузки файла Model.bin |
Параметр профиля
Заголовок раздела «Параметр профиля»См. также smart-collector-size на странице общих настроек.
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
profile.smart-collector-size | float | 100 | Наибольший размер smart_weight_data.csv в МБ. Это ключ блока profile верхнего уровня, а не группы: в группе он игнорируется |
policy-priority
Заголовок раздела «policy-priority»Корректирует вес узлов, чьи имена соответствуют regex-шаблону. Значения меньше 1 снижают приоритет, больше 1 — повышают.
policy-priority: "Premium:0.9;SG:1.3"В этом примере узлы, соответствующие Premium, получают множитель 0.9 (ниже приоритет), а узлы SG — множитель 1.3 (выше приоритет). Несколько правил разделяются символом ;. Шаблон сначала пробуется как regex; шаблон, который не компилируется как regex, ищется как подстрока. Срабатывает первое совпавшее правило. Двоеточие внутри шаблона экранируется как \: (шаблон от множителя отделяет последнее неэкранированное двоеточие).
tolerance
Заголовок раздела «tolerance»Допуск по задержке в миллисекундах, от 0 до 65535. Если не задан или 0, допуска нет.
Обычно группа выбирает узлы по весам, которые она накопила для сайта. Если таких узлов мало, например для сайта, который группа ещё не видела, она добирает остальные узлы по задержке из проверки (url / interval группы). tolerance влияет только на этот порядок:
- узлы, задержка которых отличается не больше чем на
tolerance, считаются равными и остаются в порядке спискаproxies; - без допуска узлы сортируются строго по задержке, и два узла с 41 и 43 мс могут меняться местами после каждой проверки.
Сначала учитывается policy-priority: узел с более высоким приоритетом остаётся впереди независимо от tolerance. Узлы, которые группа подозревает в блокировке для этого сайта, всегда идут последними.
# строго по задержке (по умолчанию)tolerance: 0
# узлы с разницей до 50 мс равны, порядок решает список proxiestolerance: 50
# запас побольше: первые узлы списка остаются впереди, пока они не намного медленнееtolerance: 150Принцип работы
Заголовок раздела «Принцип работы»Расчёт весов
Заголовок раздела «Расчёт весов»Группа непрерывно оценивает каждый узел по пяти факторам:
- Процент успешных подключений — соотношение успехов и неудач; недавние ошибки имеют больший вес.
- Производительность подключений — время установки соединения и RTT.
- Статистика использования — объём загрузки/выгрузки и продолжительность сессий.
- Затухание по времени — веса снижаются для узлов, которые давно не использовались.
- Тип соединения — отдельные счётчики для UDP и TCP.
Все метрики нормализуются в базовый вес, затем корректируются правилами policy-priority и ASN-специфичными таблицами. Обновление весов происходит через взвешенное усреднение.
Выбор узла
Заголовок раздела «Выбор узла»Выбор происходит в следующем порядке приоритетов:
- История по доменам — если домен назначения уже встречался, предпочитается узел с наилучшей историей для этого домена.
- История по ASN — если истории по домену нет, используется прошлая производительность для автономной системы (AS) назначения.
- Предвычисленный кеш — горячие домены заранее оцениваются в памяти (LRU) и на диске для быстрого доступа.
- Round-robin запасной — используется при недостатке исторических данных; случайное исследование предотвращает локальные оптимумы.
Исторические данные хранятся 7 дней. Устаревшие записи удаляются автоматически.
Обработка сбоев
Заголовок раздела «Обработка сбоев»При превышении порога отказов вес узла штрафуется. Узел, который группа подозревает в блокировке для сайта, откладывается для этого сайта на время — 5 минут при временном сбое, 10 минут по умолчанию, до 30 минут при региональной блокировке, — а затем проверяется снова. Так временный сбой не выключает узел навсегда.
Машинное обучение (LightGBM)
Заголовок раздела «Машинное обучение (LightGBM)»При uselightgbm: true группа использует предобученную модель LightGBM для предсказания весов узлов вместо правилового алгоритма.
Расположение файла модели:
Model.binв рабочей папке ядра (папка-d; имя сравнивается без учёта регистра)
Сбор обучающих данных
Заголовок раздела «Сбор обучающих данных»Включите collectdata: true, чтобы записывать метрики подключений в smart_weight_data.csv в рабочей папке ядра.
Используйте sample-rate для снижения нагрузки — например, sample-rate: 0.1 записывает 10% подключений.
Собранный CSV можно использовать для обучения кастомной модели с помощью LightGBM 3.3.5.