systemli.bind9

Rola Ansible do instalacji i utrzymania serwera nazw Bind9 na Debianie

Status budowy Ansible Galaxy

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

O projekcie

Role to install and maintain the Bind9 nameserver on Debian

Zainstaluj
ansible-galaxy install systemli.bind9
Licencja
gpl-3.0
Pobrania
5.7k
Właściciel
Your friendly tech collective