Сервер пересылки на BIND9

Сервер пересылки на BIND9 настраивается проще простого. Тем не менее, не лишним будет выполнить ряд дополнительных задач, чтобы администрирование сервиса в будущем не выглядело одной большой проблемой.


Если вам интересно подробнее изучить задачи администрирования BIND9, рекомендую обратиться к соответствующему тегу на моем блоге.


Сервер пересылки на BIND9

Знакомство с этой статьей не освобождает вас от чтения документации 1. Итак, приступим.

Установка

Установим все необходимые пакеты, которые доступны в стандартных репозиториях Debian:

Создадим временную папку и отправим туда дефолтные конфиги. Они нам не нужны, мы напишем свои.

В главном конфиге нам нужна всего лишь одна строчка, которая инклудит доп. конфиг с главной секцией options{}. Вытащим её командой:

Собственно вот эта строчка:

Примечание: несмотря на то, что сервис имеет имя BIND9, главный его конфиг называется named.conf. Systemd-юнит имеет название bind9.service. Но это только в Debian. Например в Centos это named.service.

Теперь перетаскиваем все не закомментированные строчки из конфига named.conf.options:

Итого вот все опции, которые нам нужны на данном этапе:

Перезапустим демона:

После выполненных изменения ваш BIND9 должен работать в минимальной конфигурации. Все дальнейшие настройки будем производить в следующих главах.

Настройка rndc

Для DNS-сервиса важно обеспечить непрерывный аптайм, не допуская даже минутных простоев. Если вы попытаетесь перезапустить systemd-юнит обычной командой systemctl (как в главе выше), а в конфигурации будут ошибки, то BIND9 не запустится. Чтобы избежать столь неприятных последствий, всего-то надо правильно настроить утилиту rndc, которая позволяет обойти эти сложности.

Итак, первым делом сгенерируем конфигурацию командой:

Вывод будет содержать все необходимые настройки:

Создаем файл rndc.conf и сразу назначаем ему корректные права:

Открываем его для редактирования:

И вставляем не закомментированный участок конфигурации, полученной с помощью rndc-confgen выше:

Обратите внимание, что значение поля secret у вас будет другое. Далее открываем файл named.conf.options:

Копируем в него закомментированный участок вывода (разумеется предварительно расскомментируйте его) утилиты rndc-confgen 2:

Перезапустите демона:

Как только мы настроили rndc, обновлять конфигурацию BIND9 можно одной командой (используйте её в следующих главах, когда будете менять конфиги):

Примечание: Если в конфигурации будут ошибки, то rndc её не подгрузит, а BIND9 продолжит работать с её старым вариантом. Пример ошибки:
rndc: ‘reload’ failed: failure

Rndc заслуживает более широкого обзора, но в рамках этой статьи я не могу его предоставить. Тем не менее посмотрите главы ниже, там будут полезные сценарии использования rndc.

Настройка пересылки

Первым делом немного позаботимся о безопасности, создав списки контроля доступа (acl) для каждой подсети, которые есть в нашей инфраструктуре. Для этого открываем в режиме редактирования новый файл named.conf.acl:

И вставляем следующие стройки:

Примечание: помните, что разрешения проверяются сверху вниз и если адрес какого-либо клиента уже попал например в acl acllist_dmz, то на этом все и закончится. Acl ниже по списку проверяться не будут. Если вам нужно из какого-то acl исключить например любой адрес, вы можете это сделать путем добавления восклицательного знака в самом начале. И это исключение также должно быть выше основной подсети внутри acl, частью которой он является. Вот так будет выглядеть конфиг (собрал каждый acl в одну строчку для компактности):

acl acllist_dmz { !172.16.0.15; 172.16.0.0/12; };
acl acllist_local { 192.168.0.0/16; 172.16.0.15; };.

Теперь нам нужно подключить созданный выше конфиг в главную конфигурацию:

Пришло время внести изменения в основные опции. Открываем для редактирования named.conf.options:

Приводим его к виду:

Где 192.168.1.14 – адрес нашего сервера. Коротко описание каждой новой опции ниже 3:

  • recursion – разрешает выполнение рекурсивных запросов;
  • allow-query – разрешает запросы из указанных подсетей;
  • allow-query-cache – разрешает возвращать результаты из кэша клиентам из указанных подсетей;
  • forward – устанавливает приоритет пересылки (only – только пересылать; first – пересылать в первую очередь). Актуально лишь с опцией forwarders;
  • forwarders – список серверов пересылки;

Примечание: рассмотрите дополнительные опции, управляющие безопасностью сервиса, если вдруг вам это будет нужно.

Перезапускаем демона и с любого клиента проверим как разрешает имена наш сервер:

Базовая настройка на этом закончена, но эта статья была бы не полной без описания настройки логов.

Логи

По умолчанию BIND9 отправляет логи в syslog и вы сможете их найти в /var/log/messages. Тем не менее бывают ситуации, когда логи нужно перенаправить в отдельные файлы или, более того, разделить их по степени важности и/или источнику. В этом нам поможет отдельная секция logging {}.

Для начала создадим нужный нам каталог и сменим владельца:

Теперь откроем для редактирования новый файл named.conf.logging:

И вставим в него конфигурацию ниже 4:

Изменим основной конфиг, добавив в него запись include:

Как только обновите конфигурацию все логи будут направляться в один отдельный файл. Уже лучше, но BIND9 позволяет управлять логами более гибко 5, воспользуемся этой возможностью.

Например сделаем так, чтобы категории логов client и rpz (что такое rpz расскажу в следующих статьях) отправлялись в отдельные файлы. Также создадим отдельный канал, куда бы сыпались вообще все логи, чтобы было удобнее дебажить:

Вы можете добавлять сколько угодно категорий и комбинировать в них какие угодно каналы.

Отладка BIND9

Если сервер BIND9 вдруг работает не так как вы ожидали, либо не работает вообще, можно попробовать залезть в логи. Но для начала нужно включить повышенный уровень отладки, а также логирование пользовательских запросов. Сделать это можно всего лишь одно командой (ну хорошо, двумя, но перечисленными в одну строчку):

Далее смотрите логи на предмет ошибок.

Примечание: будьте аккуратны, ведь файлы логов начнут заполняться очень быстро, даже если сервер принимает редкие единичные запросы от клиентов. 99 – максимальное значения уровня отладки 6. Также помните, что по умолчанию query logging отключен, если явно не определена категория queries в секции logging{}.

Как только режим отладки будет не нужен, верните демона в режим работы по умолчанию:

Функционал rndc достаточно широк. С её помощью можно также сбрасывать кэш BIND9. Это может быть особенно полезно также при отладке поведения BIND9, ведь кэш сильно влияет на ответы демона:

Примечание: помните, что сбросить кэш перезапуском демона у вас не получится, systemctl restart bind9 не сработает. В этом смысле помощь rndc особенно полезна.

Сброс кэша на серверах в проде может негативно повлиять на быстродействие в том случае, если вы имеете дело в высоконагруженными сервисами.

Лучшие практики

Кроме того, что мы уже успели настроить, хорошей практикой 7 считается подключать зону с корневыми серверами (если вы разрешаете рекурсию – recursion yes), а также другие зоны. Благо все они уже есть в дефолтной конфигурации, остается лишь вернуть их из нашей временной папки (/usr/bind_old) в корневой каталог BIND9. Сделать это можно командой:

Сразу подключаем в named.conf:

Подгружайте измененную конфигурацию и проверяйте работу.

Итоговые конфиги

На всякий случай конфиги в том виде, в котором они должны оказаться к окончанию настройки BIND9 по этой статье.

1. /etc/bind/named.conf:

2. /etc/bind/named.conf.options:

3. /etc/bind/named.conf.acl:

4. /etc/bind/named.conf.logging:

На этом все.

Яндекс.Метрика