# Configuración Manual de DNS en RHEL mediante Script Bash

- Link: https://binariocero.com/linux/configuracion-manual-de-dns-en-rhel-mediante-script-bash
- Published: 2025-07-26T11:04:24+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 empresariales donde se requiere un control estricto de la configuración
de red, como laboratorios de pruebas, servidores en producción o infraestructuras
que no confían en la configuración automática puede ser necesario establecer los
servidores DNS manualmente y deshabilitar la gestión automática que realiza NetworkManager.
Este artículo detalla un enfoque automatizado mediante un script Bash diseñado específicamente
para sistemas basados en **RHEL (Red Hat Enterprise Linux)** y derivados (como CentOS,
AlmaLinux o Rocky Linux).

## Objetivo del Script

El script `configurar_dns_rhel.sh` automatiza el proceso de:

 * Deshabilitar la gestión de DNS por parte de NetworkManager.
 * Configurar manualmente el archivo `/etc/resolv.conf` con una lista personalizada
   de servidores DNS.
 * Reiniciar NetworkManager para aplicar los cambios.

## Contenido del Script

    ```wp-block-preformatted
    #!/bin/bash# Lista de servidores DNS (modifica según necesidad)DNS_SERVERS=("172.29.63.31" "172.29.63.30")# Comprobación de privilegiosif [ "$(id -u)" -ne 0 ]; then  echo "Este script debe ejecutarse como root." >&2  exit 1fi# Deshabilitar la gestión DNS en NetworkManagerecho "Deshabilitando gestión DNS de NetworkManager..."mkdir -p /etc/NetworkManager/conf.decho -e "[main]\ndns=none" > /etc/NetworkManager/conf.d/dns.conf# Crear resolv.conf con los DNS especificadosecho "Creando /etc/resolv.conf..."> /etc/resolv.conffor dns in "${DNS_SERVERS[@]}"; do  echo "nameserver $dns" >> /etc/resolv.confdonechmod 644 /etc/resolv.conf# Reiniciar NetworkManagerecho "Reiniciando NetworkManager..."systemctl restart NetworkManager# Mostrar resultadoecho "Contenido final de /etc/resolv.conf:"cat /etc/resolv.conf
    ```

## Análisis Técnico Paso a Paso

### 1. **Definición de DNS**

El script comienza declarando una lista de direcciones IP que actuarán como servidores
DNS:

    ```wp-block-preformatted
    DNS_SERVERS=("172.29.63.31" "172.29.63.30")
    ```

Estas deben adaptarse al entorno de red del usuario (por ejemplo, servidores DNS
corporativos, locales, o públicos como 8.8.8.8 de Google).

### 2. **Validación de Privilegios**

Se verifica que el script se esté ejecutando como usuario **root**. Esto es obligatorio
para modificar la configuración de red y reiniciar servicios:

    ```wp-block-preformatted
    if [ "$(id -u)" -ne 0 ]; then  echo "Este script debe ejecutarse como root." >&2  exit 1fi
    ```

### 3. **Desactivar la gestión automática de DNS**

Para evitar que NetworkManager sobrescriba `/etc/resolv.conf`, se desactiva explícitamente
la gestión DNS:

    ```wp-block-preformatted
    bashCopiarEditarmkdir -p /etc/NetworkManager/conf.d
    echo -e "[main]\ndns=none" > /etc/NetworkManager/conf.d/dns.conf
    ```

Este archivo indica a NetworkManager que no debe manipular el DNS del sistema, delegando
completamente esta tarea al administrador.

### 4. **Creación manual de resolv.conf**

Se limpia el contenido de `/etc/resolv.conf` y se introducen las entradas `nameserver`
con los DNS especificados:

    ```wp-block-preformatted
    > /etc/resolv.conffor dns in "${DNS_SERVERS[@]}"; do  echo "nameserver $dns" >> /etc/resolv.confdonechmod 644 /etc/resolv.conf
    ```

Esto garantiza que el archivo contenga exactamente los servidores deseados, sin 
entradas heredadas o residuales.

### 5. **Reinicio de NetworkManager**

Para que los cambios en la configuración tomen efecto, se reinicia el servicio:

    ```wp-block-preformatted
    systemctl restart NetworkManager
    ```

Este paso es crucial para asegurarse de que NetworkManager respete la nueva directiva
de no modificar el DNS.

### 6. **Verificación final**

El contenido del archivo resultante se muestra por pantalla:

    ```wp-block-preformatted
    cat /etc/resolv.conf
    ```

Esto proporciona una confirmación visual inmediata de que la configuración se ha
aplicado correctamente.

## Conclusión

El script `configurar_dns_rhel.sh` es una herramienta eficaz para administradores
de sistemas que requieren una configuración manual y persistente de los servidores
DNS en sistemas RHEL. Automatiza una tarea propensa a errores y evita conflictos
con la gestión dinámica de NetworkManager.

Este tipo de solución es especialmente útil en entornos donde:

 * Se necesita una resolución DNS consistente.
 * Se utilizan servidores DNS internos.
 * Se desea evitar la interferencia de NetworkManager o DHCP.

## Recomendaciones Adicionales

 * Si se utiliza **`systemd-resolved`**, este script podría no ser suficiente. Asegúrate
   de que ese servicio esté deshabilitado si no se desea su uso.
 * Considera proteger `/etc/resolv.conf` contra sobrescrituras accidentales con 
   el atributo inmutable (`chattr +i`), aunque esto puede interferir con otras configuraciones
   automáticas
