Configuración Automatizada de DNS en Linux con Ansible

Artículos Guías Manuales Sistemas Linux Windows Redes MySql Binario 0 Binario Cero Artículos Guías Manuales Sistemas Linux Windows Redes MySql Binario 0 Binario Cero

En entornos empresariales, la configuración correcta de los servidores DNS es fundamental para garantizar la resolución de nombres en la red interna y externa. Este artículo presenta una solución automatizada para establecer servidores DNS en sistemas Debian/Ubuntu y RHEL/CentOS usando Ansible. Se explica cómo aplicar estas configuraciones de forma reproducible y escalable.

Requisitos previos

  • Ansible instalado en el nodo de control.
  • Acceso SSH con privilegios de sudo a los nodos de destino.
  • Inventario de hosts definido (estático o dinámico).
  • Variables definidas por grupo o por host (target_hosts).

1. Configuración DNS en Debian/Ubuntu

En los sistemas Debian y Ubuntu modernos, Netplan gestiona la configuración de red. Para modificar los DNS, es necesario generar un archivo YAML en /etc/netplan y aplicar los cambios.

Playbook: debian_configure_dns.yml

---
- name: Configurar DNS en Debian/Ubuntu
hosts: "{{ target_hosts }}"
become: true
vars:
dns_servers:
- "8.8.8.8"
- "1.1.1.1"

tasks:
- name: Crear archivo Netplan con DNS
ansible.builtin.template:
src: dns-netplan.yaml.j2
dest: /etc/netplan/01-dns.yaml
mode: '0644'

- name: Aplicar configuración de Netplan
ansible.builtin.command: netplan apply

Plantilla Jinja2: templates/dns-netplan.yaml.j2

network:
version: 2
ethernets:
{{ ansible_default_ipv4.interface }}:
nameservers:
addresses:{{ dns_servers }}

Esta plantilla genera dinámicamente el archivo 01-dns.yaml con la interfaz predeterminada detectada por Ansible (ansible_default_ipv4.interface) y las direcciones DNS especificadas.

2. Configuración DNS en RHEL/CentOS

En estos sistemas, NetworkManager suele gestionar el DNS. Para personalizarlo, se desactiva su control de DNS y se modifica directamente el archivo /etc/resolv.conf.

Playbook: redhat_configure_dns.yml

---
- name: Configurar DNS en RHEL/CentOS
hosts: "{{ target_hosts }}"
become: true
vars:
dns_servers:
- "8.8.8.8"
- "1.1.1.1"

tasks:
- name: Deshabilitar configuración DNS por NetworkManager
ansible.builtin.lineinfile:
path: /etc/NetworkManager/conf.d/dns.conf
line: "dns=none"
create: yes

- name: Establecer DNS en /etc/resolv.conf
ansible.builtin.copy:
dest: /etc/resolv.conf
content: |
nameserver 8.8.8.8
nameserver 1.1.1.1
mode: '0644'

- name: Reiniciar NetworkManager
ansible.builtin.service:
name: NetworkManager
state: restarted

Ejecución de los Playbooks

Desde el nodo de control de Ansible, puedes ejecutar los playbooks de la siguiente manera:

Para Debian/Ubuntu:

ansible-playbook /root/ansible_playbooks/debian/debian_configure_dns.yml -e "target_hosts=grupo_debian"

Para RHEL/CentOS:

ansible-playbook /root/ansible_playbooks/redhat/redhat_configure_dns.yml -e "target_hosts=grupo_redhat"

Nota: Reemplaza grupo_debian y grupo_redhat con los nombres reales de los grupos definidos en tu inventario (hosts.ini).

Verificación

Después de la ejecución, puedes verificar los cambios en los nodos destino:

En Debian/Ubuntu:

cat /etc/netplan/01-dns.yaml
resolvectl status

En RHEL/CentOS:

cat /etc/resolv.conf
nmcli dev show | grep DNS

Conclusión

El uso de Ansible para configurar DNS proporciona una solución centralizada, auditable y repetible. Esto minimiza errores manuales y asegura uniformidad en los entornos heterogéneos. Adaptar estos playbooks a tus necesidades específicas (por ejemplo, agregar búsqueda de dominios o múltiples interfaces) es sencillo gracias a la modularidad de Ansible y las plantillas Jinja2.

Binario 0
Resumen de privacidad

Esta web utiliza cookies para que podamos ofrecerte la mejor experiencia de usuario posible. La información de las cookies se almacena en tu navegador y realiza funciones tales como reconocerte cuando vuelves a nuestra web o ayudar a nuestro equipo a comprender qué secciones de la web encuentras más interesantes y útiles.