systemli.bind9

Ansible-Rolle zur Installation und Verwaltung des Bind9 Nameservers auf Debian

Build-Status Ansible Galaxy

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/)

Über das Projekt

Role to install and maintain the Bind9 nameserver on Debian

Installieren
ansible-galaxy install systemli.bind9
Lizenz
gpl-3.0
Downloads
5.7k
Besitzer
Your friendly tech collective