Не так давно, озаботился обновлением программного обеспечения на своих DNS серверах. И в названии статьи, я намеренно не стал указывать для чего же мы выбираем DNS сервер. Для работы? Для обслуживания своей, личной зоны? В реалиях текущей даты, лично для меня есть 2 варианта и немного позже я расскажу почему. На момент обновления мою зону обслуживал PowerDNS. Когда я знакомился с этим продуктом, мне казалось что он слишком «сырой», разделенный на несколько частей, о чем это я? О том что у PowerDNS есть два основных компонента. Authoritative и Recursor так назваемый авторитетный сервер используется для только для обслуживания зон, а так же рекурсивный который отвечает за передачу запросов. Есть так же третий, но, малоиспользуемый компонент – DNSdist. Это интересный инструмент для балансировки нагрузки, оптимизатор трафика и прокси. Стоит писать о нем отдельно. Но сегодня речь не об этом. Вот поэтому, мне казался PowerDNS всегда «слишком» массивным. До этого я всега пользовался Bind – быстро, просто, все в одном.
PowerDNS
Так как я всегда стараюсь понимать как работает инструмент «под капотом», то изначально я собирал докер образ на базе alpine и исходников которые были на тот момент доступны в релизе. Как это не редко бывает: «работает – не трогай», после последней сборки прошло более двух лет, и я очень давно не обновлял образ. В чем я видел преимущество перед bind. По моему мнению их 2. Первое это конечно же работа с базой данных, то есть вся информация храниться в отдельной БД. В тот момент я использовал SQLite, так как для моей единственной зоны это было более чем достаточно. Но на момент написания статьи PowerDNS умеет работать с большинством популярных баз и в том числе с файлами формата Bind. Второй – к нему написано довольно много, не плохих, web-интерфесов. Чего не скажешь о Bind в силу хранения им данных в текстовом виде.
И так, посмотрев на дату последнего обновления контейнера с PowerDNS, я понял что обновить его будет не так просто. Очень много мажорных версий уже было выпущено, существенно изменился и формат конфигурационного файла и многое другое. К тому же в процессе эксплуатации я понял что для меня, это «слишком много», для моей единственной зоны. Мой кластер стоит из 3х серверов, одного матера и двух подчиненных серверов. Что бы «не положить» всю свою зону сделав все сайты недоступными – было принято решение вернуться к Bind.
BIND (Berkeley Internet Name Domain)
Мое знакомство с ним началось крайне давно, больше 30 лет назад. Сейчас уже сложно об этом думать… Надо отметить что 10 из 13 основных корневых DNS серверов мира работают именно на BIND и сейчас. Не смотря на то, что последнее большое обновление было аж в уже далеком 2000м году. Он прост, быстр и без сомнения можно сказать что это – «все в одном», но он имеет один большой недостаток, это файлы зон. По сути это просто текстовый файл определенного формата. И все бы ничего, если у вас 1-2 зоны, но когда речь будет идти о десятках а то и сотнях тысяч зон, вот тут, я уверен, вы крепко призадумаетесь… Поиск нужной зоны, поиск нужной информации внутри зоны, это станет прямо испытанием. Но если речь идет о своей собственной и единственной зоне, пожалуй, это лучшее решение.
Что же делать что бы все не сломать?
И так, у меня 3 сервера, один мастер и 2 слейва. PowerDNS как и было уже скзаано умеет читать формат Bind, так и работать с ним. По этому, я взял последний стабильный образ bind https://hub.docker.com/r/internetsystemsconsortium/bind9 сначала я перевел последнюю ноду ns3.yakunin.dev и убедился что все работает хорошо. Конфигурационные файлы я вынес за пределы контейнера что бы было удобно работать с ними. У меня получился вот такой конфиг:
version: "3.8"
services:
bind-dns-server:
image: internetsystemsconsortium/bind9:9.21
container_name: bind-dns-server
hostname: bind-dns-server
restart: always
volumes:
- ./zone:/etc/bind/zone
- ./named.conf:/etc/bind/named.conf
network_mode: "host"
healthcheck:
test: ["CMD", "named-checkconf", "/etc/bind/named.conf"]
interval: 60s
timeout: 3s
retries: 3
start_period: 5s
Убедился что все работает и мастер в качестве PowerDNS прекрасно отдает зоны слеву а он их «подхватывает». Далее обновил второй слейв, и уже потом обновил мастер. Почему же я перешел обратно на BIND? За время использования, я просто понял что для обслуживания одной моей зоны, мне не нужно ничего больше.
Что же в итоге?
BIND — это «классика». Надежный, предсказуемый, с огромным сообществом. Идеален для традиционных сред, где зоны относительно статичны и управляются вручную системными администраторами. Его сила — в простоте для небольших инсталляций.
PowerDNS — это «модерн». Спроектирован для автоматизации, масштабирования и интеграции. Не имеет себе равных в динамических средах (виртуализация, облака, хостинг-провайдеры), где записи DNS часто меняются программно. Его сила — в гибкости и удобстве программируемого управления. А так же доступности API.
Выбор между ними зависит от конкретных задач: для небольшого, стабильного DNS-сервера отлично подойдет BIND. Для построения масштабируемой, автоматизированной DNS-инфраструктуры PowerDNS (особенно в связке с базой данных) часто является лучшим выбором.
И как показал мой опыт, вы можете использовать PowerDNS как основной, авторитетный сервер, а в качестве слейв прекрасно подойдет и BIND.
Напомню что на сайте есть статься посвященная настройке кластера BIND.