Разработчики DNS-сервера BIND сообщили о добавлении в экспериментальную ветку 9.17 реализации серверной поддержки технологий “DNS поверх HTTPS” (DoH, DNS over HTTPS) и DNS поверх TLS (DoT, DNS over TLS), а также механизма XFR-over-TLS для безопасной передачи содержимого DNS-зон между серверами. DoH доступен для тестирования в выпуске 9.17.10, а поддержка DoT присутствует начиная с выпуска 9.17.7. После стабилизации поддержка DoT и DoH будет бэкпортирована в стабильную ветку 9.16.
Реализация протокола HTTP/2, используемого в DoH, основана на применении библиотеки nghttp2, которая включена в число сборочных зависимостей (в дальнейшем библиотеку планируется перевести в число необязательных зависимостей). Поддерживаются как шифрованные (TLS), так и незашифрованные соединения по HTTP/2. При соответствующих настройках один процесс named теперь может обслуживать не только традиционные DNS-запросы, но и запросы, отправленные с использованием DoH (DNS-over-HTTPS) и DoT (DNS-over-TLS). Поддержка HTTPS на стороне клиента (dig) пока не реализована. поддержка XFR-over-TLS доступна как для входящих, так и для исходящих запросов.
Обработка запросов с использованием DoH и DoT включается через добавление опций http и tls в директиве listen-on. Для поддержки незашифрованного DNS-over-HTTP в настройках следует указать “tls none”. Ключи определяются в секции “tls”. Стандартные сетевые порты 853 для DoT, 443 для DoH и 80 для DNS-over-HTTP могут быть переопределены через параметры tls-port, https-port и http-port. Например:
tls local-tls { key-file “/path/to/priv_key.pem”; cert-file “/path/to/cert_chain.pem”; }; http local-http-server { endpoints { “/dns-query”; }; }; options { https-port 443; listen-on port 443 tls local-tls http myserver {any;}; }
Из особенностей реализации DoH в BIND отмечается интеграция в качестве общего транспорта, который может применяться не только для обработки запросов клиентов к резолверу, но и при обмене данными между серверами, при передаче зон авторитетным DNS-сервером и при обработке любых запросов, поддерживаемых другими транспортами DNS.
Другой особенности является возможность выноса операций шифрования для TLS на другой сервер, что может понадобиться в условиях, когда хранение TLS-сертификатов осуществляется на другой системе (например, в инфраструктуре с web-серверами) и обслуживается другим персоналом. Поддержка незашифрованного DNS-over-HTTP реализована для упрощения отладки и как уровень для проброса во внутренней сети, на базе которого на другом сервере может быть организовано шифрование. На выносном сервере для формирования TLS-трафика может использоваться nginx, по аналогии с тем, как организуется обвязка HTTPS для сайтов.
Напомним, что DNS-over-HTTPS может оказаться полезным для исключения утечек сведений о запрашиваемых именах хостов через DNS-серверы провайдеров, борьбы с MITM-атаками и подменой DNS-трафика (например, при подключении к публичным Wi-Fi), противостояния блокировкам на уровне DNS (DNS-over-HTTPS не может заменить VPN в области обхода блокировок, реализованных на уровне DPI) или для организации работы в случае невозможности прямого обращения к DNS-серверам (например, при работе через прокси). Если в обычной ситуации DNS-запросы напрямую отправляются на определённые в конфигурации системы DNS-серверы, то в случае DNS-over-HTTPS запрос на определение IP-адреса хоста инкапсулируется в трафик HTTPS и отправляется на HTTP-сервер, на котором резолвер обрабатывает запросы через Web API.
“DNS over TLS” отличается от “DNS over HTTPS” применением штатного протокола DNS (обычно используется сетевой порт 853), завёрнутого в шифрованный канал связи, организованный при помощи протокола TLS с проверкой валидности хоста через TLS/SSL-сертификаты, заверенные удостоверяющим центром. Существующий стандарт DNSSEC использует шифрование лишь для аутентификации клиента и сервера, но не защищает трафик от перехвата и не гарантирует конфиденциальность запросов.