Icono del sitio Binario 0

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

Salir de la versión móvil