Настройка

Adblock в Xray: только на ноде, не в клиенте

Неизвестный geosite-тег в мобильном клиенте роняет всё ядро — VPN не стартует. На ноде то же правило работает fail-safe для всех платформ.

6 мин чтения

Идея и грабля

Хочется резать рекламу на уровне VPN правилом geosite:category-ads-all в routing. Естественная мысль — добавить его в клиентский шаблон подписки, чтобы блок работал у всех. Так делать нельзя: это кладёт мобильных клиентов. Правильное место — серверный профиль ноды.

Почему клиентский шаблон ломается

В geosite.dat, который несёт мобильный клиент, набор урезанный — секции category-ads-all там может не быть. Xray-core 26.x не игнорирует неизвестный geosite-тег: он роняет парсинг всего routing, ядро не стартует, VPN не поднимается вообще. Тот же класс бага, что geoip:ru при включённом «Truncate geofiles» у клиента.

На ноде наоборот: geosite.dat в образе полный (10+ МБ), тег есть. А если в какой-то сборке его нет — правило на ноде молча становится no-op, ничего не ломая. Fail-safe там, где нам и нужно.

Как сделать

Правило кладём в config-профиль нод, не в шаблон подписки:

{ "type": "field", "domain": ["geosite:category-ads-all"], "outboundTag": "BLOCK" }

Тег outbound — как в конкретном профиле (blackhole). Реклама режется на сервере до выхода, работает для всех клиентов разом — iOS, Android, sing-box — и не требует обслуживания.

Порядок правил важен: Xray выбирает первое совпадение.

Применение через API: обёртки панелей нередко принимают только name и config через них не поменять — рабочий путь это GET профиля → добавить правило в config.routing.rules → PATCH профиля целиком. Снапшот до правки обязателен. Применять по одному профилю, между ними проверять, что ноды isConnected и онлайн восстановился: после пуша xray рестартует, online на 10–25 секунд падает в ноль — это норма.

Подводные камни

Вывод. geosite:category-ads-all режет рекламу на уровне VPN, но только на ноде, где geosite.dat полный. В клиентском шаблоне неизвестный тег роняет ядро и кладёт VPN целиком. Кладите правило в серверный профиль — последним в основном, перед balancerTag в балансире — правьте через GET→append→PATCH со снапшотом, и adblock работает для всех клиентов без обслуживания.

Как подключиться за 2 минуты
Частые вопросы

Частые вопросы

Почему нельзя добавлять geosite:category-ads-all в клиентский шаблон подписки?
В geosite.dat мобильного клиента набор урезанный, и такого тега там может не быть. Xray-core не игнорирует неизвестный geosite-тег, а роняет парсинг всего routing — ядро не стартует, и VPN не поднимается вообще.
Где правильно держать правило блокировки рекламы для VPN?
Правило кладут в серверный конфиг-профиль ноды, а не в клиентский шаблон подписки. На ноде geosite.dat полный, тег там есть, а если в какой-то сборке его вдруг нет — правило просто становится no-op, не ломая ничего.
В каком порядке ставить adblock-правило среди остальных правил маршрутизации?
В основном профиле правило ставится последним, после списка DIRECT-доменов, чтобы локальные сервисы оставались приоритетнее. В балансир-профиле — перед catch-all правилом с balancerTag, иначе до adblock просто не дойдёт.
Как безопасно применить новое правило через API панели?
Обёртки панелей часто принимают только name, и конфиг через них не меняется — рабочий путь: GET профиля, добавление правила в config.routing.rules, затем PATCH профиля целиком. Перед этим обязателен снапшот, а правки применяют по одному профилю с проверкой, что нода снова online.
Нормально ли, что онлайн-статус ноды проседает после применения правила?
Да, это норма: после пуша конфигурации xray перезапускается, и статус online на 10–25 секунд падает в ноль, прежде чем восстановиться.
Похожее

Ещё в базе знаний

Подключите рабочий VPN

Инструкции базы знаний написаны под ключи VPN PRO: ключ выдаёт Telegram-бот за минуту, работоспособность гарантируем. Промокод VPN10 — 10 дней бесплатно, без карты.

Промокод VPN10 — 10 дней бесплатно · до 31 августа · передавайте друзьям