Configuración Manual de DNS en RHEL mediante Script Bash

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 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

#!/bin/bash

# Lista de servidores DNS (modifica según necesidad)
DNS_SERVERS=("172.29.63.31" "172.29.63.30")

# Comprobación de privilegios
if [ "$(id -u)" -ne 0 ]; then
echo "Este script debe ejecutarse como root." >&2
exit 1
fi

# Deshabilitar la gestión DNS en NetworkManager
echo "Deshabilitando gestión DNS de NetworkManager..."
mkdir -p /etc/NetworkManager/conf.d
echo -e "[main]\ndns=none" > /etc/NetworkManager/conf.d/dns.conf

# Crear resolv.conf con los DNS especificados
echo "Creando /etc/resolv.conf..."
> /etc/resolv.conf
for dns in "${DNS_SERVERS[@]}"; do
echo "nameserver $dns" >> /etc/resolv.conf
done
chmod 644 /etc/resolv.conf

# Reiniciar NetworkManager
echo "Reiniciando NetworkManager..."
systemctl restart NetworkManager

# Mostrar resultado
echo "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:

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:

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

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:

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:

> /etc/resolv.conf
for dns in "${DNS_SERVERS[@]}"; do
echo "nameserver $dns" >> /etc/resolv.conf
done
chmod 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:

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:

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
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.