systemli.bind9
Rola Ansible do instalacji i utrzymania serwera nazw Bind9 na Debianie
Ta rola instaluje i konfiguruje serwer nazw Bind9 na systemie Debian.
Cechy:
- Wsparcie dla skonfigurowania autorytatywnego serwera nazw dla stref DNS i/lub rekurenta DNS
- Rozbudowane wsparcie dla DNSSEC:
- automatyczne tworzenie kluczy KSK i ZSK
- automatyczna konfiguracja DNSSEC dla stref
- wsparcie do wysyłania wyjścia w formacie DNSKEY/DS przez XMPP
- Wsparcie dla tzw. "ukrytej" konfiguracji głównej i autorytatywnej drugorzędnej
- Wsparcie dla tzw. "statycznych" stref, czyli stref zdefiniowanych przez przesłanie ich surowego pliku .db bind
- Sprawdzanie poprawności plików strefowych za pomocą named-checkzone
- Podstawowe wsparcie dla tzw. "dynamicznych" stref, tzn. zdefiniowanych na podstawie zmiennych w plikach YAML
Podstawowa konfiguracja serwera
Serwer główny
- Ustaw zmienne dla swojego serwera głównego, na przykład w
host_vars/master_name/vars/XX_bind.yml
, z przykładem strefy statycznej example.com oraz przekierowaniem:
bind9_authoritative: tak
bind9_zones_static:
- { name: example.com , type=master }
bind9_forward: tak
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
- Umieść plik strefy BIND w katalogu ansible (nie w katalogu roli):
files/bind/zones/db.example.com
Serwery podrzędne
- Ustaw zmienne dla swoich serwerów podrzędnych:
bind9_zones_static:
- { name: example.com, type: slave }
bind9_forward: tak
bind9_forward_servers:
- 8.8.8.8
- 4.4.4.4
bind9_masters:
- { name: master_name, addresses: [master_ip] }
bind9_recursor: our_network
Strefy dynamiczne
Rekordy tzw. "dynamicznych" stref są definiowane przez zmienną YAML ansible bind9_zones_dynamic
, która jest analizowana przez szablon bind/zones/db.template.j2
.
Ponieważ może być wiele stref, a definicje stref mogą być długie, warto zdefiniować zmienne stref w oddzielnym pliku zmiennych, na przykład host_vars/master_name/vars/YY_zones.yml
. bind9_zones_dynamic
można podzielić na kilka zmiennych, które można definiować w konkretnych plikach, jak w poniższym przykładzie.
W YY_zones.yml
możemy mieć:
bind9_zones_dynamic: >
{{ zones_my_domains
| union ( zone_my_reverse_inaddr_arpa )
| union ( zone_my_reverse_ip6_arpa ) }}
# bind9_zone_static: pliki strefy skopiowane z `files/bind/zones/`
bind9_zones_static:
- name: static_dom.org
type: master
- name: static_dom2.org
type: master
- name: static_dom3.org
type: slave
I w innych plikach zmiennych:
zones_my_domains:
# To jest zestaw zmiennych dla mojej domeny
- name: dyn_domain.org
type: master
default_ttl: 600
serial: 2022050501
refresh: 1D
retry: 2H
expire: 1000H
# Wartości RECORD NS i innych muszą być podane jako pełne wykwalifikowane nazwy domen, z lub bez kropki na końcu, ale nie w odniesieniu do strefy
primary: ns1.dyn_domain.org # Opcjonalne, jeśli go nie zdefiniujesz, pierwszy NS zostanie przyjęty
admin: postmaster.dyn_domain.org
ns_records:
- ns1.dyn_domain.org
- ns2.dyn_domain.org
# Wartości RR są względne w stosunku do strefy lub mają kropkę na końcu, gdy są na zewnątrz.
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}
Podobnie dla zone_my_reverse_inaddr_arpa
i zone_my_reverse_ip6_arpa
dla odwróconego rozwiązywania DNS IP. Zauważ, że przyjęliśmy ogólną terminologię dla rekordów NS zgodnie z definicją w RFC 1034, Sekcja 3.6
- Wdróż rolę na swoje serwery
Aktualizacje DDNS
Generowanie kluczy
Jeśli chcesz, aby klucze DDNS były tworzone przez tę rolę, skonfiguruj bind9_generate_ddns_key
:
- bind9_generate_ddns_key: true
Klucze domyślnie będą przechowywane w files/bind/zones
w lokalizacji Twojego skryptu, ale możesz dostosować to z bind9_local_keydir
- bind9_local_keydir: credentials/bind
Baza danych stref
Zauważ, że aby aktualizacje DDNS działały, lokalizacja plików stref musi być zapisywalna przez proces BIND. Dystrybucje Linuksa z Wymuszonym Kontrolowaniem Dostępu (Apparmor, SELinux) zazwyczaj nie pozwalają na zapis do domyślnej ścieżki /etc/bind/zones
. Aby temu zaradzić, możesz chcieć zmienić lokalizację plików stref na /var/lib/bind/zones
:
- bind9_zonedir: /var/lib/bind/zones
Zależności
Dla funkcji powiadamiania XMPP, python-xmpp
musi być zainstalowane.
Zmienne roli
Zobacz defaults/main.yml
po listę zmiennych roli.
Testowanie i rozwój
Testy
Do rozwoju i testowania roli używamy Github Actions, Molecule i Vagrant. W lokalnym środowisku możesz łatwo przetestować rolę przy pomocy
Uruchom lokalne testy:
molecule test
Licencja
Ta rola Ansible jest licencjonowana na podstawie GNU GPLv3.
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