bind9

Ansible роль для установки и поддержки DNS-сервера Bind9 на Debian

Статус сборки Ansible Galaxy

Эта роль устанавливает и настраивает DNS-сервер Bind9 на Debian.

Особенности:

  • Поддержка настройки авторитетного DNS-сервера для зон и/или DNS рекурсора
  • Широкая поддержка DNSSEC:
    • автоматическое создание ключей KSK и ZSK
    • автоматическая настройка DNSSEC для зон
    • поддержка отправки выходных данных формата DNSKEY/DS через XMPP
  • Поддержка скрытой основной и авторитетной вторичной конфигурации
  • Поддержка так называемых "статических" зон, т.е. зон, определяемых путем загрузки их сырого .db файла bind
  • Проверка корректности файлов зон с помощью named-checkzone
  • Базовая поддержка так называемых "динамических" зон, т.е. определяемых из yaml-переменных

Основная конфигурация сервера

Главный сервер

  • Установите переменные для вашего главного сервера, например, в host_vars/master_name/vars/XX_bind.yml, здесь с примером статических зон example.com и пересылки:
bind9_authoritative: yes
bind9_zones_static: 
- { name: example.com , type=master }
bind9_forward: yes
bind9_forward_servers:
- 8.8.8.8
- 4.4.4.4
bind9_slaves:
- slave_ip_1
- slave_ip_2
- slave_ip_3
bind9_our_neighbors:
- slave_ip_1
- slave_ip_2
- slave_ip_3
  • Разместите свой файл зоны BIND в директории ansible (не в директории роли): files/bind/zones/db.example.com

Вторичные серверы

  • Установите переменные для ваших вторичных серверов:
bind9_zones_static: 
- { name: example.com, type: slave }
bind9_forward: yes
bind9_forward_servers:
- 8.8.8.8
- 4.4.4.4
bind9_masters:
- { name: master_name, addresses: [master_ip] }
bind9_recursor: our_network

Динамические зоны

Записи так называемых "динамических" зон определяются через YAML переменную ansible bind9_zones_dynamic, которая анализируется шаблоном bind/zones/db.template.j2. Поскольку зон может быть несколько, а определения зон могут быть длинными, переменные зон удобно определять в другом файле переменных, например, host_vars/master_name/vars/YY_zones.yml. bind9_zones_dynamic можно разделить на несколько переменных, которые могут быть определены в отдельных файлах, как в примере ниже.

В YY_zones.yml может быть:

bind9_zones_dynamic: >
        {{ zones_my_domains
        | union ( zone_my_reverse_inaddr_arpa )
        | union ( zone_my_reverse_ip6_arpa ) }}

# bind9_zone_static: файлы зон, скопированные из `files/bind/zones/`

bind9_zones_static:
- name: static_dom.org
  type: master
- name: static_dom2.org
  type: master
- name: static_dom3.org
  type: slave

А в других файлах переменных:

zones_my_domains:
# Это набор переменных для моего домена
- name: dyn_domain.org
  type: master
  default_ttl: 600
  serial: 2022050501
  refresh: 1D
  retry: 2H
  expire: 1000H
  # Значения NS и других предварительно отформатированных записей должны быть указаны как полностью квалифицированные доменные имена, с или без конечной точки, но не относительно зоны
  primary: ns1.dyn_domain.org         # Необязательно, если вы не определите его, будет взят первый NS 
  admin: postmaster.dyn_domain.org
  ns_records:
  - ns1.dyn_domain.org
  - ns2.dyn_domain.org
  # Значения RR либо относительны к зоне, либо с конечной точкой, когда вне её.
  rrs:
  - {label: "@", type: MX, rdata: 10 mail}
  - {label: webmail, type: CNAME, rdata: mail}
  - {label: "@", type: A, rdata: 8.8.8.221}
  - {label: "@", type: AAAA, rdata: 2001:db8:6a::95}
  - {label: www, type: CNAME, rdata: webserver.dyn_domain.org.}
  - {label: mail, type: A, rdata: 8.8.8.222}
  - {label: mail, type: AAAA, rdata: 2001:db8:6a::22}
  - {label: webserver, ttl: 86400, type: A, rdata: 8.8.8.223}
  - {label: webserver, ttl: 86400, type: AAAA, rdata: 2001:db8:6a::23}

Аналогично zone_my_reverse_inaddr_arpa и zone_my_reverse_ip6_arpa для обратного DNS-разрешения IP. Обратите внимание, что для общих NS записей мы приняли терминологию, определённую в RFC 1034, Раздел 3.6

  • Разверните роль на своих серверах

Обновления DDNS

Генерация ключей

Если вы хотите, чтобы ваши ключи DDNS создавались этой ролью, настройте bind9_generate_ddns_key:

-  bind9_generate_ddns_key: true

Ключи по умолчанию будут храниться в files/bind/zones в вашей папке с плейбуком, но вы можете настроить это с помощью bind9_local_keydir

-  bind9_local_keydir: credentials/bind

База данных зон

Обратите внимание, что для работы обновлений DDNS местоположение файлов зон должно быть доступно для записи процессом BIND. Линукс-дистрибутивы с обязательным контролем доступа (Apparmor, SELinux) обычно не позволяют запись в путь по умолчанию /etc/bind/zones. Чтобы обойти это, вы можете изменить путь к файлам зон на /var/lib/bind/zones:

-  bind9_zonedir: /var/lib/bind/zones

Зависимости

Для функции уведомления XMPP необходимо установить python-xmpp.

Переменные роли

Смотрите defaults/main.yml для списка переменных роли.

Тестирование и разработка

Тесты

Для разработки и тестирования роли мы используем Github Actions, Molecule и Vagrant. В локальной среде вы можете легко протестировать роль с помощью

Запустите локальные тесты с:

molecule test 

Лицензия

Эта Ansible роль лицензирована под GNU GPLv3.

Автор

Copyright 2017-2020 systemli.org (https://www.systemli.org/)

О проекте

Role to install and maintain the Bind9 nameserver on Debian

Установить
ansible-galaxy install systemli/ansible-role-bind9
Лицензия
gpl-3.0
Загрузки
4913
Владелец
Your friendly tech collective