PowerDNS.pdns
Rol de Ansible: Servidor Autoritativo de PowerDNS
Un rol de Ansible creado por el equipo detrás de PowerDNS para configurar el Servidor Autoritativo de PowerDNS.
Requisitos
Instalación de Ansible 2.12 o superior.
Dependencias
Ninguna.
Variables del Rol
Las variables disponibles se enumeran a continuación, junto con sus valores predeterminados (ver defaults/main.yml
):
pdns_install_repo: ""
Por defecto, el Servidor Autoritativo de PowerDNS se instala desde los repositorios de software configurados en los hosts de destino.
# Instala el Servidor Autoritativo de PowerDNS desde el repositorio oficial 'master'
- hosts: all
roles:
- { role: PowerDNS.pdns,
pdns_install_repo: "{{ pdns_auth_powerdns_repo_master }}" }
# Instala el Servidor Autoritativo de PowerDNS desde el repositorio oficial '4.7.x'
- hosts: all
roles:
- { role: PowerDNS.pdns,
pdns_install_repo: "{{ pdns_auth_powerdns_repo_47 }}" }
# Instala el Servidor Autoritativo de PowerDNS desde el repositorio oficial '4.8.x'
- hosts: all
roles:
- { role: PowerDNS.pdns,
pdns_install_repo: "{{ pdns_auth_powerdns_repo_48 }}" }
# Instala el Servidor Autoritativo de PowerDNS desde el repositorio oficial '4.9.x'
- hosts: all
roles:
- { role: PowerDNS.pdns,
pdns_install_repo: "{{ pdns_auth_powerdns_repo_49 }}" }
Los ejemplos anteriores muestran cómo instalar el Servidor Autoritativo de PowerDNS desde los repositorios oficiales de PowerDNS (ver la lista completa de repositorios predefinidos en vars/main.yml
).
- hosts: all
vars:
pdns_install_repo:
name: "powerdns" # el nombre del repositorio
apt_repo_origin: "example.com" # usado para fijar los paquetes de PowerDNS al repositorio proporcionado
apt_repo: "deb http://example.com/{{ ansible_distribution | lower }} {{ ansible_distribution_release | lower }}/pdns main"
gpg_key: "http://example.com/MYREPOGPGPUBKEY.asc" # clave pública GPG del repositorio
gpg_key_id: "MYREPOGPGPUBKEYID" # para evitar reimportar la clave cada vez que se ejecute el rol
yum_repo_baseurl: "http://example.com/centos/$basearch/$releasever/pdns"
yum_debug_symbols_repo_baseurl: "http://example.com/centos/$basearch/$releasever/pdns/debug"
roles:
- { role: PowerDNS.pdns }
También es posible instalar el Servidor Autoritativo de PowerDNS desde repositorios personalizados, como se demuestra en el ejemplo anterior. Nota: Estos repositorios son ignorados en Arch Linux.
pdns_install_epel: True
Por defecto, se instala EPEL para satisfacer algunas dependencias del Servidor Autoritativo de PowerDNS como protobuf
.
Para omitir la instalación de EPEL, establece pdns_install_epel
en False
.
pdns_package_name: "{{ default_pdns_package_name }}"
El nombre del paquete del Servidor Autoritativo de PowerDNS, pdns
en sistemas similares a RedHat y pdns-server
en sistemas similares a Debian.
pdns_package_version: ""
Opcionalmente, permite establecer una versión específica del paquete del Servidor Autoritativo de PowerDNS que se instalará.
pdns_install_debug_symbols_package: False
Instalar los símbolos de depuración del Servidor Autoritativo de PowerDNS.
pdns_debug_symbols_package_name: "{{ default_pdns_debug_symbols_package_name }}"
El nombre del paquete de depuración del Servidor Autoritativo de PowerDNS que se instalará cuando pdns_install_debug_symbols_package
sea True
, pdns-debuginfo
en sistemas similares a RedHat y pdns-server-dbg
en sistemas similares a Debian.
pdns_user: pdns
pdns_group: pdns
El usuario y grupo bajo los cuales se ejecutará el proceso del Servidor Autoritativo de PowerDNS.
NOTA: Este rol no crea el usuario o grupo, ya que asumimos que han sido creados por el paquete u otros roles.
pdns_service_name: "pdns"
Nombre del servicio de PowerDNS.
pdns_service_state: "started"
pdns_service_enabled: "yes"
Permite especificar el estado deseado del servicio del Servidor Autoritativo de PowerDNS.
pdns_disable_handlers: False
Desactivar el reinicio automático del servicio en cambios de configuración.
pdns_config_dir: "{{ default_pdns_config_dir }}"
pdns_config_file: "pdns.conf"
Archivo y directorio de configuración del Servidor Autoritativo de PowerDNS.
pdns_config: {}
Diccionario que contiene la configuración del Servidor Autoritativo de PowerDNS.
NOTA: La configuración de las backends de PowerDNS y las directivas config-dir
, setuid
y setgid
deben configurarse a través de las variables de rol pdns_user
, pdns_group
y pdns_backends
(ver templates/pdns.conf.j2
).
Por ejemplo:
pdns_config:
master: yes
slave: no
local-address: '192.0.2.53'
local-ipv6: '2001:DB8:1::53'
local-port: '5300'
configura el Servidor Autoritativo de PowerDNS para escuchar solicitudes DNS entrantes en el puerto 5300.
pdns_service_overrides:
User: {{ pdns_user }}
Group: {{ pdns_group }}
Diccionario con sobrescrituras para el servicio (solo systemd).
Esto se puede usar para cambiar cualquier configuración de systemd en la categoría [Service]
.
pdns_backends:
bind:
config: '/dev/null'
Diccionario que declara todos los backends que te gustaría habilitar. Puedes usar múltiples backends del mismo tipo utilizando la sintaxis {backend}:{instance_name}
.
Por ejemplo:
pdns_backends:
'gmysql:one':
'user': root
'host': 127.0.0.1
'password': root
'dbname': pdns
'gmysql:two':
'user': pdns_user
'host': 192.0.2.15
'password': my_password
'dbname': dns
'bind':
'config': '/etc/named/named.conf'
'hybrid': yes
'dnssec-db': '{{ pdns_config_dir }}/dnssec.db'
Por defecto, este rol solo inicia el backend bind con un archivo de configuración vacío.
pdns_mysql_databases_credentials: {}
Credenciales administrativas para el backend MySQL que se utilizan para crear las bases de datos y usuarios del Servidor Autoritativo de PowerDNS. Por ejemplo:
pdns_mysql_databases_credentials:
'gmysql:one':
'priv_user': root
'priv_password': my_first_password
'priv_host':
- "localhost"
- "%"
'gmysql:two':
'priv_user': someprivuser
'priv_password': my_second_password
'priv_host':
- "localhost"
Ten en cuenta que esto solo debe contener las credenciales para los backends gmysql
proporcionados en pdns_backends
.
pdns_sqlite_databases_locations: []
Ubicaciones de las bases de datos SQLite3 que deben ser creadas si se usa el backend gsqlite3
.
pdns_lmdb_databases_locations: []
Ubicaciones de las bases de datos LMDB que deben ser creadas si se usa el backend lmdb
.
Ubicaciones del esquema base de MySQL y SQLite3. Cuando se establece, este valor es utilizado y no se detectan automáticamente.
pdns_mysql_schema_file: ''
pdns_sqlite3_schema_file: ''
Ejemplos de Playbooks
Ejecutar como un maestro utilizando el backend bind (cuando ya tienes un archivo named.conf
):
- hosts: ns1.example.net
roles:
- { role: PowerDNS.pdns }
vars:
pdns_config:
master: true
local-address: '192.0.2.53'
pdns_backends:
bind:
config: '/etc/named/named.conf'
Instalar la última construcción '41' del Servidor Autoritativo de PowerDNS habilitando el backend MySQL. También proporciona las credenciales administrativas de MySQL para crear e inicializar automáticamente el usuario y la base de datos del Servidor Autoritativo de PowerDNS:
- hosts: ns2.example.net
roles:
- { role: PowerDNS.pdns }
vars:
pdns_config:
master: true
slave: false
local-address: '192.0.2.77'
pdns_backends:
gmysql:
host: 192.0.2.120
port: 3306
user: powerdns
password: P0w3rDn5
dbname: pdns
pdns_mysql_databases_credentials:
gmysql:
priv_user: root
priv_password: myrootpass
priv_host:
- "%"
pdns_install_repo: "{{ pdns_auth_powerdns_repo_41 }}"
NOTA: En este caso, el rol usará las credenciales proporcionadas en pdns_mysql_databases_credentials
para crear e inicializar automáticamente al usuario (user
, password
) y la base de datos (dbname
) conectándose al servidor MySQL (host
, port
).
Configurar el Servidor Autoritativo de PowerDNS en modo 'master' leyendo zonas de dos base de datos PostgreSQL diferentes:
- hosts: ns2.example.net
roles:
- { role: PowerDNS.pdns }
vars:
pdns_config:
master: true
local-port: 5300
local-address: '192.0.2.111'
pdns_backends:
'gpgsql:serverone':
host: 192.0.2.124
user: powerdns
password: P0w3rDn5
dbname: pdns2
'gpgsql:otherserver':
host: 192.0.2.125
user: root
password: root
dbname: dns
Configurar el Servidor Autoritativo de PowerDNS para ejecutarse con el backend gsqlite3
.
La base de datos SQLite será creada e inicializada por el rol en la ubicación especificada por la variable database_name
.
- hosts: ns4.example.net
roles:
- { role: PowerDNS.pdns }
vars:
database_name: '/var/lib/powerdns/db.sqlite'
pdns_config:
master: true
slave: false
local-address: '192.0.2.73'
pdns_backends:
gsqlite3:
database: "{{ database_name }}"
dnssec: yes
pdns_sqlite_databases_locations:
- "{{ database_name }}"
Registro de Cambios
Un registro de cambios detallado de todas las modificaciones realizadas en el rol está disponible aquí.
Pruebas
Las pruebas se realizan mediante Molecule.
$ pip install tox
Para probar todos los escenarios, ejecuta
$ tox
Para ejecutar un comando de molécula personalizado
$ tox -e ansible214 -- molecule test -s pdns-49
Licencia
MIT
Install and configure the PowerDNS Authoritative DNS Server
ansible-galaxy install PowerDNS.pdns