Структурированные ошибки DNS (SDE)
С выходом AdGuard DNS 2.10 AdGuard DNS стал первым публичным DNS-резолвером, который добавил поддержку структурированных ошибок DNS (Structured DNS Errors, SDE). Structured DNS Errors — это дополнение к RFC 8914. Эта функция позволяет DNS-серверам предоставлять подробную информацию о заблокированных сайтах непосредственно в DNS-ответе, не ограничиваясь сообщениями об ошибках, которые предлагают браузеры. В этой статье мы объясним, что такое структурированные ошибки DNS и как они работают.
Что такое структурированные ошибки DNS
Когда блокируется запрос к рекламному или трекерскому домену, пользователь может увидеть пустые места на сайте или вообще не заметить следов DNS-фильтрации. Но когда на уровне DNS блокируется весь сайт, пользователь не сможет получить доступ к странице. При попытке зайти на заблокированный сайт пользователь, скорее всего, увидит ошибку формата «Этот сайт недоступен». За такие ошибки отвечают браузеры.
Такие ошибки не объясняют, что случилось и почему. В результате пользователи не могут понять, почему сайт недоступен. Чаще всего они делают вывод, что проблема в их интернет-соединении или DNS-сервере.
DNS-серверы могли бы это исправить, перенаправляя пользователей на собственную страницу с объяснениями. Но для сайтов с HTTPS (а их большинство) потребуется отдельный сертификат.
Существует более простое решение: Структурированные ошибки DNS (SDE). Концепция SDE основана на расширенных ошибках DNS (Extended DNS Errors, RFC 8914), которые позволяют включить дополнительную информацию об ошибках в DNS-ответы. Интернет-драфт SDE расширяет эту идею: предлагается передавать информацию в формате I-JSON (это более строгий формат JSON), который браузеры могли бы легко считать и отобразить в понятном для пользователя виде.
Данные SDE добавляются в поле EXTRA-TEXT
DNS-ответа. Они включают в себя:
j
(justification): Причину блокировкиc
(contact): Информацию, к кому можно обратиться, если страница заблокирована по ошибкеo
(organization): Название организации, ответственной за DNS-фильтрацию в конкретном случае (опционально)s
(suberror): Код подошибки (опционально)
Такая система повышает прозрачность между DNS-сервисами и пользователями.
Что нужно, чтобы реализовать SDE
Хотя AdGuard DNS уже поддерживает структурированные ошибки DNS, на данный момент браузеры не умеют считывать и передавать информацию из SDE. Чтобы пользователи могли видеть подробные объяснения при блокировке на уровне DNS, разработчики браузеров должны ввести поддержку интернет-драфта Structured DNS Errors.
Демо-расширение AdGuard DNS для SDE
Мы создали демо-расширение, чтобы показать, как могли бы работать структурированные ошибки DNS, если бы браузеры их поддерживали. Если вы со включённым расширением перейдёте на заблокированный сайт, оно покажет вам страницу с информацией, переданной в SDE: причиной блокировки, контактными данными и названием организации, ответственной за фильтрацию.
Найти расширение можно в магазине Chrome или на GitHub.
Если вы хотите увидеть, как это выглядит на уровне DNS, вы можете использовать команду dig
и найти EDE
в выводе.
% dig @94.140.14.14 'ad.doubleclick.net' A IN +ednsopt=15:0000
...
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
; EDE: 17 (Filtered): ({"j":"Filtered by AdGuard DNS","o":"AdGuard DNS","c":["mailto:support@adguard-dns.io"]})
;; QUESTION SECTION:
;ad.doubleclick.net. IN A
...