| Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung |
| linux:bind [26.01.2026 16:43. ] – [Rolle] django | linux:bind [01.02.2026 17:36. ] (aktuell) – [Rolle] django |
|---|
| -O - | tar -xz --strip-components=1 -C ~/devel/ansible</code> | -O - | tar -xz --strip-components=1 -C ~/devel/ansible</code> |
| |
| Nach Anpassung der Daten im **[[#vorbereitung_-_server-_daten_im_inventory|Inventory]** kann man anschliessend direkt **[[#ausfuehrung_-_playbooklauf|zur Ausführung schreiten]]**. | Nach Anpassung der Daten im **[[#vorbereitung_-_server-_daten_im_inventory|Inventory]]** kann man anschließend direkt **[[#ausfuehrung_-_playbooklauf|zur Ausführung schreiten]]**. |
| </WRAP> | </WRAP> |
| |
| ++++ | ++++ |
| |
| Die für deb **ISC Bind-Daemon** relevanten Konfigurationsparameter legen wir in der Inventrory-Datei **''inventories/production/host_vars/vml000110/bind''** ab. | Die für deb **ISC Bind-Daemon** relevanten Konfigurationsparameter legen wir in der Inventory-Datei **''inventories/production/host_vars/vml000110/bind''** ab. |
| $ vim inventories/production/host_vars/vml000110/bind | $ vim inventories/production/host_vars/vml000110/bind |
| ++++ inventories/production/host_vars/vml000110/bind | | ++++ inventories/production/host_vars/vml000110/bind | |
| |
| === Rolle === | === Rolle === |
| Für die Konfiguration der **kea**-Daemon verwenden wir eine eigene Rolle **''kea_dhcp''**, die wir bei unserem zuvor angelegten Playbooks später einfach mit aufrufen werden. Hierzu kopieren wir uns zunächst die **[[linux:ansible:playbook_example_08|Mustervorlage]]** **''common''**, welche wir bei der initialen Ansible-Einrichtung angelagt hatten. | Für die Konfiguration des **ISC BIND**-Daemon verwenden wir eine eigene Rolle **''bind''**, die wir bei unserem zuvor angelegten Playbooks später einfach mit aufrufen werden. Hierzu kopieren wir uns zunächst die **[[linux:ansible:playbook_example_08|Mustervorlage]]** **''common''**, welche wir bei der initialen Ansible-Einrichtung angelegt hatten. |
| $ cp -avr roles/common/ roles/bind | $ cp -avr roles/common/ roles/bind |
| |
| ++++ | ++++ |
| |
| Wie wir sehen ist die Rolle durchaus überschaubar, im Task **''main.yaml''** verweisen wir lediglich auf die eigentlichen Tasks **''vorbereitung''**, **''dhcp4''**, **''dhcp6''** und **''firewalld''** | Wie wir sehen ist die Rolle durchaus überschaubar, im Task **''main.yaml''** verweisen wir lediglich auf die eigentlichen Tasks **''install''**, **''grundkonfig''**, **''zonefiles''**, **''fetchzonefiles''**, **''konfig''** und **''firewalld''** |
| $ vim roles/kea_dhcp/tasks/main.yml | $ vim roles/bind/tasks/main.yml |
| ++++ roles/kea_dhcp/tasks/main.yml | | ++++ roles/bind/tasks/main.yml | |
| |
| {{gh> https://gitlab.nausch.org/django/example_kea/-/blob/main/roles/kea_dhcp/tasks/main.yml }} | {{gh> https://gitlab.nausch.org/django/example_bind/-/blob/main/roles/bind/tasks/main.yml }} |
| |
| ++++ | ++++ |
| |
| Die Installation des Kea DHCP-Servers wird in der ersten Task-Gruppe mit dem tag **''vorbereitung''** vorgenommen. | Die Installation des ISC Bind-Servers wird in der ersten Task-Gruppe mit dem tag **''install''** vorgenommen. |
| $ vim roles/kea_dhcp/tasks/vorbereitung.yml | $ vim roles/bins/tasks/install.yml |
| ++++ roles/kea_dhcp/tasks/vorbereitung.yml | | ++++ roles/bind/tasks/install.yml | |
| |
| {{gh> https://gitlab.nausch.org/django/example_kea/-/blob/main/roles/kea_dhcp/tasks/vorbereitung.yml }} | {{gh> https://gitlab.nausch.org/django/example_bind/-/blob/main/roles/bind/tasks/install.yml }} |
| |
| ++++ | ++++ |
| |
| Für die Konfiguration des Kea-DHCP4-Daemon werden die nötigen Schritte in der Task-Gruppe mit dem tag **''dhcp4''** definiert. | Für die Grundkonfiguration des ISC BIND-Daemon (rndc-Schlüsselanlage, Definition für die 13 Root-Server und Anlegen der Verzeichnisse) werden die nötigen Schritte in der Task-Gruppe mit dem tag **''grundkonfig''** definiert. |
| $ vim roles/kea_dhcp/tasks/dhcp4.yml | $ vim roles/bind/tasks/grundkonfig.yml |
| ++++ roles/kea_dhcp/tasks/dhcp4.yml | | ++++ roles/bind/tasks/grundkonfig.yml | |
| |
| {{gh> https://gitlab.nausch.org/django/example_kea/-/blob/main/roles/kea_dhcp/tasks/dhcp4.yml }} | {{gh> https://gitlab.nausch.org/django/example_bind/-/blob/main/roles/bind/tasks/grundkonfig.yml }} |
| |
| ++++ | ++++ |
| |
| Der Kea-DHCP4-Daemon wird mit Hilfe der Task-Gruppe mit dem tag **''dhcp6''** konfiguriert. | Das Anlegen der Zonefiles erfolgt dann mit Hilfe des Task-Gruppe mit dem tag **''zonefiles''** mit den Daten aus dem Inventory konfiguriert. |
| $ vim roles/kea_dhcp/tasks/dhcp6.yml | <WRAP center round important 60%> |
| ++++ roles/kea_dhcp/tasks/dhcp6.yml | | Damit wir uns nicht die Finger brechen bzw. wund tippen speziell bei den Reverse-IPv6-Adressen delegieren wir solch stupide und fehleranfällige Arbeiten an Ansible. Zur Konvertierung der IPv6-Adressen ist hierzu das Paket python-netaddr notwendig, das wir bei Bedarf mit Hilfe des Paketmanagers auf unserem Linux-Ansible-Kontrollnode/-Workstation noch installieren: |
| | <code> $ sudo pacman -S python-netaddr</code>. |
| | </WRAP> |
| | |
| | Anschließens generieren wir noch das spezielle Zone-File, welches wir dann später bei unserem ISP einkippen werden. |
| | |
| | $ vim roles/bind/tasks/zonefiles.yml |
| | ++++ roles/bind/tasks/zonefiles.yml | |
| | |
| | {{gh> https://gitlab.nausch.org/django/example_bind/-/blob/main/roles/bind/tasks/zonefiles.yml }} |
| | |
| | ++++ |
| | |
| | Das zuvor generierte spezielle Zone-File holen wir uns nun auf unseren Linux-Ansible-Kontrollnode/-Workstation, damit wir dieses dann später bei unserem ISP einkippen. Hierzu erstellen wir noch ein entsprechendes Verzeichnis auf unserer lokalen Workstation. |
| | $ mkdir ~/devel/isp/ |
| | |
| | Der Task zum Holen des Zonefiles für den ISP beschränkt sich lediglich auf einen Schritt zum Downloaden der betreffenden Datei. |
| | |
| | $ vim roles/bind/tasks/fetchzonefiles.yml |
| | ++++ roles/bind/tasks/fetchzonefiles.yml | |
| | |
| | {{gh> https://gitlab.nausch.org/django/example_bind/-/blob/main/roles/bind/tasks/fetchzonefiles.yml }} |
| | |
| | ++++ |
| | |
| | Nun müssen wir unseren ISC Bind noch individuell konfigurieren. Dies erschlagen wir mit der Task-Gruppe **''konfig''**. |
| | |
| | $ vim roles/bind/tasks/konfig.yml |
| | ++++ roles/bind/tasks/konfig.yml | |
| |
| {{gh> https://gitlab.nausch.org/django/example_kea/-/blob/main/roles/kea_dhcp/tasks/dhcp6.yml }} | {{gh> https://gitlab.nausch.org/django/example_bind/-/blob/main/roles/bind/tasks/konfig.yml }} |
| |
| ++++ | ++++ |
| |
| Nun brauchen wir noch eine Beschreibung der Aufgaben für die Konfiguration der firewalld-Regeln für beide Kea Daemons. | Zum Schluss konfigurieren wir abschließend noch die Paketfilter-Regeln für unseren Firewall-Daemon **''firewalld''**. |
| $ vim roles/kea_dhcp/tasks/firewalld.yml | $ vim roles/kea_dhcp/tasks/firewalld.yml |
| ++++ roles/kea_dhcp/tasks/firewalld.yml | | ++++ roles/kea_dhcp/tasks/firewalld.yml | |
| ++++ | ++++ |
| |
| Sollte bei der Abarbeitung des Playbook eine oder beide Konfigurationsdateien **''kea-dhcp4.conf''** und **''kea-dhcp6.conf''** verändert werden, ist natürlich hierbei ein Restart der betreffenden Kea-Daemon notwendig. Hierzu verwenden wir die **[[https://docs.ansible.com/ansible/latest/playbook_guide/playbooks_handlers.html|Ansible Playbook Handlers]]**. Diese Handler werden in den beiden Tasks zur Erstellung der Kea-Konfigurationsdateien mit Hilfe eines **handler**-Calls aufgerufen, sofern sich die Datei verändert hat. | Sollte bei der Abarbeitung des Playbook die Konfigurationsdatei **''named.conf''** bzw. bei den Zonefiles unter **''/var/named/zones''** verändert werden, ist natürlich hierbei ein Restart der betreffenden ISC Bind-Daemon notwendig. Hierzu verwenden wir die **[[https://docs.ansible.com/ansible/latest/playbook_guide/playbooks_handlers.html|Ansible Playbook Handlers]]**. Dieser Handler wird bei den betreffenden Tasks zur Erstellung der Kea-Konfigurationsdateie bze. der Zonesfiles mit Hilfe eines **handler**-Calls aufgerufen, sofern sich die Dateien verändert hat. |
| |
| Zu guter Letzt brauchen wir noch eine Konfiguration der Aufgaben die bei einem **''notify''** abgearbeitet werden sollen. | Wir brauchen wir noch eine Konfiguration der Aufgaben die bei einem **''notify''** abgearbeitet werden sollen. |
| $ vim roles/kea_dhcp/handlers/main.yml | $ vim roles/bind/handlers/main.yml |
| ++++ roles/kea_dhcp/handlers/main.yml | | ++++ roles/bind/handlers/main.yml | |
| |
| {{gh> https://gitlab.nausch.org/django/example_kea/-/blob/main/roles/kea_dhcp/handlers/main.yml }} | {{gh> https://gitlab.nausch.org/django/example_bind/-/blob/main/roles/bind/handlers/main.yml }} |
| |
| ++++ | ++++ |
| |
| Für die Erstellung der jeweiligen Konfigurationsdateien **''/etc/kea/kea-dhcp4.conf''** und **''/etc/kea/kea-dhcp6.conf''** brauchen wir nun noch jeweils ein **[[https://docs.ansible.com/ansible/latest/playbook_guide/playbooks_templating.html|Jinja2]]** Templates. Mit Hilfe dieser beiden Templates und der darin enthaltenen Schleifendefinitionen werden dann mit Hilfe der Daten aus dem Inventory die zuvor genannten Konfigurationsdateien erzeugt. | Für die Erstellung der Konfigurationsdatei **''/etc/named.conf''** brauchen wir nun noch ein **[[https://docs.ansible.com/ansible/latest/playbook_guide/playbooks_templating.html|Jinja2]]** Templates. |
| $ vim roles/kea_dhcp/templates/dhcp4.j2 | $ vim roles/bind/templates/named.j2 |
| ++++ roles/kea_dhcp/templates/dhcp4.j2 | | ++++ roles/bind/templates/named.j2 | |
| |
| {{gh> https://gitlab.nausch.org/django/example_kea/-/blob/main/roles/kea_dhcp/templates/dhcp4.j2 }} | {{gh> https://gitlab.nausch.org/django/example_bind/-/blob/main/roles/bind/templates/named.j2 }} |
| |
| ++++ | ++++ |
| |
| $ vim roles/kea_dhcp/templates/dhcp6.j2 | Für die Erstellung der Zone-Files im Verzeichnis **''/var/named/zones''** benötigen wir nun noch jeweils ein **[[https://docs.ansible.com/ansible/latest/playbook_guide/playbooks_templating.html|Jinja2]]** Templates. |
| ++++ roles/kea_dhcp/templates/dhcp6.j2 | | $ vim roles/bind/templates/0.0.10.in-addr.arpa.zone.db.j2 |
| | ++++ roles/bind/templates/0.0.10.in-addr.arpa.zone.db.j2 | |
| |
| {{gh> https://gitlab.nausch.org/django/example_kea/-/blob/main/roles/kea_dhcp/templates/dhcp6.j2 }} | {{gh> https://gitlab.nausch.org/django/example_bind/-/blob/main/roles/bind/templates/0.0.10.in-addr.arpa.zone.db.j2 }} |
| |
| ++++ | ++++ |
| |
| | $ vim roles/bind/templates/10.0.10.in-addr.arpa.zone.db.j2 |
| | ++++ roles/bind/templates/10.0.10.in-addr.arpa.zone.db.j2 | |
| |
| | {{gh> https://gitlab.nausch.org/django/example_bind/-/blob/main/roles/bind/templates/10.0.10.in-addr.arpa.zone.db.j2 }} |
| |
| | ++++ |
| |
| | $ vim roles/bind/templates/12.92.217.in-addr.arpa.zone.db.j2 |
| | ++++ roles/bind/templates/12.92.217.in-addr.arpa.zone.db.j2 | |
| |
| | {{gh> https://gitlab.nausch.org/django/example_bind/-/blob/main/roles/bind/templates/12.92.217.in-addr.arpa.zone.db.j2 }} |
| |
| | ++++ |
| |
| FIXME **''21:12 $ pikaur -Ss netaddr''** FIXME | $ vim roles/bind/templates/intra.nausch.org.j2 |
| | ++++ roles/bind/templates/intra.nausch.org.j2 | |
| |
| | {{gh> https://gitlab.nausch.org/django/example_bind/-/blob/main/roles/bind/templates/intra.nausch.org.j2 }} |
| |
| | ++++ |
| |
| | $ vim roles/bind/templates/intra.nausch.org.ip6.j2 |
| | ++++ roles/bind/templates/intra.nausch.org.ip6.j2 | |
| | |
| | {{gh> https://gitlab.nausch.org/django/example_bind/-/blob/main/roles/bind/templates/intra.nausch.org.ip6.j2 }} |
| | |
| | ++++ |
| | |
| | $ vim roles/bind/templates/idmz.nausch.org.j2 |
| | ++++ roles/bind/templates/idmz.nausch.org.j2 | |
| | |
| | {{gh> https://gitlab.nausch.org/django/example_bind/-/blob/main/roles/bind/templates/idmz.nausch.org.j2 }} |
| | |
| | ++++ |
| | |
| | $ vim roles/bind/templates/idmz.nausch.org.in-addr.j2 |
| | ++++ roles/bind/templates/idmz.nausch.org.in-addr.j2 | |
| | |
| | {{gh> https://gitlab.nausch.org/django/example_bind/-/blob/main/roles/bind/templates/idmz.nausch.org.in-addr.j2 }} |
| | |
| | ++++ |
| | |
| | $ vim roles/bind/templates/idmz.nausch.org.ip6.j2 |
| | ++++ roles/bind/templates/idmz.nausch.org.ip6.j2 | |
| | |
| | {{gh> https://gitlab.nausch.org/django/example_bind/-/blob/main/roles/bind/templates/idmz.nausch.org.ip6.j2 }} |
| | |
| | ++++ |
| | |
| | $ vim roles/bind/templates/edmz.nausch.org.j2 |
| | ++++ roles/bind/templates/edmz.nausch.org.j2 | |
| | |
| | {{gh> https://gitlab.nausch.org/django/example_bind/-/blob/main/roles/bind/templates/edmz.nausch.org.j2 }} |
| | |
| | ++++ |
| | |
| | $ vim roles/bind/templates/edmz.nausch.org.in-addr.j2 |
| | ++++ roles/bind/templates/edmz.nausch.org.in-addr.j2 | |
| | |
| | {{gh> https://gitlab.nausch.org/django/example_bind/-/blob/main/roles/bind/templates/edmz.nausch.org.in-addr.j2 }} |
| | |
| | ++++ |
| | |
| | $ vim roles/bind/templates/edmz.nausch.org.ip6.j2 |
| | ++++ roles/bind/templates/edmz.nausch.org.ip6.j2 | |
| | |
| | {{gh> https://gitlab.nausch.org/django/example_bind/-/blob/main/roles/bind/templates/edmz.nausch.org.ip6.j2 }} |
| | |
| | ++++ |
| | |
| | $ vim roles/bind/templates/nausch.org.j2 |
| | ++++ roles/bind/templates/nausch.org.j2 | |
| | |
| | {{gh> https://gitlab.nausch.org/django/example_bind/-/blob/main/roles/bind/templates/nausch.org.j2 }} |
| | |
| | ++++ |
| | |
| | $ vim roles/bind/templates/nausch.org.ip6.j2 |
| | ++++ roles/bind/templates/nausch.org.ip6.j2 | |
| | |
| | {{gh> https://gitlab.nausch.org/django/example_bind/-/blob/main/roles/bind/templates/nausch.org.ip6.j2 }} |
| | |
| | ++++ |
| |
| === Ausführung - Playbooklauf === | === Ausführung - Playbooklauf === |
| </pre> | </pre> |
| </html> | </html> |
| | \\ |
| <WRAP center round tip 80%> | <WRAP center round tip 80%> |
| In diesem Beispiel haben wir nach nicht einmal **70 Sekunden** einen voll funktionsfähigen DNSSEC-fähigen Namserver für vier Domains mit sehr umfangreichen **20 Zonefiles** mit bis zu **800 Zeilen** in einem Zone-File, die nun wirklich niemand mehr manuell pflegen will. Die automatisierte Erstellung dieser Zonefiles aus den Daten des Inventories hat unscheinbare Vorteile. Man hat sauber formatierte Zonefiles mit aktuellen Daten und die Fehleranfälligkeit durch manuelles Editieren ist auf ein Mindestmaß begrenzt und es gibt auch keine unterschiedlichen Meinungen mehr im Admin-Team ob nun so ein Zonefile mit TABs oder SPACEes formatiert werden soll! ;) | In diesem Beispiel haben wir nach nicht einmal **70 Sekunden** einen voll funktionsfähigen DNSSEC-fähigen Namserver für vier Domains mit sehr umfangreichen **20 Zonefiles** mit bis zu **800 Zeilen** in einem Zone-File, die nun wirklich niemand mehr manuell pflegen will. Die automatisierte Erstellung dieser Zonefiles aus den Daten des Inventories hat unscheinbare Vorteile. Man hat sauber formatierte Zonefiles mit aktuellen Daten und die Fehleranfälligkeit durch manuelles Editieren ist auf ein Mindestmaß begrenzt und es gibt auch keine unterschiedlichen Meinungen mehr im Admin-Team ob nun so ein Zonefile mit TABs oder SPACEes formatiert werden soll! ;) |
| </WRAP> | </WRAP> |
| | |
| | ==== Ergebniskontrolle ==== |
| | Ob die Konfigurationsdateien valide erstellt und auch von den Kea-Daemons erfolgreich geladen worden sind, kontrollieren wir zum Beispiel auf dem Zielhost mit einem Blick in die betreffenden Konfigurationsdateie, mit Prüfung der erstellten Zonefiles und mit Hilfe der **''systemctl status''**-Abfrage des betreffenden named-Daemons. |
| | * **''named-checkconf''** <code> # named-checkconf /etc/named.conf</code> |
| | * **''named-checkzone''** <code> # root@vml000110:~# named-checkzone edmz.nausch.org /var/named/zones/edmz.nausch.org.db |
| | zone edmz.nausch.org/IN: loaded serial 2026011201 |
| | OK</code> |
| | * **''systemd''** <code> # systemctl status named.service</code> |
| | * **''dig''** <code> # dig @::1 AAAA zerberus.nausch.org |
| | |
| | ; <<>> DiG 9.20.18 <<>> @::1 AAAA zerberus.nausch.org |
| | ; (1 server found) |
| | ;; global options: +cmd |
| | ;; Got answer: |
| | ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 46659 |
| | ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 3 |
| | |
| | ;; OPT PSEUDOSECTION: |
| | ; EDNS: version: 0, flags:; udp: 4096 |
| | ; COOKIE: 82f5ba9ac8a044cb010000006978ca1cbafbbb0f05e54c11 (good) |
| | ;; QUESTION SECTION: |
| | ;zerberus.nausch.org. IN AAAA |
| | |
| | ;; ANSWER SECTION: |
| | zerberus.nausch.org. 3600 IN AAAA fd00::3:10:0:0:9a37 |
| | |
| | ;; AUTHORITY SECTION: |
| | nausch.org. 3600 IN NS ns1.nausch.org. |
| | |
| | ;; ADDITIONAL SECTION: |
| | ns1.nausch.org. 3600 IN AAAA fd00::3:10:0:0:110 |
| | ns1.nausch.org. 3600 IN A 10.0.0.110 |
| | |
| | ;; Query time: 0 msec |
| | ;; SERVER: ::1#53(::1) (UDP) |
| | ;; WHEN: Tue Jan 27 15:22:20 CET 2026 |
| | ;; MSG SIZE rcvd: 166 |
| | |
| | # dig @ns1.core-networks.de AAAA zerberus.nausch.org |
| | ;; BADCOOKIE, retrying. |
| | |
| | ; <<>> DiG 9.20.18 <<>> @ns1.core-networks.de AAAA zerberus.nausch.org |
| | ; (2 servers found) |
| | ;; global options: +cmd |
| | ;; Got answer: |
| | ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 59294 |
| | ;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1 |
| | ;; WARNING: recursion requested but not available |
| | |
| | ;; OPT PSEUDOSECTION: |
| | ; EDNS: version: 0, flags:; udp: 1232 |
| | ; COOKIE: 40e0ff3f34e893d5010000006978cbcfd0cf510e49133631 (good) |
| | ;; QUESTION SECTION: |
| | ;zerberus.nausch.org. IN AAAA |
| | |
| | ;; ANSWER SECTION: |
| | zerberus.nausch.org. 3600 IN AAAA 2003:a:e0d:7600:5054:ff:fe3d:9a37 |
| | |
| | ;; Query time: 13 msec |
| | ;; SERVER: 2001:1bc0:d::fffe#53(ns1.core-networks.de) (UDP) |
| | ;; WHEN: Tue Jan 27 15:29:35 CET 2026 |
| | ;; MSG SIZE rcvd: 104 |
| | </code> |
| | |
| | |
| | ====== Links ====== |
| | * **[[linux:ansible:detail|zurück zum Kapitel "Ansible - Erweiterte Konfigurationsbeispiele"]] <= ** |
| | * **=> [[linux:unbound|weiter zum Kapitel "Lokalen DNS-Resolver mit Hilfe von Unbound unter Arch Linux einrichten und nutzen"]] <= ** |
| | * **[[linux:start#ansible|Zurück zur "Ansible"-Übersicht]]** |
| | * **[[wiki:start|Zurück zu >>Projekte und Themenkapitel<<]]** |
| | * **[[http://dokuwiki.nausch.org/doku.php/|Zurück zur Startseite]]** |
| |