systemli.bind9

Rôle Ansible pour installer et maintenir le serveur de noms Bind9 sur Debian

Statut de Construction Ansible Galaxy

Ce rôle installe et configure le serveur de noms Bind9 sur Debian.

Fonctionnalités :

  • Prise en charge de la configuration d'un serveur de noms autoritaire pour les zones DNS et/ou d'un résolveur DNS
  • Support étendu de DNSSEC :
    • création automatique des clés KSK et ZSK
    • configuration automatique de la zone DNSSEC
    • support pour envoyer des sorties formatées DNSKEY/DS via XMPP
  • Prise en charge de la configuration de serveurs principaux cachés et secondaires autoritaires
  • Prise en charge des zones "statiques", c'est-à-dire les zones définies en téléchargeant leur fichier .db brut de Bind
  • Vérification de validité des fichiers de zone avec named-checkzone
  • Support de base pour les zones "dynamiques", c'est-à-dire définies par des ensembles de variables YAML

Configuration de base du serveur

Serveur principal

  • Définissez des variables pour votre serveur principal, par exemple dans host_vars/master_name/vars/XX_bind.yml, ici avec une zone statique example.com et un serveur de redirection :
bind9_authoritative: yes
bind9_zones_static: 
- { name: example.com , type=master }
bind9_forward: yes
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
  • Placez votre fichier de zone BIND dans le répertoire ansible (pas dans le répertoire du rôle) : files/bind/zones/db.example.com

Serveurs esclaves

  • Définissez des variables pour vos serveurs esclaves :
bind9_zones_static: 
- { name: example.com, type: slave }
bind9_forward: yes
bind9_forward_servers:
- 8.8.8.8
- 4.4.4.4
bind9_masters:
- { name: master_name, addresses: [master_ip] }
bind9_recursor: our_network

Zones dynamiques

Les enregistrements des zones "dynamiques" sont définis par la variable YAML ansible bind9_zones_dynamic, qui est analysée par le modèle bind/zones/db.template.j2. Comme il peut y avoir plusieurs zones et que les définitions de zones peuvent être longues, il est préférable de définir les variables de zone dans un fichier de variables différent, par exemple host_vars/master_name/vars/YY_zones.yml. bind9_zones_dynamic peut être divisé en plusieurs variables, qui peuvent être définies dans des fichiers spécifiques, comme dans l'exemple ci-dessous.

Dans YY_zones.yml nous pouvons avoir :

bind9_zones_dynamic: >
        {{ zones_my_domains
        | union ( zone_my_reverse_inaddr_arpa )
        | union ( zone_my_reverse_ip6_arpa ) }}

# bind9_zone_static:  fichiers de zone copiés depuis `files/bind/zones/`

bind9_zones_static:
- name: static_dom.org
  type: master
- name: static_dom2.org
  type: master
- name: static_dom3.org
  type: slave

Et dans d'autres fichiers de variables :

zones_my_domains:
# Ceci est l'ensemble de variables pour mon domaine
- name: dyn_domain.org
  type: master
  default_ttl: 600
  serial: 2022050501
  refresh: 1D
  retry: 2H
  expire: 1000H
  # Les valeurs des enregistrements NS et autres doivent être données sous forme de noms de domaine pleinement qualifiés, avec ou sans point final, mais pas relatifs à la zone
  primary: ns1.dyn_domain.org         # Optionnel, si vous ne le définissez pas, le premier NS est pris
  admin: postmaster.dyn_domain.org
  ns_records:
  - ns1.dyn_domain.org
  - ns2.dyn_domain.org
  # Les valeurs RR sont soit relatives à la zone, soit avec un point final quand elles sont à l'extérieur.
  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}

Et de même pour zone_my_reverse_inaddr_arpa et zone_my_reverse_ip6_arpa pour la résolution DNS inverse IP. Notez que nous avons adopté pour les enregistrements NS génériques la terminologie définie dans RFC 1034, Section 3.6

  • déployez le rôle sur vos serveurs

Mises à jour DDNS

Génération de clés

Si vous souhaitez que vos clés DDNS soient créées par ce rôle, configurez bind9_generate_ddns_key :

-  bind9_generate_ddns_key: true

Les clés seront par défaut stockées dans files/bind/zones au sein de l'emplacement de votre playbook, mais vous pouvez personnaliser cela avec bind9_local_keydir

-  bind9_local_keydir: credentials/bind

Base de données de zones

Veuillez noter que pour que les mises à jour DDNS fonctionnent, l'emplacement des fichiers de zone doit être accessible en écriture par le processus BIND. Les distributions Linux avec un Contrôle d'Accès Mandatoire (Apparmor, SELinux) n'autorisent généralement pas l'écriture dans le chemin par défaut /etc/bind/zones. Pour contourner cela, vous pouvez vouloir changer l'emplacement des fichiers de zone en /var/lib/bind/zones à la place :

-  bind9_zonedir: /var/lib/bind/zones

Dépendances

Pour la fonctionnalité de notification XMPP, python-xmpp doit être installé.

Variables du rôle

Consultez defaults/main.yml pour une liste des variables du rôle.

Tests et Développement

Tests

Pour développer et tester le rôle, nous utilisons Github Actions, Molecule et Vagrant. Dans l'environnement local, vous pouvez facilement tester le rôle avec

Exécutez des tests locaux avec :

molecule test 

Licence

Ce rôle Ansible est sous licence GPLv3.

Auteur

Copyright 2017-2020 systemli.org (https://www.systemli.org/)

À propos du projet

Role to install and maintain the Bind9 nameserver on Debian

Installer
ansible-galaxy install systemli.bind9
Licence
gpl-3.0
Téléchargements
5.7k
Propriétaire
Your friendly tech collective