Консорциум ISC после четырёх лет разработки представил первый стабильный выпуск DNS-сервера BIND 10, отличающегося кардинальной переработкой внутренней архитектуры. В отличие от ранее практикуемой модели реализации всей доступной функциональности в одном серверном процессе, в BIND 10 осуществлён переход к разделению функций по отдельным взаимосвязанным процессам, каждый из которых реализует свой сервис. Разделение по разным процессам позволило рационально использовать ресурсы многоядерных систем, расширило возможности масштабирования, обеспечило изоляцию отдельных функций и повысило надёжность.
Ключевые особенности BIND 10:
- Интеграция функций DHCP-сервера. В процессе развития продукта ISC DHCP разработчики столкнулись с необходимостью существенной переработки реализации DHCP-сервера, при этом основные мотивы и цели примерно совпадали с мотивами и целями разработчиков, взявшихся переписать BIND. С учётом того, что во многих ситуациях требуется обеспечение тесного взаимодействия DHCP и DNS-серверов, например, типичной является задачи синхронизации имен хостов и выделяемых через DHCP IP-адресов, разработчики решили объединить функции DNS и DHCP в рамках единого продукта;
- Вынос в независимые модули таких компонентов, как резолвер, подсистема для хранения данных, система обслуживания DNS-зон, авторитативный DNS-сервер, динамический DNS-сервер, сервисы перенаправления запросов (forwarder), система накопления статистики, менеджер конфигурации, интерфейс для удалённого управления работой;
- Увеличение надежности, повышение стойкости к DoS атакам и способность работать до последнего, игнорируя возникающие ошибки (например, некорректные записи в DNS зонах);
- Поддержка акселерации выполнения запросов через схему бэкенд-фронтенд;
- Не привязанность к конкретной модели хранения данных, подключение обработчиков хранилищ через модули. Включение в комплект модулей для хранения зоны в SQL базе, кеширования в памяти из файлов или использования встраиваемых БД;
- Возможность определять в процессе сборки, на основе каких частей будет сформирована бинарная сборка. Например, может быть собран только кеширующий или только авторитативный сервер, что позволит создавать компактные версии bind, подходящие для использования во встраиваемых устройствах с ограниченными ресурсами;
- Поддержка кластеризации: интеграция технологий, позволяющих организовать работу как единого целого нескольких копий BIND, размещенных на разных серверах;
- Средства для интеграции BIND в программную инфраструктуру пользователя. Если в BIND 9 базовая конфигурация оформлялась в текстовых файлах, то в BIND 10 добавлены специальные программные интерфейсы для управления конфигурацией и мониторинга BIND из сторонних приложений;
- Контроль в процессе выполнения. Реконфигурация BIND 9 производилась исключительно через чтение файлов и примитивные rndc команды. В BIND 10 реализована более изящная и интерактивная схему контроля и мониторинга. Например, обеспечена поддержка автоматического перезапуска компонентов в случае сбоя, без влияния на другие части системы. Представлены средства для изменения конфигурации и управления работой сервера на лету, без остановки и перезапуска;
- Специальный API и набор библиотек для интеграции функций для работы с DNS и средств для взаимодействия с DNS-сервером в сторонние приложения. Для разработки дополнений и новых модулей подготовлены C++ библиотека libdns++ и Python-биндинг.
Из поддерживаемых в BIND10 1.0.0 функций отмечается поддержка передачи и приёма зон (IXFR и AXFR), бэкенд для хранения (кэширования) параметров зон в памяти с целью ускорения их отдачи, бэкенд для хранения параметров зон в БД SQLite3, реализация протокола DNSSEC для отдачи подписанных зон, реализация DDNS (Dynamic Updates), поддержка списков контроля доступа, поддержка TSIG для верификации DNS-сообщений и передаваемых зон.
Ключевым звеном BIND 10 является процесс msgq, используемый для организации обмена сообщениями между модулями. Функции авторитетного DNS-сервера выполняет модуль auth, а функциональность DHCP обеспечивается модулями dhcp4 и dhcp6. Модули auth, dhcp4 и dhcp6 для увеличения масштабируемости и балансировки нагрузки могут запускаться в нескольких экземплярах, например, для каждого CPU на сервере может быть запущена отдельная копия модуля auth, а запросы на 53 порт могут равномерно распределяться между процессами. Для обслуживания входящих и исходящих AXFR-запросов (трансфер зон целиком) представлены отдельные сервисы xfrin и xfrout. Функции динамического DNS-сервера выполняет модуль ddns, а управление зонами делегированы модулю zonemgr.
Для организации удаленного управления DNS-сервером подготовлен модуль cmdctl, поверх которого подготовлено несколько надстроек для управления конфигурацией, таких как утилита bindctl, web-интерфейс WebTool, GUI-интерфейс GuiTool и утилита для обеспечения совместимости с конфигуратором BIND9. Для разбора и хранения конфигурации задействован модуль cfgmgr. Для управления сервером и изменения конфигурации может использоваться RESTful-интерфейс, работающий поверх HTTPS. Отдельный интерес представляет модуль накопления статистики, который в сочетании с дополнительными надстройками может отдавать статистику по протоколам HTTP (в XML-представлении) или SNMP.