Sing-box подписки

Sing-box подписки

Уровень: Расширенный Где в UI: Главная → Sing-box подписки
Подписка sing-box — это группа серверов, которыми awg-manager управляет как одной сущностью. Под ней живёт один Proxy-интерфейс NDMS и один selector / urltest outbound в sing-box, а список серверов внутри (members) обновляется из источника подписки. С точки зрения роутера это один туннель — внутри которого пользователь или сам sing-box выбирает, через какой именно сервер пойдёт трафик.

Что такое подписка

Подписка получает список серверов одним из двух способов: по внешнему URL провайдера или из вставленного вручную текста (“инлайн”). Тело подписки awg-manager разбирает каскадом — сначала пробует декодировать как base64, потом вытаскивает share-link’и из HTML, и в крайнем случае читает построчно. Поддерживаются те же протоколы, что у обычных Sing-box туннелей; vmess:// распознаётся, но осознанно пропускается. С 2.16.0 принимается и канонический JSON-конфиг клиента mieru (формат mieru apply config — так экспортируют настройки панели вроде RIXXX и Panel-Naive-Mieru): учитывается activeProfile, лишние клиентские поля игнорируются, работает и для inline-подписок, и по URL.

Главное отличие от обычного sing-box-туннеля — это единый объект с одним Proxy-интерфейсом NDMS на всю группу, тогда как импорт через Один сервер создаёт по отдельному туннелю и Proxy на каждую ссылку.

Подписка целиком — валидный target в правилах разделов Маршрутизация → NDMS (DNS), IP-адреса, Политики доступа и VPN для устройств: правило указывает на Proxy-интерфейс подписки, а внутри уже сам sing-box (по режиму ручного выбора или autoвыбора) решает, через какого member отправить трафик. Отдельный member как target указать нельзя — на уровне роутера у него нет собственного интерфейса.

Создание подписки

Импорт начинается с главной страницы — таб Sing-box подписки → плитка Подписка по URL (для внешнего источника) или Группа серверов (для инлайн-списка). Мастер запрашивает название, URL или текст со ссылками, режим выбора активного сервера (см. ниже), а для URL-подписок — заголовки HTTP-запроса и интервал авто-обновления.

Модалка добавления подписки

Список подписок

На табе Sing-box подписки главной страницы каждая подписка — это карточка со статусом последней загрузки, числом серверов, активным сервером и временем последнего обновления. По клику открывается страница подписки (/subscriptions/<id>) с вкладками Серверы и Настройки; если есть исключённые серверы, между ними появляется вкладка Исключённые с бейджем-счётчиком (см. ниже).

Карточка подписки на главной странице

Members

Member — это один сервер внутри подписки. У каждого свой стабильный tag (детерминированный hash от протокола, адреса, порта и креденшлов — при обновлении тот же сервер сохраняет тот же tag), бейджи протокола и транспорта, отдельная история delay-проверок и собственная sparkline. На вкладке Серверы можно прогнать delay-тест по всем member’ам одним нажатием Проверить всё.

Принципиальное отличие member’а от обычного sing-box-туннеля: у member’а нет собственного Proxy-интерфейса NDMS — он живёт внутри общего Proxy всей подписки. Поэтому трафик через подписку всегда идёт через единый интерфейс роутера, а внутри sing-box между member’ами переключает selector / urltest. Для инлайн-подписок member’ы можно добавлять и удалять прямо на этой вкладке; для URL-подписок список заморожен до следующего обновления.

Вкладка Серверы подписки

Auto-режим

В режиме Автовыбор по скорости (urltest) sing-box сам периодически прогоняет URL-проверку по всем member’ам и направляет трафик в самый быстрый. В ручном режиме (Ручной выбор / selector) активный сервер фиксируется пользователем — клик по карточке member’а переключает outbound в sing-box и обновляет персистентный activeMember подписки. При urltest-режиме UI прячет ручной выбор: попытка указать активный member отклоняется backend’ом, а карточка на главной показывает живой “сейчас активен” сервер, опрашивая Clash API.

Исключённые серверы

Начиная с 2.15.0 (доработано в 2.15.1) лишние эндпоинты URL-подписки можно исключать после создания — например, когда провайдер кладёт в подписку заведомо ненужные вам регионы. Кнопка Исключить на карточке сервера (или пакетно: кнопка Выбрать в шапке вкладки → отметить серверы → Исключить выбранные) убирает сервер из подписки: он перестаёт материализоваться в конфиге sing-box и не участвует в выборе активного сервера.

Исключённые серверы собираются на отдельной вкладке Исключённые (с бейджем-счётчиком). Набор исключений переживает обновление подписки — сервер не вернётся при следующей загрузке из источника. Вернуть сервер можно кнопкой Вернуть на его карточке или пакетом — Вернуть выбранные.

Для инлайн-подписок исключение не нужно: их состав редактируется напрямую на вкладке Серверы.

Фильтры серверов (с 2.16.0)

У подписки есть два regex-фильтра в стиле filter: из mihomo — «включать только» и «исключать». Матч идёт по имени сервера, синтаксис — Go RE2. Скрытые фильтром серверы не материализуются в конфиге sing-box и собираются в отдельный блок «Скрыто фильтром»; фильтры компонуются с ручным исключением, а смена фильтра сразу пере-применяет подписку (для инлайн — повторный разбор сохранённого списка).

RE2 не поддерживает lookahead: вместо привычного (?i)^(?!.*(RU)).*$ используйте поле «исключать» с выражением (?i)(RU).

Сводные группы (с 2.16.0)

Сводная группа — один selector/urltest-туннель поверх серверов нескольких подписок сразу: со своим фильтром, режимом выбора (по умолчанию — автовыбор быстрейшего), портом и NDMS Proxy. Управление — в секции Сводные группы на вкладке подписок. Группы пересобираются в том же цикле применения, что и любое изменение подписок, поэтому состав группы всегда соответствует актуальному списку серверов её источников.

Сироты

Member становится “сиротой”, когда при очередном обновлении подписки сервер пропадает из источника. awg-manager не удаляет его автоматически: на сироту могут ссылаться другие части системы — фиксированный selector подписки, где этот сервер ранее был выбран активным, или правила Sing-box Router’а. На вкладке Серверы появляется отдельная секция Сироты (N) с кнопкой Очистить сирот — она удаляет таких member’ов и подчищает связанные с ними ссылки, но перед нажатием стоит пройти по своим правилам маршрутизации и убедиться, что ничего важного не теряется.

Настройки подписки

Вкладка Настройки на странице подписки сгруппирована в две колонки: Источник (название, URL, заголовки запроса, интервал авто-обновления, чекбокс “Включена”) и Режим выбора сервера (ручной/автовыбор + параметры urltest). Для инлайн-подписок поля URL и заголовков заменены на бэйдж “Список вручную” — менять источник там нечего, серверы редактируются на вкладке Серверы. Здесь же кнопка Удалить подписку — она убирает sing-box outbound’ы и связанный Proxy NDMS.

Заголовки запроса полезны, когда провайдер подписки требует определённый User-Agent или device-идентификаторы. В дропдауне рядом с текстовым полем есть готовые пресеты (sing-box по умолчанию, Clash/mihomo, Happ iOS, полный набор доступных headers для заполнения) — обычно достаточно их.

Вкладка Настройки подписки

Обновление подписки

URL-подписки awg-manager обновляет автоматически с интервалом, который задаётся при создании или в настройках (от часа до недели, либо “только вручную”). Кнопка Обновить сейчас на вкладке Серверы запускает обновление немедленно. При каждом обновлении awg-manager сопоставляет полученные серверы с уже сохранёнными по стабильному tag’у: новые добавляются, существующие обновляются в месте, а исчезнувшие из источника становятся “сиротами” (см. выше). Инлайн-подписки не обновляются автоматически — их список замораживается до ручного редактирования.

Это отдельный механизм от настройки Автообновление подписок DNS на странице Настройки — та управляет только DNS-правилами (NDMS правила маршрутизации или “DNS-маршрутизация” в UI роутера), а не sing-box-подписками.