Динамическое сканирование

Обычная проверка Cheburcheck отвечает на вопрос «есть ли домен, IP-адрес или подсеть в известных списках блокировок». Это полезно, но не всегда достаточно: часть ограничений не публикуется в открытых реестрах и зависит от того, как именно оператор связи обрабатывает конкретное соединение.

Для таких случаев мы добавили динамическое сканирование. Оно не только сравнивает домен со списками, но и просит внешние динамические сканеры попробовать загрузить данные так, как это сделал бы пользователь из своей сети. Ответы сканеров приходят в реальном времени, поэтому результат может уточняться прямо на странице проверки.

Динамическое сканирование не заменяет основную проверку по спискам. Оно помогает понять, как домен ведет себя «вживую» у доступных сканеров.

Как это работает

Когда вы запускаете динамическую проверку домена, сайт отправляет задачу доступным сканерам. Каждый сканер получает домен, выполняет несколько коротких проверок и отправляет ответ обратно. Страница показывает ответы сразу, не дожидаясь завершения всех проверок.

Сканер не загружает целевой сайт целиком. Для домена он делает небольшие контрольные HTTPS-загрузки с тестовых хостов, подставляя проверяемое имя в SNI, а также сравнивает ответы нескольких публичных DNS-сервисов.

Методика сканирования

Сканер подключается к настроенным тестовым хостам, но передаёт проверяемый домен в TLS ClientHello и HTTP Host. Затем он оценивает, удалось ли завершить TLS-обмен и получить минимальный объём данных. Для проверки IP-адреса без домена этот этап пропускается.

  • При получении конфигурации сканер отдельно для IPv4 и IPv6 измеряет положение DPI в сети. Он подключается к контрольному серверу на порту 443, отправляет TLS ClientHello с контрольным SNI, а затем посылает TCP-пакеты с последовательно увеличивающимся TTL. Ответы ICMP Time Exceeded показывают, какие прыжки (hops) пакет успел пройти. Результат сохраняется отдельно для каждой версии IP.
  • При проверке целевого IP-адреса TCP-трассировка начинается со следующего после DPI прыжка — dpi_hop + 1. По умолчанию проверяются три прыжка, на каждом из которых одновременно выполняются три попытки. Первый ответ ICMP Time Exceeded, TCP RST или успешное соединение немедленно завершает трассировку.

Если DPI был измерен, но ни одна попытка после него не получила ответа, сканер выставляет вердикт «ТСПУ Блок» и показывает измеренный прыжок DPI. Любой ответ после DPI означает, что пакеты прошли дальше, поэтому блокировка IP-адреса на ТСПУ не подтверждается. Если прыжок, на котором установлен DPI, для нужной версии IP не удалось определить, трассировка пропускается и этот вердикт не выставляется.

Измерение выполняется независимо для IPv4 и IPv6. Разрыв TCP-соединения во время калибровки делает результат этой версии IP недействительным, чтобы не принимать поведение контрольного сервера за работу DPI.

Проверка DNS

Для доменных имён сканер обращается к Google DNS, Cloudflare, Quad9 и Яндекс DNS. Запросы к каждому сервису выполняются параллельно по UDP, TCP, DNS over HTTPS (DoH) и DNS over TLS (DoT). Каждый вариант запускается несколько раз, чтобы обычная ротация адресов CDN и балансировщиков меньше влияла на результат.

Сами IP-адреса могут законно отличаться между запросами, поэтому сканер не требует их точного совпадения. Для сравнения используется форма ответа: код DNS и количество уникальных IPv4- и IPv6-адресов. Ответы DoH и DoT одного провайдера служат зашифрованным ориентиром. UDP или TCP считается подозрительным, когда его форма отличается от совпавших между собой зашифрованных ответов.

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

Что показывает результат

В динамическом результате есть общий вердикт и подробности по отдельным тестовым хостам. Общий вердикт — это краткое обобщение того, что увидел конкретный сканер.

  • Доступен – сайт не найден в списках CDN, не блокируется на контрольных хостах, но может блокироваться на зарубежных CDN.
  • CDN Блок (16-20) – сайт найден в списках CDN, не блокируется на контрольных хостах, но блокируется на зарубежных CDN.
  • SNI Блок – похоже на блокировку по домену сайта в начале HTTPS-соединения. На практике это похоже на ситуацию, когда оборудование оператора (ТСПУ) видит имя домена и разрывает соединение до передачи полезных данных.
  • Подмена DNS – открытые DNS-запросы по UDP или TCP у нескольких независимых провайдеров отличаются от их ответов по защищённым протоколам DoH и DoT. Если одновременно обнаружена SNI-блокировка, в общем вердикте приоритет получает SNI Блок.
  • ТСПУ Блок – TCP-трассировка, начатая сразу после прыжка с DPI, не получила ни ICMP-ответа, ни TCP RST и не смогла подключиться к цели. Это указывает на возможную блокировку IP-адреса на оборудовании оператора.
  • Исключение для CDN – данные передаются в полном объеме при подстановке домена в SNI при подключении к заблокированному серверу.
  • Неясно – данных недостаточно или ответы противоречат друг другу.

Подробности по хостам

У каждого тестового хоста есть собственное наблюдение. Оно помогает понять, из чего сложился общий вердикт:

  • Успешно — сканер получил достаточно данных.
  • Таймаут получения данных — соединение началось, но данных пришло меньше ожидаемого объёма.
  • Блокировка после ClientHello — соединение оборвалось на раннем этапе HTTPS.
  • Ошибка подключения — сканер не смог подключиться к тестовому хосту.

Один сбойный хост сам по себе не доказывает блокировку. Важно смотреть на большинство ответов и на то, какие именно хосты дали сбой: контрольные, проверочные или все сразу.

В раскрытой строке результата DNS-проверка показана отдельно от CDN-проверки. Для каждого DNS-провайдера видны UDP, TCP, DoH и DoT, код ответа, счётчик IPv4/IPv6 и оценка расхождения. Ошибка запроса означает лишь то, что конкретное измерение не удалось, и сама по себе не считается подменой.

Почему результаты могут отличаться

Блокировки могут отличаться у разных операторов, в разных регионах и даже в разное время суток. Динамический сканер показывает состояние из той сети, где он запущен. Поэтому несколько сканеров могут дать разные ответы — это не ошибка, а часть реальности таких блокировок.

Также стоит учитывать временные проблемы: недоступность тестового хоста, перегрузку сети, потери пакетов или слишком медленное соединение. Поэтому динамический результат лучше воспринимать как сильный сигнал, а не как абсолютное юридическое или техническое доказательство.