Sing-box подписки

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:// распознаётся, но осознанно пропускается.

Главное отличие от обычного 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.

Сироты

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-подписками.