bind9
Ansible роль для установки и поддержки DNS-сервера Bind9 на Debian
Эта роль устанавливает и настраивает 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