systemli.bind9
Ansible-Rolle zur Installation und Verwaltung des Bind9 Nameservers auf Debian
Diese Rolle installiert und konfiguriert den Bind9 Nameserver auf Debian.
Funktionen:
- Unterstützung für die Konfiguration eines autoritativen Nameservers für DNS-Zonen und/oder einen DNS-Rekursor
- Umfassende Unterstützung für DNSSEC:
- automatische Erstellung von KSK- und ZSK-Schlüsseln
- automatische DNSSEC-Konfiguration der Zonen
- Unterstützung zum Senden von DNSKEY/DS formatiertem Output über XMPP
- Unterstützung für verborgene primäre und autoritative sekundäre Konfigurationen
- Unterstützung für sogenannte "statische" Zonen, d.h. Zonen, die durch Hochladen ihrer rohen .db BIND-Datei definiert werden
- Gültigkeitsprüfung von Zonendateien mit named-checkzone
- Grundlegende Unterstützung für sogenannte "dynamische" Zonen, d.h. also basierend auf Variablen-Sets in YAML
Grundlegende Serverkonfiguration
Master-Server
- setze Variablen für deinen Master-Server, zum Beispiel in
host_vars/master_name/vars/XX_bind.yml
, hier mit einer Beispiel.com statischen Zone und einem Forwarder:
bind9_authoritative: ja
bind9_zones_static:
- { name: example.com, type=master }
bind9_forward: ja
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
- Lege deine BIND-Zonendatei im Ansible-Verzeichnis (nicht im Rollenverzeichnis) ab:
files/bind/zones/db.example.com
Slave-Server
- setze Variablen für deine Slave-Server:
bind9_zones_static:
- { name: example.com, type: slave }
bind9_forward: ja
bind9_forward_servers:
- 8.8.8.8
- 4.4.4.4
bind9_masters:
- { name: master_name, addresses: [master_ip] }
bind9_recursor: unser_netzwerk
Dynamische Zonen
Die sogenannten "dynamischen" Zonen-Datensätze werden durch die YAML-Ansible-Variable bind9_zones_dynamic
definiert, die durch die Vorlage bind/zones/db.template.j2
verarbeitet wird.
Da es mehrere Zonen geben kann und die Zonen-Definitionen lang sein können, sollten die Zonen-Variablen in einer separaten Variablen-Datei definiert werden, z.B. host_vars/master_name/vars/YY_zones.yml
. bind9_zones_dynamic
kann in mehrere Variablen aufgeteilt werden, die in spezifischen Dateien definiert werden können, wie im folgenden Beispiel.
In YY_zones.yml
könnten wir haben:
bind9_zones_dynamic: >
{{ zones_my_domains
| union ( zone_my_reverse_inaddr_arpa )
| union ( zone_my_reverse_ip6_arpa ) }}
# bind9_zone_static: Zonen-Dateien kopiert aus `files/bind/zones/`
bind9_zones_static:
- name: static_dom.org
type: master
- name: static_dom2.org
type: master
- name: static_dom3.org
type: slave
Und in anderen Variablen-Dateien:
zones_my_domains:
# Das sind die Variablen für meine Domain
- name: dyn_domain.org
type: master
default_ttl: 600
serial: 2022050501
refresh: 1D
retry: 2H
expire: 1000H
# NS und andere vorformatierte Werte müssen als vollqualifizierte Domainnamen angegeben werden, mit oder ohne abschließenden Punkt, aber nicht relativ zur Zone
primary: ns1.dyn_domain.org # Optional, wenn nicht definiert, wird der erste NS verwendet
admin: postmaster.dyn_domain.org
ns_records:
- ns1.dyn_domain.org
- ns2.dyn_domain.org
# RR-Werte sind entweder relativ zur Zone oder mit einem abschließenden Punkt, wenn außerhalb.
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}
Und ähnlich für zone_my_reverse_inaddr_arpa
und zone_my_reverse_ip6_arpa
für die IP-Rückwärtsauflösung. Beachte, dass wir für generische NS-Datensätze die Terminologie aus RFC 1034, Abschnitt 3.6 übernommen haben.
- Rolle auf deinen Servern bereitstellen
DDNS-Updates
Schlüsselgenerierung
Wenn du möchtest, dass deine DDNS-Schlüssel von dieser Rolle erstellt werden, konfiguriere bind9_generate_ddns_key
:
- bind9_generate_ddns_key: true
Die Schlüssel werden standardmäßig in files/bind/zones
innerhalb deines Playbook-Standorts gespeichert, aber du kannst dies mit bind9_local_keydir
anpassen
- bind9_local_keydir: credentials/bind
Zonen-Datenbank
Bitte beachte, dass für DDNS-Updates der Speicherort der Zonen-Dateien schriftlich vom BIND-Prozess zugänglich sein muss.
Linux-Distributionen mit Mandatory Access Control (Apparmor, SELinux) erlauben normalerweise kein Schreiben in den Standardpfad /etc/bind/zones
. Um dies zu umgehen, möchtest du vielleicht den Speicherort der Zonen-Dateien auf /var/lib/bind/zones
ändern:
- bind9_zonedir: /var/lib/bind/zones
Abhängigkeiten
Für die XMPP-Benachrichtigungsfunktion muss python-xmpp
installiert sein.
Rollenvariablen
Siehe defaults/main.yml
für eine Liste von Rollenvariablen.
Tests & Entwicklung
Tests
Für die Entwicklung und das Testen der Rolle verwenden wir GitHub Actions, Molecule und Vagrant. In der lokalen Umgebung kannst du die Rolle ganz einfach mit
Führe lokale Tests aus mit:
molecule test
Lizenz
Diese Ansible-Rolle ist unter der GNU GPLv3 lizenziert.
Autor
Copyright 2017-2020 systemli.org (https://www.systemli.org/)
Role to install and maintain the Bind9 nameserver on Debian
ansible-galaxy install systemli.bind9