systemli.bind9

Rol de Ansible para instalar y mantener el servidor de nombres Bind9 en Debian

Estado de Construcción Ansible Galaxy

Esta rol instala y configura el servidor de nombres Bind9 en Debian.

Características:

  • Soporte para configurar un servidor de nombres autoritativo para zonas DNS y/o un reductor DNS
  • Amplio soporte para DNSSEC:
    • creación automática de claves KSK y ZSK
    • configuración automática de DNSSEC para zonas
    • soporte para enviar salida formateada DNSKEY/DS por XMPP
  • Soporte para configuración de primarios ocultos y secundarios autoritativos
  • Soporte para zonas "estáticas", es decir, zonas definidas subiendo su archivo .db de BIND
  • Verificación de validez de archivos de zona con named-checkzone
  • Soporte básico para zonas "dinámicas", es decir, definidas desde conjuntos de variables YAML

Configuración básica del servidor

Servidor maestro

  • Configura las variables para tu servidor maestro, por ejemplo en host_vars/nombre_maestro/vars/XX_bind.yml, aquí con ejemplos de zonas estáticas para example.com y un reenvío:
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:
- ip_esclavo_1
- ip_esclavo_2
- ip_esclavo_3
bind9_our_neighbors:
- ip_esclavo_1
- ip_esclavo_2
- ip_esclavo_3
  • Coloca tu archivo de zona BIND en el directorio de Ansible (no en el directorio del rol): files/bind/zones/db.example.com

Servidores esclavos

  • Configura las variables para tus servidores esclavos:
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: nombre_maestro, addresses: [ip_maestro] }
bind9_recursor: nuestra_red

Zonas dinámicas

Los registros de las llamadas zonas "dinámicas" se definen a través de la variable ansible YAML bind9_zones_dynamic, que se analiza mediante la plantilla bind/zones/db.template.j2. Dado que puede haber varias zonas, y las definiciones de zonas pueden ser largas, las variables de zona se deben definir en un archivo de variables diferente, por ejemplo, host_vars/nombre_maestro/vars/YY_zones.yml. bind9_zones_dynamic se puede dividir en varias variables, que se pueden definir en archivos específicos, como en el siguiente ejemplo.

En YY_zones.yml podemos tener:

bind9_zones_dynamic: >
        {{ zones_mis_dominios
        | union ( zona_mi_reverse_inaddr_arpa )
        | union ( zona_mi_reverse_ip6_arpa ) }}

# bind9_zone_static:  archivos de zona copiados de `files/bind/zones/`

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

Y en otros archivos de variables:

zones_mis_dominios:
# Este es el conjunto de variables para mi dominio
- name: dyn_dominio.org
  type: master
  default_ttl: 600
  serial: 2022050501
  refresh: 1D
  retry: 2H
  expire: 1000H
  # Los valores pre-formateados NS y otros deben ser dados como nombres de dominio completamente calificados, con o sin un punto final, pero no relativos a la zona
  primary: ns1.dyn_dominio.org         # Opcional, si no lo defines, se toma el primer NS 
  admin: postmaster.dyn_dominio.org
  ns_records:
  - ns1.dyn_dominio.org
  - ns2.dyn_dominio.org
  # Los valores RR son ya sea relativos a la zona, ya sea con un punto final cuando están fuera.
  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_dominio.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}

Y de manera similar zona_mi_reverse_inaddr_arpa y zona_mi_reverse_ip6_arpa para la resolución DNS inversa de IP. Nota que adoptamos para registros NS genéricos la terminología definida en RFC 1034, Sección 3.6

  • despliega la rol en tus servidores

Actualizaciones DDNS

Generación de claves

Si deseas que las claves DDNS se creen por este rol configura bind9_generate_ddns_key:

-  bind9_generate_ddns_key: true

Las claves se almacenarán por defecto en files/bind/zones dentro de tu ubicación de playbook, pero puedes personalizar esto con bind9_local_keydir

-  bind9_local_keydir: credenciales/bind

Base de datos de zona

Ten en cuenta que para que las actualizaciones DDNS funcionen, la ubicación de los archivos de zona debe ser escribible por el proceso BIND. Las distribuciones de Linux con Control de Acceso Mandatorio (Apparmor, SELinux) suelen no permitir la escritura en la ruta predeterminada /etc/bind/zones. Para eludir esto, puede que desees cambiar la ubicación de los archivos de zona a /var/lib/bind/zones:

-  bind9_zonedir: /var/lib/bind/zones

Dependencias

Para la función de notificación XMPP, se necesita tener python-xmpp instalado.

Variables del rol

Consulta defaults/main.yml para ver una lista de las variables del rol.

Pruebas y Desarrollo

Pruebas

Para desarrollar y probar el rol utilizamos Github Actions, Molecule y Vagrant. En el entorno local puedes probar fácilmente el rol con

Ejecuta pruebas locales con:

molecule test 

Licencia

Este rol de Ansible está licenciado bajo la GPLv3.

Autor

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

Acerca del proyecto

Role to install and maintain the Bind9 nameserver on Debian

Instalar
ansible-galaxy install systemli.bind9
Licencia
gpl-3.0
Descargas
5.7k
Propietario
Your friendly tech collective