Одна строка dnsmasq может ответить на имя кодом NXDOMAIN, и это весь механизм. Оно никогда не читает HTML, не проверяет путь запроса и не видит, что приложение делает с уже открытым соединением. Поэтому сравнение с расширением браузера — это сравнение двух разных задач. Одно решает, разрешается ли имя; другое решает, что происходит после.

Что на самом деле контролирует фильтр имён

Параметр address=/metrics.example/, после последней косой черты которого ничего нет, заставляет резолвер возвращать NXDOMAIN для этого имени и его поддоменов. Пустой адрес — важная часть: он не позволяет отправлять клиентов на посторонний сервер-заглушку и не выдаёт адрес loopback за реальный пункт назначения. Руководство dnsmasq описывает такую форму как отрицательный ответ, а не как перенаправление.

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

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

Чем отличается блокировщик на стороне клиента

Расширение браузера видит запрос до того, как он уходит, поэтому может сопоставить путь в URL, отменить конкретный запрос и скрыть элемент, который показал бы результат. Оно может разрешить example.com/article и при этом отклонить example.com/ads/, что не выразит ни один ответ DNS. Этот взгляд на уровне пути — возможность, которой у резолвера просто нет. Поэтому список фильтров, собранный для одного инструмента, редко ведёт себя так же в другом.

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

Ни одна из схем не полна сама по себе. DNS-фильтр не может убрать идентификатор, который страница уже отправила, а расширение браузера не может защитить приложение, которое его никогда не загружает.

Путь резолвера решает, применимо ли хоть что-то из этого

VPN может объявлять DNS-сервер и всё равно не получать каждый запрос. Браузер с настроенным шифрованным DNS, приложение со своим резолвером или устройство на сетевом пути в обход шлюза будут искать в другом месте. Мобильные платформы всё чаще предлагают настройку приватного DNS, которая тихо переопределяет то, что предлагает туннель.

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

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

Проверьте оба направления, прежде чем заявлять результат

Используйте заведомо заблокированное имя из документации, разрешённое публичное имя и приватное имя, нужное сервису:

$ dig +short metrics.example @10.40.0.53
$ dig +short example.com @10.40.0.53
$ dig +short intranet.corp.internal @10.40.0.53

Пустой ответ для заблокированного имени, обычный адрес для публичного и приватный адрес для внутреннего вместе показывают, что фильтрация, вышестоящее разрешение и локальные записи работают. Если все три не сработают, вы смотрите на проблему вышестоящего сервера или слушателя, а не фильтра.

Держите утверждение узким во всём, что публикуете внутри. Это фильтрация доменов на резолвере, а не проверка содержимого, не фильтрация путей и не обещание, что за кем-то не следят. Указывайте рядом с правилами владельца политики, путь исключения и срок хранения запросов, потому что фильтр, который журналирует каждый запрос, имеет свою цену для приватности.

Похожие статьи