Доступен robdns, сверхпроизводительный DNS-сервер

02.01.2015 21:03

В рамках проекта robdns предпринята попытка создания авторитетного (authoritative) DNS-сервера, обеспечивающего максимально возможную производительность и должный уровень безопасности. Основное назначение robdns - работа в роли slave-сервера, берущего на себя основную нагрузку по обработке запросов к определённой DNS-зоне в ситуации аномально большого наводнения трафиком, например, вследствие проведения DDoS-атак на инфраструктуру DNS.

Архитектура robdns подразумевает возможность использования нескольких методов обработки сетевых соединений: помимо традиционного подключения к сетевому порту через систему сетевых сокетов, в robdns имеется возможность перехвата информации о запросах в трафике при помощи libpcap или захвата необработанных пакетов от сетевой карты через PF_RING. Разбор пакетов в этих случаях осуществляется в обход штатного системного сетевого стека с привлечением встроенного в robdns минималистичного и очень быстрого TCP/IP-стека, работающего в пространстве пользователя. Данный стек позволяет добиться обработки миллионов DNS-запросов в секунду на каждом ядре CPU или около 10 млн на обычном сервере, что примерно в 100 раз быстрее, чем BIND.

В настоящее время проект находится на стадии рабочего прототипа, который может обрабатывать запросы на 53 сетевом порту, но пока не поддерживает некоторые расширенные возможности, такие как динамическое обновление DNS-зоны. Формат обрабатываемой DNS-зоны совместим с DNS-сервером BIND9 и может включать в себя такие типы полей, как SOA, NS, A, AAAA, PTR, CNAME, SSHFP, LOC, TXT, SRV, SPF, HINFO, MX, DNSKEY, NSEC, NSEC3, NSEC3PARAM, RRSIG, DS, TLSA и EDNS0. Поддерживается работа с зонами очень большого размера, которые могут насчитывать сотни миллионов записей. Время загрузки зоны, занимающей 8 Гб и содержащей данные о 100 млн доменов, занимает примерно 30 секунд (для сравнения утилита "wc" потратит на обработку такого файла больше времени).

Имеются функции ограничения интенсивности запросов (rate-limit) для противодействия использованию DNS-сервера в роли усилителя трафика и ограничения интенсивности записи в логи для защиты от атак по наводнению логов. Формат логов максимально приближен к BIND 9. Поддерживается работа в Linux, FreeBSD и Windows.