Релиз PowerDNS Recursor 4.2 и инициатива DNS flag day 2020

После полутора лет разработки представлен релиз кэшируюшего DNS-сервера PowerDNS Recursor 4.2, отвечающего за рекурсивное преобразование имён. PowerDNS Recursor построен на одной кодовой базе с PowerDNS Authoritative Server, но рекурсивный и авторитетный DNS-серверы PowerDNS развиваются в рамках разных циклов разработки и выпускаются в форме отдельных продуктов. Код проекта распространяется под лицензией GPLv2.

В новой версии устранены все замечания, связанные с обработкой DNS-пакетов с флагами EDNS. В старых версиях PowerDNS Recursor до 2016 года практиковалось игнорирование пакетов с не поддерживаемыми флагами EDNS, без отправки ответа в старом формате, отбрасывая флаги EDNS, как того требует спецификация. Ранее подобное нестандартное поведение поддерживалось в BIND в форме обходного манёвра, но в рамках проведённой в феврале инициативы DNS flag day, разработчики DNS-серверов приняли решение отказаться от данного хака.

В PowerDNS основные проблемы в обработке пакетов с EDNS были устранены ещё в 2017 году в выпуске 4.1, а в выпущенной в 2016 году ветке 4.0 всплывали отдельные несовместимости, возникающие при определённом стечении обстоятельств и в общем виде не мешающие нормальной работе. В PowerDNS Recursor 4.2, как и в BIND 9.14, удалены обходные пути поддержки авторитетных серверов, некорректно отвечающих на запросы с флагами EDNS. До сих пор, если после отправки запроса с флагами EDNS через определённый промежуток времени не поступал ответ, DNS-сервер считал, что расширенные флаги не поддерживаются и отправлял повторный запрос без флагов EDNS. Отныне данное поведение отключено, так как наличие подобного кода приводило к увеличению задержек из-за повторной отправки пакетов, повышению нагрузки на сеть и неоднозначности при отсутствии ответа из-за сетевых сбоев, а также мешало внедрению основанных на EDNS возможностей, таких как применение DNS Cookies для защиты от DDoS-атак.

В следующем году решено провести мероприятие DNS flag day 2020, призванное сфокусировать внимание на решении проблем с IP-фрагментацией при обработке DNS-сообщений большого размера. В рамках инициативы планируется зафиксировать рекомендованные размеры буферов для EDNS до значений на уровне 1200 байт, а также перевести обработку запросов по TCP в разряд обязательно поддерживаемых на серверах. Сейчас обязательна поддержка обработки запросов по UDP, а TCP желателен, но не обязателен для работы (стандарт предписывает наличие возможности отключения TCP). Предлагается удалить из стандарта опцию отключения TCP и стандартизировать переход от отправки запроcов по UDP к применению TCP в случаях, когда установленного размера буфера EDNS недостаточно.

Предложенные в рамках инициативы изменения избавят от путаницы с выбором размера буфера EDNS и решат проблему с фрагментацией больших UDP-сообщений, обработка которых нередко приводит к потере пакетов и таймаутам на стороне клиента. На стороне клиента размер буфера EDNS будет постоянным, а большие ответы сразу будут отправляться клиенту по TCP. Исключение отправки больших сообщений по UDP также позволит блокировать атаки по отравлению кэша DNS, основанные на манипуляции фрагментированными UDP-пакетами (при разбиении на фрагменты, второй фрагмент не включает заголовок с идентификатором, поэтому может быть подделан для чего достаточно только чтобы совпадала контрольная сумма).

В PowerDNS Recursor 4.2 учтены проблемы с большими UDP-пакетами и осуществлён переход на использование размера буфера EDNS (edns-outgoing-bufsize) в 1232 байт, вместо ранее применявшегося лимита в 1680 байт, что должно существенно снизить вероятность потери UDP-пакетов. Значение 1232 выбрано, так как оно является максимумом, при котором размер DNS-ответа с учётом IPv6 укладывается в минимальное значение MTU (1280). До 1232 также уменьшено значение параметра truncation-threshold, отвечающего за обрезание ответов клиенту.

Другие изменения в PowerDNS Recursor 4.2:

  • Добавлена поддержка механизма XPF (X-Proxied-For), представляющего собой эквивалент HTTP-заголовка X-Forwarded-For для DNS, позволяющего передать сведения об IP-адресе и номере порта изначального инициатора запроса, перенаправленного через промежуточные прокси и балансировщики нагрузки (например dnsdist). Для включения XPF предусмотрены опции «xpf-allow-from» и «xpf-rr-code«;
  • Улучшена поддержка EDNS-расширения Client Subnet (ECS), позволяющая передавать в DNS-запросах авторитетному DNS-серверу сведения о подсети, из которой был отравлен транслируемый по цепочке изначальный запрос (данные об исходной подсети клиента необходимы для эффективной работы сетей доставки контента). В новом выпуске добавлены настройки для выборочного контроля за применением EDNS Client Subnet: «ecs-add-for» со списком сетевых масок, для которых IP будет использован в ECS в исходящих запросах. Для адресов, которые не подпадают под указанные маски, будет использован общий адрес, указанный в директиве «ecs-scope-zero-address«. Через директиву «use-incoming-edns-subnet» можно определить подсети, входящие запросы с заполненными значениями ECS из которых не будут заменяться;
  • Для серверов, обрабатывающих большое число запросов в секунду (более 100 тысяч), предложена директива «distributor-threads«, определяющая число потоков для приема входящих запросов и их распределения между рабочими потоками (имеет смысл только при использовании режима «pdns-distributes-queries=yes«).
  • Добавлена настройка public-suffix-list-file для определения собственного файла со списком публичных суффиксов доменов, в которых пользователи могут регистрировать свои поддомены, вместо встроенного в PowerDNS Recursor списка.

Проект PowerDNS также объявил о переходе на шестимесячный цикл разработки, в соответствии с которым следующий значительный релиз PowerDNS Recursor 4.3 ожидается в январе 2020 года. Обновления для значительных выпусков будут формироваться в течение года, после чего ещё полгода будут выпускаться исправления уязвимостей. Таким образом поддержка ветки PowerDNS Recursor 4.2 продлится до января 2021 года. Аналогичные изменения цикла разработки приняты для продукта PowerDNS Authoritative Server, выпуск 4.2 которого ожидается в ближайшее время.

Основные особенности PowerDNS Recursor:

  • Средства для удалённого сбора статистики;
  • Мгновенный перезапуск;
  • Встроенный движок для подключения обработчиков на языке Lua;
  • Полноценная поддержка DNSSEC и DNS64;
  • Поддержка RPZ (Response Policy Zones) и возможность определения чёрных списков;
  • Механизмы борьбы со спуфингом;
  • Возможность записи результатов резолвинга в виде файлов зон BIND.
  • Для обеспечения высокой производительности применяются современные механизмы мультиплексирования соединений во FreeBSD, Linux и Solaris (kqueue, epoll, /dev/poll), а также высокопроизводительный парсер DNS-пакетов, способный обрабатывать десятки тысяч параллельных запроcов.

Источник: opennet.ru