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