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

Configuración Automatizada de DNS en Linux con Ansible

Loading

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.

You may also like...