# Configuración manual de servidores DNS en sistemas Linux sin systemd-resolved

- Link: https://binariocero.com/linux/configuracion-manual-de-servidores-dns-en-sistemas-linux-sin-systemd-resolved
- Published: 2025-07-27T10:57:54+02:00
- Author: Juan José Fernández Durán

![Loading](https://binariocero.com/wp-content/plugins/page-views-count/ajax-loader-
2x.gif)

En entornos Linux modernos, especialmente aquellos basados en **systemd**, el servicio`
systemd-resolved` gestiona la resolución de nombres mediante mecanismos dinámicos.
Sin embargo, en algunos escenarios como servidores minimalistas, contenedores o 
entornos personalizados, puede ser necesario **desactivar este servicio** y establecer
una configuración DNS estática mediante el archivo tradicional `/etc/resolv.conf`.

El script `configurar_dns_resolv.sh` automatiza esta tarea de forma segura y controlada.

## Objetivo

Este script tiene como finalidad:

 * **Deshabilitar `systemd-resolved`**, si está activo.
 * **Eliminar el enlace simbólico** `/etc/resolv.conf` creado por dicho servicio.
 * **Escribir un nuevo archivo `/etc/resolv.conf`** con una lista definida de servidores
   DNS personalizados.
 * **Establecer los permisos correctos** sobre el archivo.

## Código del script

    ```wp-block-preformatted
    #!/bin/bash# Lista de servidores DNS (puedes modificar estas direcciones)DNS_SERVERS=("8.8.8.8" "1.1.1.1")# Desactivar y detener systemd-resolved si está en usoif systemctl is-active --quiet systemd-resolved; then  echo "Deteniendo y deshabilitando systemd-resolved..."  systemctl stop systemd-resolved  systemctl disable systemd-resolvedfi# Eliminar symlink si existeif [ -L /etc/resolv.conf ]; then  echo "Eliminando enlace simbólico /etc/resolv.conf"  rm -f /etc/resolv.conffi# Crear nuevo archivo resolv.confecho "Configurando /etc/resolv.conf con los DNS especificados..."> /etc/resolv.conf  # Vacía el archivofor dns in "${DNS_SERVERS[@]}"; do  echo "nameserver $dns" >> /etc/resolv.confdonechmod 644 /etc/resolv.conf# Mostrar el resultadoecho "Contenido actual de /etc/resolv.conf:"cat /etc/resolv.conf
    ```

## Explicación técnica

### 1. **Lista de servidores DNS**

    ```wp-block-preformatted
    DNS_SERVERS=("8.8.8.8" "1.1.1.1")
    ```

Define los servidores DNS a utilizar. Puedes sustituir estas IPs por otras como 
OpenDNS (`208.67.222.222`), Quad9, Cloudflare, o servidores internos.

### 2. **Gestión de `systemd-resolved`**

    ```wp-block-preformatted
    systemctl stop systemd-resolvedsystemctl disable systemd-resolved
    ```

Se detiene y deshabilita el servicio que, en muchas distribuciones, gestiona `/etc/
resolv.conf` mediante un enlace simbólico al archivo `/run/systemd/resolve/stub-
resolv.conf`.

### 3. **Eliminación del symlink**

    ```wp-block-preformatted
    rm -f /etc/resolv.conf
    ```

Permite reemplazar el archivo simbólico con un archivo plano editable.

### 4. **Generación de nuevo resolv.conf**

    ```wp-block-preformatted
    echo "nameserver $dns" >> /etc/resolv.conf
    ```

Se escribe cada servidor DNS en el nuevo archivo, uno por línea. Se asegura un formato
válido para la resolución de nombres.

### 5. **Permisos**

    ```wp-block-preformatted
    chmod 644 /etc/resolv.conf
    ```

Otorga permisos de lectura para todos y escritura solo para el propietario (root),
tal como se espera para archivos de configuración del sistema.

## Ventajas de este enfoque

 * **Control total sobre los DNS utilizados**, sin depender de servicios dinámicos.
 * **Ideal para entornos cerrados o minimalistas** (como contenedores o servidores
   sin NetworkManager).
 * **Fácil de adaptar y automatizar**, incluso en scripts de provisión o cloud-init.

## Consideraciones

 * Algunos sistemas pueden volver a generar `/etc/resolv.conf` tras reinicios si
   usan `NetworkManager`, `dhclient` o `netplan`. En estos casos se recomienda:
    - Añadir el archivo a una lista de exclusión.
    - Configurar los servicios para no sobrescribirlo.
 * Este script **requiere privilegios de root** para modificar archivos del sistema
   y gestionar servicios.

## Ejecución

Para ejecutar el script:

    ```wp-block-preformatted
    sudo bash configurar_dns_resolv.sh
    ```

## Conclusión

El script `configurar_dns_resolv.sh` es una solución sencilla, clara y eficaz para
quienes necesiten una **resolución DNS estática y persistente** sin depender de `
systemd-resolved`. Es especialmente útil para administradores de sistemas, profesionales
de ciberseguridad o entornos donde se requiere un mayor control sobre la red.
