Перейти к содержанию

Установка и настройка сервера разрешения имен ISC BIND 9 с помощью Ansible

Общее описание

Domain name server — приложение, предназначенное для ответов на DNS-запросы. По выполняемым функциям DNS-серверы делятся на несколько групп; сервер определённой конфигурации может относиться сразу к нескольким типам:

  • Авторитативный DNS-сервер — сервер, отвечающий за какую-либо зону.
    • Мастер — имеет право на внесение изменений в данные зоны. Обычно зоне соответствует только один мастер-сервер. В случае Microsoft DNS-сервера и его интеграции с Active Directory мастер-серверов может быть несколько (так как репликация изменений осуществляется не средствами DNS-сервера, а средствами Active Directory, за счёт чего обеспечивается равноправность серверов и актуальность данных).
    • Слейв - не имеющий права на внесение изменений в данные зоны и получающий сообщения об изменениях от мастер-сервера. В отличие от мастер-сервера, их может быть (практически) неограниченное количество. Слейв также является авторитативным сервером (и пользователь не может различить мастер и слейв, разница появляется только на этапе конфигурирования/внесения изменений в настройки зоны).
  • Кэширующий DNS-сервер — обслуживает запросы клиентов (получает рекурсивный запрос, выполняет его с помощью нерекурсивных запросов к авторитативным серверам или передаёт рекурсивный запрос вышестоящему DNS-серверу).
  • Перенаправляющий DNS-сервер — перенаправляет полученные рекурсивные запросы вышестоящему кэширующему серверу в виде рекурсивных запросов. Используется преимущественно для снижения нагрузки на кэширующий DNS-сервер.
  • Корневой DNS-сервер — сервер, являющийся авторитативным за корневую зону. Общеупотребительных корневых серверов в мире всего 13, их доменные имена находятся в зоне root-servers.net и называются a.root-servers.net, b.root-servers.net, …, m.root-servers.net. В определённых конфигурациях локальной сети возможна ситуация настройки локальных корневых серверов.
  • Регистрирующий DNS-сервер - cервер, принимающий динамические обновления от пользователей. Часто совмещается с DHCP-сервером. В Microsoft DNS-сервере при работе на контроллере домена сервер работает в режиме регистрирующего DNS-сервера, принимая от компьютеров домена информацию о соответствии имени и IP-адреса компьютера и обновляя в соответствии с ней данные зоны домена.

При выполнение роли устанавливается и настраивается ISC BIND 9. BIND (Berkeley Internet Name Domain, до этого: Berkeley Internet Name Daemon) — открытая и наиболее распространённая реализация DNS-сервера, обеспечивающая выполнение преобразования DNS-имени в IP-адрес и наоборот. Исполняемый файл-демон сервера BIND называется named. BIND поддерживается организацией Internet Systems Consortium. 10 из 13 корневых серверов DNS работают на BIND, оставшиеся 3 работают на NSD.

Примечание

Роль настраивает два типа конфигураций: авторитативный DNS-сервер и кэширующий DNS-сервер, а так же их комбинацию.

Для информации

Так же включена поддержка raesponse policy zone (зона политики ответа) - это механизм для введения настраиваемой политики на серверах системы доменных имен, чтобы рекурсивные распознаватели возвращали возможно измененные результаты. Зоны и их политика: "rpz.passeddomain.hosts" policy passthru; "rpz.changeddomain.hosts" policy given; "rpz.blockeddomain.hosts" policy nxdomain;

Обратите внимание

Вместе с DNS сервером устанавливаются node_exporter и bind_exporter. Необходимо не забыть открыть в брандмауэр порты: 9100, 9119.

Подсказка

Поддерживается загрузка предыдущей конфигурации из git репозитория.

Примечание

Роль поддерживает статические и динамические inventory.

Примечание

Для редактирования файлов зон есть скрипт /usr/local/bin/named-editzone, который обновляет номер зоны при сохранение, проверяет синтаксис, перечитывает конфигурацию. Перед внесением изменений делает временный файл зоны, с сохранением оригинального файла данных во временную директорию /tmp/named_zone/, файлы старше 30 дней удаляются. Поддерживает работу с файлами форматов: raw, text.

Параметры

Название переменной Тип переменной Значения по умолчанию Описание
prometheus_user string def in var (prometheus) Пользователь для exporter'ов.
node_exporter_url string undef URL на пакет с nede_exporter.
bind_exporter_url string undef URL на пакет с bind_exporter.
bind_forwarders array undef Список серверов куда пересылать запросы которые нельзя разрешить.
bind_acl_int array undef Список контроля кому можно разрешать рекурсивные запросы.
bind_acl_int_exclude array undef Список исключений кому можно разрешать рекурсивные запросы.
bind_acl_ext array def in var (any) Список контроля кому можно разрешать записи из зон.
bind_acl_ext_exclude array undef Список исключений кому можно разрешать записи из зон.
bind_acl_change boolean undef (false) Для формирования новых списков контроля.
bind_cont_ph_num string undef Контактный номер телефона администратора.
bind_cont_mail string undef Контактный почтовый адрес администратора.
bind_srv_role string undef Роль сервера: master или slave.
bind_srv_type string def in var (resolver) Тип сервера: resolver - кэширующий, authorized - авторитативный, mixed - смешанный, localroot - локальный root hint.
bind_localroot_resolv boolean undef (false ) Заменяет root.hint на локальные stub сервера.
bind_ip_v6_on boolean undef (false ) Поддержка протокола IPv6.
bind_max_cache string 256M Максимальный размер кеша в Мб.
bind_max_journal string 500M Максимальный размер журнала в Мб.
alt_tranfer_src boolean undef (false) Задает использования альтернативного интерфейса для передачи зон.
mf_format string undef Задает формат зон: map, raw, text.
zero_ttl boolean undef При возврате авторитетных отрицательных ответов на запросы SOA установите TTL записи SOA.
trust_clients array localhost Задает список клиентов по умолчанию.
trust_servers array 'ansible_all_ipv4_addresses' Задает список серверов по умолчанию.
empty_zone_name string def in var (example.com) Задает имя первой зоны.
bind_backup_dir string def in var (/var/tmp/) Директория для резервного копирования конфигурации.
bind_restore_last_conf boolean def in var (false) Задает нужно ли восстановить предыдущую конфигурацию.
remote_git_repo string undef Репозиторий от куда загружать предыдущую конфигурацию.
local_git_repo string def in var (/var/tmp/isc-bind-files) Куда временно сохранить предыдущую конфигурацию.
bind_listen_ipv4 string undef Адрес IPv4 для статической конфигурации. Для заранее определенного состояния.
bind_listen_ipv6 string undef Адрес IPv6 для статической конфигурации. Для заранее определенного состояния.
bind_fqdn string undef Имя хоста для статической конфигурации. Для заранее определенного состояния.

Для информации

Сценарий поддерживает масштабирование, добавляя новые slave сервера. Для этого хост настраивается как вторичный, и добавляется в еще одну группу new_slaves или ему присваивается переменная new_slave=True. После выполнения сценария переменную необходимо удалить, а хост исключить из группы.

Теги

Тег Описание
bind_setupe Установка BIND
bind_exporter_prometheus Установка exporter
bind_configure Создание конфигурационных файлов
bind_copy_configs Копирование конфигурационных файлов
bind_ip_v6_enable Настройка IPv6
bind_create_zone Создание первой зоны
bind_restore_from_git Копирование предыдущей конфигурации

Примеры

inventory/hosts

# Переменные которые необходимо заменить на свои значения указаны в '< >', значения указываются без них.
# Все узлы объединяются в группы ИС/АСУ.
# Данный фаил формируется в формате INI.
[all:vars]
bind_cont_ph_num='+7(000)111-22-33'
bind_cont_mail='mail@example.com'
bind_forwarders=['192.168.2.1','192.168.2.2']
alt_tranfer_src=True
bind_acl_int=['192.168.1.0/24','192.168.2.0/24']
bind_srv_type='mixed'
remote_git_repo='git@github.com:D34m0nN0n3/backup-isc-bind.git'
node_exporter_url='https://github.com/prometheus/node_exporter/releases/download/v1.1.1/node_exporter-1.1.1.linux-amd64.tar.gz'
bind_exporter_url='https://github.com/prometheus-community/bind_exporter/releases/download/v0.4.0/bind_exporter-0.4.0.linux-amd64.tar.gz'
ansible_connection=ssh

[master]
bootstrap.lab ansible_connection=local

[slaves]
rhel7.lab ansible_ssh_host=192.168.1.101
rhel8.lab ansible_ssh_host=192.168.1.102

Дополнительные материалы


Последнее обновление: July 10, 2024