Configuración de DNS en Linux sin Netplan usando 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 muchos entornos Linux, especialmente en servidores minimalistas o contenedores, no se utiliza Netplan ni gestores de red avanzados como NetworkManager. En estos casos, la configuración del sistema DNS se gestiona directamente mediante el archivo /etc/resolv.conf.

Este artículo describe cómo automatizar esta configuración mediante Ansible, utilizando un playbook que:

  1. Elimina el symlink predeterminado (si existe).
  2. Crea un nuevo archivo /etc/resolv.conf con los servidores DNS deseados.
  3. Verifica que el contenido del archivo sea el esperado.

Contexto

Sistemas como Ubuntu y Debian modernos pueden gestionar automáticamente /etc/resolv.conf mediante systemd-resolved, resolvconf o Netplan, creando un symlink hacia /run/systemd/resolve/stub-resolv.conf u otros destinos. Sin embargo, en algunos casos se necesita sobrescribirlo manualmente —por ejemplo, en entornos personalizados, chroots, contenedores o servidores donde se requiere una configuración estrictamente controlada.

Playbook de ejemplo

A continuación, se muestra un playbook funcional de Ansible que permite gestionar directamente /etc/resolv.conf sin depender de Netplan ni otras herramientas de red:

- name: Configurar DNS sin Netplan en Linux
hosts: all
become: yes
vars:
dns_servers:
- 1.1.1.1
- 8.8.8.8

tasks:
- name: Eliminar symlink de /etc/resolv.conf si existe
ansible.builtin.file:
path: /etc/resolv.conf
state: absent

- name: Crear nuevo archivo /etc/resolv.conf con DNS personalizados
ansible.builtin.copy:
dest: /etc/resolv.conf
content: |
{% for dns in dns_servers %}
nameserver {{ dns }}
{% endfor %}
mode: '0644'

- name: Verificar que /etc/resolv.conf contiene los servidores DNS esperados
ansible.builtin.command: cat /etc/resolv.conf
register: resolv_output
changed_when: false

- name: Mostrar contenido actual de /etc/resolv.conf
ansible.builtin.debug:
var: resolv_output.stdout

Detalles técnicos

Eliminación del symlink

El archivo /etc/resolv.conf puede ser un enlace simbólico gestionado por el sistema. Para sobrescribirlo correctamente, primero se elimina, sin importar si es un archivo regular o un symlink.

- name: Eliminar symlink de /etc/resolv.conf si existe
ansible.builtin.file:
path: /etc/resolv.conf
state: absent

Creación del archivo con DNS personalizados

Se construye el contenido dinámicamente desde la variable dns_servers, lo que permite reutilizar el playbook en distintos entornos con diferentes configuraciones.

- name: Crear nuevo archivo /etc/resolv.conf con DNS personalizados
ansible.builtin.copy:
dest: /etc/resolv.conf
content: |
{% for dns in dns_servers %}
nameserver {{ dns }}
{% endfor %}
mode: '0644'

Verificación y depuración

Estas tareas permiten confirmar que el archivo se ha escrito correctamente y ayudan en la depuración del despliegue.

Consideraciones finales

  • Este enfoque no es persistente si el sistema tiene servicios como systemd-resolved activos. Puede ser necesario deshabilitar dichos servicios para evitar que sobrescriban /etc/resolv.conf.
  • En entornos controlados, como contenedores o entornos sin gestores de red, este método es simple, directo y eficaz.
  • Puede complementarse con tareas adicionales para comprobar conectividad DNS o reiniciar servicios si es necesario.
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.