Перейти к основному содержимому

DPI Детектор

Детектор показывает, что провайдер делает с трафиком, уходящим с роутера: какие сайты заблокированы и как именно, перехватывается ли обычный DNS и подменяются ли ответы, обрываются ли длинные соединения с хостингами и CDN, доступен ли Telegram. Он построен на методах проекта dpi-detector и использует его списки целей.

Каждый сайт запрашивается дважды: напрямую, минуя обработку b4, и через b4 с действующими сетами. Запрос через b4 берёт адрес так же, как клиент этого сета: сначала закреплённый в сете адрес, затем ответ DoH или DNS-сервера сета при включённом DNS-редиректе, иначе системный резолвер. С каждой стороны пробуется до трёх адресов, поскольку сайт с несколькими адресами часто заблокирован лишь на части из них; тогда строка читается как OK с перечислением заблокированных адресов. Когда прямой запрос не проходит, дополнительно пробуется адрес из ответа DoH-резолверов, и строка, у которой он открывается, сообщает об этом. Первый запрос показывает провайдера, второй - чинит ли это b4. Проверка только через сервис показывала бы обойдённую картину и скрывала ту самую блокировку, которую должна обнаружить.

Ввод​

Поле принимает домен или полный URL, несколько сразу через пробел, запятую или с новой строки. Домен запрашивается как https://<домен>/; URL с путём запрашивается по этому пути, что важно для сайтов, заблокированных лишь на части адресов. Если сайты не добавлены, проверяется встроенный список. Список также заполняется из включённых сетов, чтобы проверить именно те сайты, под которые настроен роутер. Последний список запоминается браузером.

Предлагаются четыре области проверки, каждая с оценкой длительности:

ОбластьНа какой вопрос отвечает
СайтыОткрывается ли каждый сайт, как он заблокирован и чинит ли это b4. Заблокированные сайты дополнительно пробуются по TLS 1.2 и по обычному HTTP, чтобы отличить блокировку по SNI от блокировки по адресу и поймать заглушку провайдера.
DNSДля каждого публичного резолвера: задержка по UDP, DoH и DoT, совпадают ли его ответы для заблокированных имён с ответами шифрованных резолверов и какая сеть на самом деле ответила на запрос к порту 53. Первыми перечислены резолверы из /etc/resolv.conf хоста, на котором работает b4.
Хостинги и CDNОбрывается ли keep-alive соединение с Hetzner, Cloudflare, Akamai, AWS и другими сетями после первых 12-40 КБ, с группировкой по сетям и порогом обрыва. При включённом поиске SNI для каждой затронутой сети перебираются белые имена, и проходящие перечисляются.
TelegramДоступность датацентров, скорость скачивания и отправки.

По умолчанию включены Сайты и DNS. В разделе Дополнительно: семейство IP, предлагаемое только пока движок захвата обрабатывает и IPv4, и IPv6 (при выборе обоих сайт с IPv6-адресом получает вторую строку), число параллельных проверок (меньшее значение щадит слабый роутер), нужен ли вообще запрос через b4, повтор по TLS 1.2 и поиск SNI.

Чтение результатов​

Первым идёт вердикт: предложение с названиями встреченных видов блокировки и счётчики сайтов, заблокированных провайдером, починенных b4 и всё ещё заблокированных. Починить через Дискавери открывает Дискавери с уже подставленными заблокированными сайтами. Скопировать отчёт помещает текстовый отчёт в буфер обмена для issue или форума.

Таблица Сайты содержит строку на сайт с результатом напрямую, результатом через b4 и итогом:

ИтогЗначение
РаботаетОткрывается обоими способами.
Починено b4Напрямую заблокирован, через b4 открывается. В строке назван сет, который его обслуживает.
Всё ещё заблокированЗаблокирован обоими способами. Строка сообщает, что сайт не покрыт ни одним сетом, сет выключен или сет не помогает.
Ломается через b4Напрямую открывается, через b4 нет; подходящий сет вредит.
Ошибка на стороне сайтаСам сайт ответил ошибкой обоими способами; провайдер ни при чём.
Резолвер не дал адресаРезолвер этого хоста не даёт адреса для сайта, DoH даёт, и по адресу из DoH сайт открывается.

Статусы: Сброс (TCP reset на TLS-рукопожатии), Дроп (рукопожатие остаётся без ответа), Недоступен (соединение не устанавливается), Обрыв (передача останавливается в окне 12-69 КБ), Подмена DNS (резолвер отвечает заглушкой: адресом из зарезервированного диапазона, например частным или loopback, или одним и тем же адресом для нескольких сайтов, которые DoH резолвит иначе; адрес из DoH показан рядом), Нет адреса (описан ниже), Заглушка (редирект или страница провайдера), Отказ, Таймаут, Подменённый сертификат, Шлюз (первый узел перед этим хостом сам отвечает на TCP-рукопожатие: на SYN с пределом в один переход приходит ответ, значит соединение несёт прозрачный прокси на этом шлюзе, и ничто из того, что b4 делает на этом хосте, дальше него не проходит; за чужим роутером это значит запустить b4 там, а если b4 и есть роутер, поможет только сет с прокси). У таких сайтов свой счётчик, отвечает шлюз: они не входят ни в заблокированные провайдером, ни во всё ещё заблокированные, и Починить через Дискавери их не подставляет, потому что ни одна стратегия с этого хоста за этот шлюз не проходит. Технические подробности в последнем столбце.

Какой резолвер использует проверка сайтов

Прямой запрос резолвит имена через резолвер хоста, на котором работает b4, то есть через первые три DNS-сервера из строк nameserver его /etc/resolv.conf, а если их там нет, через 127.0.0.1 и ::1, как и системный резолвер. Запрос через b4 использует тот же резолвер, если адрес не задаёт сет. При установке в контейнер это собственная настройка DNS контейнера, например dns= контейнера RouterOS. Клиенты в LAN могут пользоваться другим резолвером, поэтому всё, что таблица показывает про DNS, относится к хосту b4, а не к устройствам за ним. Строка над таблицей называет использованные резолверы.

Если этот резолвер не даёт адреса для имени, а DoH его возвращает, имя запрашивается ещё раз, по одному, кроме случая, когда резолвер ответил, что у имени нет адреса; после трёх повторов подряд, закончившихся таймаутом, остальные имена сохраняют первый ответ. Имя, так и оставшееся без адреса, запрашивается напрямую по адресу из DoH. Если этот запрос не удаётся, строка показывает его результат, например Дроп, а в подробностях добавлено, что резолвер не дал адреса. Если сайт открывается, строка получает статус Нет адреса и итог Резолвер не дал адреса, а в подробностях указана причина: нет ответа, по ответу резолвера у имени нет адреса (NXDOMAIN или пустой ответ), ошибка сервера или отказ либо другая ошибка запроса. Через b4 строка тоже показывает Нет адреса, если включённый сет не даёт для сайта адрес через DNS-редирект или закреплённый адрес; если адрес от сета заблокирован, итог - Ломается через b4. У сайтов с итогом Резолвер не дал адреса свой счётчик, нет адреса от резолвера: они не входят ни в заблокированные провайдером, ни во всё ещё заблокированные, и Починить через Дискавери их не подставляет, потому что никакая стратегия не меняет ответы резолвера этого хоста.

Таблица DNS содержит строку на провайдера. Первые строки - те же резолверы, которыми пользуется проверка сайтов, включая loopback-адреса: это резолверы самого хоста b4, и они не обязательно совпадают с вышестоящими резолверами роутера. Ячейки задержки показывают самый быстрый ответ для имён, не подпадающих под цензуру. Честность сравнивает ответы провайдера для известных заблокированных имён с ответами шифрованных резолверов; имя, запрос которого не удался, запрашивается ещё раз, пока три повтора подряд не закончатся таймаутом. Подменяет означает адрес-заглушку или адрес из зарезервированного диапазона там, где шифрованные резолверы дают настоящий. Не отвечает означает, что обычные имена резолвер резолвит, а на заблокированные не отвечает, выдаёт ошибку или код вроде SERVFAIL или REFUSED, в том числе при повторе, если он был. Фильтрует означает NXDOMAIN или пустой ответ для этих имён: провайдер отказывается их резолвить, но адрес не подделывает. Если в ответах одного транспорта встречается несколько таких случаев, показывается первый в этом порядке. Когда вердикты по UDP, DoH и DoT расходятся, в столбце появляется отдельный чип на каждый вердикт с указанием транспортов, к которым он относится. Сводка над таблицей называет каждого провайдера, который подменяет ответы или не отвечает, один раз, сколько бы его транспортов или запросов ни было затронуто.

На порт 53 ответил - сеть, обработавшая запрос идентификации, отправленный этому резолверу по UDP. Если это не сеть самого провайдера и не известный публичный резолвер, строка помечается как перехват. Перенаправление на известный публичный резолвер в строке не помечается: если роутер заворачивает весь трафик порта 53 с хоста b4 на AdGuard Home, а тот использует Google как вышестоящий резолвер, в этом столбце будет Google без пометки. Когда на запрос идентификации ответили хотя бы пять публичных резолверов и за всех ответила одна такая сеть, сводка сообщает, что порт 53 перенаправлен в этой сети или у провайдера; тогда столбец UDP 53 описывает этот единственный резолвер, а не перечисленных провайдеров. DoH-сервер с честными ответами копируется одной кнопкой для вставки в DNS-редирект сета.

Таблица Хостинги и CDN содержит строку на сеть с числом целей, у которых соединение оборвалось, и объёмом данных, на котором это произошло. Рабочие SNI, если поиск был включён, копируются для использования как фейковый SNI сета. Подробнее раскрывает все цели сети. Для каждой сети есть и добавление её ASN в сет: оно открывает диалог добавления со страницы Трафик, где уже выбрана вся сеть.

Списки целей​

Списки сайтов, целей хостингов, белых SNI и резолверов встроены в сервис и датированы; строка под кнопкой запуска сообщает, откуда они и насколько свежие. Скачать актуальные списки проекта загружает их из репозитория dpi-detector и хранит рядом с конфигом, поэтому сайты и адреса, умершие после выпуска, заменяются без новой версии b4. Встроенная копия возвращается из той же строки.

История​

Каждый запуск сохраняется вместе с вердиктом, до пятидесяти. Запуск можно открыть заново, скопировать как отчёт или удалить.