Выбираем DNS сервер… или мой опыт.

Не так давно, озаботился обновлением программного обеспечения на своих 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.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *