systemli.bind9
Rol de Ansible para instalar y mantener el servidor de nombres Bind9 en Debian
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/)
Role to install and maintain the Bind9 nameserver on Debian
ansible-galaxy install systemli.bind9