← К библиотеке
Обход блокировок Практика

Диагностика блокировок: логи, метрики, инструменты

«Не подключается» — самое частое и самое бесполезное сообщение в поддержке. Не угадывай. Я показываю, как я загоняю проблему в угол по слоям: три вопроса клиенту, потом проверки на сервере сверху вниз, пока не найдётся звено, где обрывается цепочка. Команды рабочие.

Не угадывай — иди по цепочке

Соединение проходит длинный путь: клиент → подписка → нода → порт → протокол → роутинг. «Не работает» — это обрыв где-то на этом пути. Задача диагностики — не гадать, а быстро локализовать слой. Начинаешь сверху (у клиента), спускаешься до сервера, и на каждом шаге отсекаешь половину вариантов.

Три вопроса клиенту

Прежде чем лезть на сервер — три вопроса, они сразу сужают поиск вдвое:

  1. Оператор и город. Мобильный или домашний? У мобильных DPI строже — если на Wi-Fi работает, а на сотовом нет, это почти наверняка про «белые списки» или транспорт, а не про мёртвую ноду.
  2. Приложение и какой сервер выбран. Happ / Hiddify / v2rayNG и конкретная плитка.
  3. Что именно не работает: связи нет вообще / грузятся только некоторые сайты / медленно / РФ-сайт не открывается.

Симптом → причина

Быстрая карта, чтобы не начинать с нуля каждый раз:

  • Не подключается у всех — нода offline, порт закрыт или истёк сертификат.
  • Не подключается у одного — подписка не обновлена, упёрся в лимит устройств (hwidDeviceLimit), выбрал не тот сервер.
  • «не видит сервер» в приложении — inbound не добавлен в сквад юзера.
  • Работает на Wi-Fi, не на мобильном — DPI/«белые списки» оператора, нужен WL-вход или каскад.
  • Подключается, но сайты не грузятся — роутинг или клиентский DNS (поставить 8.8.8.8 DoH).
  • РФ-сайт/банк не открывается — нет RU-direct роутинга.
  • Скачивание идёт, а YouTube висит — застрявший QUIC, надо блокировать UDP/443 на ноде.
  • Капчи, «VPN detected» — грязный IP ноды, замена из запаса.

Проверки на сервере, по слоям

Слой 1 — нода жива и порт открыт. С любой машины проверяем порт, на ноде — контейнер и логи Xray:

node-alive.sh
# с любой машины:
nc -vz SERVER_IP 443
# на ноде:
docker ps | grep remnanode
docker logs --tail 50 remnanode

Логи Xray — первое, куда смотреть: там видно и падение на старте (кривой конфиг), и ошибки сертификата.

Слой 2 — сертификат (для TLS-инбаундов). Смотрим срок и издателя:

cert-check.sh
echo | openssl s_client -connect SERVER_IP:443 -servername your-donor.de 2>/dev/null \
  | openssl x509 -noout -dates -issuer

Протух или домен не тот — перевыпускаем (certbot renew).

Слой 3 — Reality, совпадение параметров. Девять из десяти «не подключается на Reality» — это рассинхрон между Host в панели и конфигом ноды. Сверяем по пунктам:

  • Public Key в Host = REALITY_PUBLIC_KEY из пары (в конфиге лежит PRIVATE_KEY_X25519).
  • Short ID в Host = один из shortIds конфига (или оба пусты).
  • SNI в Host = serverNames конфига.
  • Fingerprint задан (firefox/qq).

Проверь, открывается ли https://your-donor.de в браузере — для self-steal должна открыться обманка.

Слой 4 — сквад. Inbound на ноде включён, Host создан, а юзер всё равно не видит сервер? Загляни в Internal Squads: нужный inbound должен быть отмечен в скваде этого юзера. Формула доступа: (инбаунды в сквадах юзера) ∩ (инбаунды на ноде) ∩ (видимые хосты).

Слой 5 — подписка отвечает. Проверяем, что страница подписки жива:

sub-check.sh
curl -s -o /dev/null -w "%{http_code}\n" https://sub.your-domain.com/SHORT_UUID

Не 200 — проблема на странице подписки или reverse-proxy, а не в самой ноде.

Что сделать клиенту, если сервер исправен

Когда все слои на сервере чистые — проблема на стороне клиента. Памятка, которую отдаёшь ему:

  1. Обновить подписку в приложении.
  2. Сменить сервер (другой из списка или «Авто»).
  3. Поставить DNS https://8.8.8.8/dns-query (не Cloudflare — в РФ он тормозит).
  4. Включить/выключить «обход для России».
  5. Переустановить профиль из ссылки.

Если легло массово

Один клиент — это отладка. Все разом — это блокировка, и алгоритм другой:

  1. Подтверди блок с мобильного оператора, не только из дома — у мобильных DPI жёстче.
  2. Перекинь на резерв (каскад/WL/CDN обычно делают это сами).
  3. Смени IP ноды из запаса, сгоревший — в blocklist.
  4. Смени SNI/донор/fingerprint.
  5. Напиши статус в канал. Молчание в саппорте при массовом блоке — причина №1 оттока и негатива.

Диагностика — это дисциплина отсекать слои по одному, а не хвататься за первую гипотезу. Нашёл слой, где рвётся, — там и чини.

Следующий гайд WARP на выходе: зачем и что даёт → Не понравилась статья или что-то непонятно? Напишите мне — помогу или поправлю. @notrealvpn →
Материал носит образовательный характер и посвящён инженерии сетевой инфраструктуры. Вы отвечаете за соблюдение законов своей юрисдикции.