🤯 ¡Uff, qué frustración! Has configurado tus servidores DNS preferidos en /etc/resolv.conf
en tu instalación de Kali Linux, reinicias el sistema, y… ¡sorpresa! El archivo ha vuelto a su estado original, o peor aún, ha sido borrado o sobrescrito con configuraciones no deseadas. Si esta escena te resulta familiar, no estás solo. Es un problema recurrente para muchos usuarios, especialmente aquellos que buscan un control preciso sobre su resolución de nombres o necesitan operar en entornos específicos con servidores DNS personalizados. Pero respira hondo, porque hoy vamos a explorar la solución definitiva para este fastidioso inconveniente, permitiéndote tomar las riendas de tu configuración de red de una vez por todas.
Para empezar, comprendamos qué es resolv.conf
. Este pequeño pero poderoso archivo es el corazón del subsistema de resolución de nombres de dominio (DNS) de tu sistema operativo. Contiene la dirección IP de los servidores DNS que tu computadora utilizará para traducir nombres de dominio legibles por humanos (como „google.com”) en direcciones IP numéricas (como „172.217.160.142”). Sin un resolv.conf
bien configurado, navegar por la web, acceder a recursos de red o incluso actualizar tu sistema se vuelve una tarea imposible o muy lenta. Su persistencia es, por tanto, crucial.
🤔 ¿Por Qué Desaparece? Entendiendo la Raíz del Problema
La razón detrás de la volatilidad del resolv.conf
en Kali Linux (y en muchas otras distribuciones basadas en Debian) no es un capricho del sistema, sino el resultado de cómo diversos servicios de gestión de red interactúan con él. Principalmente, los culpables suelen ser:
- NetworkManager: Es el demonio de gestión de red predeterminado en la mayoría de las distribuciones modernas. Cuando se conecta a una red (ya sea por DHCP o de forma manual), NetworkManager intenta configurar los servidores DNS automáticamente, sobrescribiendo o gestionando el contenido de
resolv.conf
. Su objetivo es la comodidad, pero a veces interfiere con la personalización. resolvconf
(el paquete): No confundir con el archivoresolv.conf
. Este es un paquete de software cuyo propósito es gestionar y unificar la configuración DNS de múltiples fuentes (como DHCP, VPN, configuraciones manuales) y luego actualizar dinámicamente el archivoresolv.conf
. Si tienes varias fuentes compitiendo,resolvconf
intentará resolverlo, lo que a menudo significa que tus cambios manuales no persisten.systemd-resolved
: En sistemas que utilizansystemd
(como Kali Linux),systemd-resolved
es otro servicio que puede tomar el control de la resolución DNS. A menudo,/etc/resolv.conf
es un enlace simbólico a un archivo gestionado porsystemd-resolved
, como/run/systemd/resolve/stub-resolv.conf
. Esto significa que editarresolv.conf
directamente no funcionará, ya que estás editando un enlace, no el archivo real gestionado por el servicio.- Clientes DHCP: Cuando tu sistema obtiene una dirección IP de un servidor DHCP, este último también suele proporcionar la dirección de los servidores DNS. El cliente DHCP (como
dhclient
) recibe esta información y la pasa a NetworkManager,resolvconf
osystemd-resolved
para que la apliquen aresolv.conf
.
Comprender estos actores es el primer paso para dominar la situación. No es que Kali quiera borrar tus configuraciones, sino que existen múltiples mecanismos automatizados que tienen la „autoridad” sobre ese archivo.
⏳ Soluciones Temporales (y Por Qué No Son Definitivas)
Antes de sumergirnos en los métodos robustos, es posible que ya hayas probado algunas soluciones rápidas que, lamentablemente, resultan ser solo parches temporales o problemáticos a largo plazo:
- Edición Manual Directa: Simplemente abriendo
/etc/resolv.conf
con un editor de texto y añadiendo tus líneasnameserver
. Esto funciona hasta el siguiente reinicio, o incluso hasta que NetworkManager decida volver a configurarlo. - Permisos Inmutables con
chattr +i
: Utilizar el comandosudo chattr +i /etc/resolv.conf
para hacer el archivo inmutable. Esto impide que cualquier proceso (incluido NetworkManager,resolvconf
osystemd-resolved
) lo modifique o elimine. 🚨 El problema es que esta „solución” puede generar conflictos severos, ya que los gestores de red intentarán modificarlo y fallarán, lo que podría llevar a un estado inconsistente de la red o a errores inesperados. Además, si alguna vez necesitas que el sistema configure los DNS automáticamente (por ejemplo, al conectarte a una VPN), no podrá hacerlo. Por estas razones,chattr +i
rara vez es la solución recomendada.
Estas aproximaciones, aunque tentadoras por su simplicidad inicial, no abordan la raíz del problema y, en el peor de los casos, pueden complicar aún más la gestión de tu conexión. Necesitamos un enfoque que colabore con los gestores de red, no que luche contra ellos.
⚙️ La Solución Definitiva: Métodos Robustos para Controlar Tu DNS
La clave para una solución permanente reside en instruir a los servicios que gestionan resolv.conf
para que se comporten como deseamos. Aquí te presentamos varias estrategias, desde las más comunes hasta las más avanzadas, adaptadas a diferentes escenarios.
Método 1: Configurando NetworkManager – El Enfoque Más Común y Recomendado
NetworkManager es, en la mayoría de los casos, el responsable de tu conectividad y, por tanto, el principal actor a configurar. Podemos indicarle que use servidores DNS específicos o que no gestione resolv.conf
en absoluto.
Opción A: Configurar DNS Estáticos por Conexión (vía nmcli
o GUI)
Esta es la forma más limpia y recomendada si quieres que tus DNS personalizados se apliquen a una conexión de red específica.
- Identifica tu conexión: Abre una terminal y ejecuta
nmcli connection show
para ver tus conexiones activas (por ejemplo, „Wired connection 1” o „MiWiFi”). - Modifica los servidores DNS:
- Para IPv4:
sudo nmcli connection modify "Nombre de tu conexión" ipv4.dns "8.8.8.8,8.8.4.4"
(reemplaza con tus DNS). - Para IPv6 (opcional):
sudo nmcli connection modify "Nombre de tu conexión" ipv6.dns "2001:4860:4860::8888,2001:4860:4860::8844"
. - Para que no obtenga DNS vía DHCP:
sudo nmcli connection modify "Nombre de tu conexión" ipv4.ignore-auto-dns yes
(oipv6.ignore-auto-dns yes
). - Si prefieres que NetworkManager no configure ningún DNS para esta conexión y confíe en la configuración manual de
resolv.conf
(aunque esto puede ser más complicado):sudo nmcli connection modify "Nombre de tu conexión" ipv4.dns-method manual
(onone
, dependiendo de la versión).
- Para IPv4:
- Reinicia la conexión:
sudo nmcli connection down "Nombre de tu conexión" && sudo nmcli connection up "Nombre de tu conexión"
.
Este método es excelente porque tus configuraciones de DNS quedan asociadas a una red específica, y NetworkManager las respetará y aplicará.
Opción B: Deshabilitar la Gestión de DNS por NetworkManager Globalmente
Si deseas que NetworkManager no toque resolv.conf
bajo ninguna circunstancia y planeas gestionarlo manualmente o con otro servicio, puedes configurarlo globalmente. ¡Precaución! Esto significa que NetworkManager no establecerá DNS para ninguna conexión, lo que podría requerir que configures DNS manualmente para todas las redes.
- Edita el archivo de configuración principal: Abre
/etc/NetworkManager/NetworkManager.conf
con privilegios de superusuario.
sudo nano /etc/NetworkManager/NetworkManager.conf
- Añade o modifica la sección
[main]
: Busca la sección[main]
. Si no existe, créala. Luego, añade o modifica la líneadns=none
orc-manager=unmanaged
.[main] plugins=ifupdown,keyfile dns=none # rc-manager=unmanaged # Otra opción en versiones anteriores, o si 'dns=none' no funciona como esperas.
La opción
dns=none
instruye a NetworkManager para que no toque/etc/resolv.conf
. - Guarda y cierra el archivo.
- Reinicia NetworkManager:
sudo systemctl restart NetworkManager
Una vez reiniciado, NetworkManager ya no debería gestionarresolv.conf
. Ahora puedes editar/etc/resolv.conf
manualmente y tus cambios deberían persistir.
🚀 Método 2: Gestionando systemd-resolved
– Cuando Systemd Toma el Mando
Si tu /etc/resolv.conf
es un enlace simbólico a un archivo como /run/systemd/resolve/stub-resolv.conf
, entonces systemd-resolved
es el que manda. En este caso, NetworkManager puede estar configurando systemd-resolved
, o este último está actuando por su cuenta.
Opción A: Configurar systemd-resolved
Directamente
Puedes establecer los servidores DNS directamente en la configuración de systemd-resolved
.
- Edita el archivo de configuración:
sudo nano /etc/systemd/resolved.conf
- Añade o modifica las líneas
DNS
yFallbackDNS
:[Resolve] DNS=8.8.8.8 8.8.4.4 #FallbackDNS=1.1.1.1 9.9.9.9 #Domains=~. #DNSSEC=no #DNSOverTLS=no #LLMNR=no #MulticastDNS=no #Cache=yes #DNSStubListener=yes #ReadEtcHosts=yes
DNS=
define tus servidores DNS primarios.FallbackDNS=
se utiliza si los primarios no responden. - Guarda y cierra el archivo.
- Reinicia el servicio
systemd-resolved
:
sudo systemctl restart systemd-resolved
Tus DNS deberían ser persistentes ahora. Verifica conresolvectl status
.
Opción B: Desactivar y Deshabilitar systemd-resolved
(Enfoque Radical)
Si prefieres que NetworkManager u otro servicio gestionen el DNS sin la intervención de systemd-resolved
, puedes deshabilitarlo.
- Detén y deshabilita el servicio:
sudo systemctl stop systemd-resolved
sudo systemctl disable systemd-resolved
- Elimina el enlace simbólico y crea un archivo nuevo
resolv.conf
:
sudo rm /etc/resolv.conf
sudo nano /etc/resolv.conf
Añade tus servidores DNS:nameserver 8.8.8.8 nameserver 8.8.4.4
- Asegúrate de que tus cambios persistan: Ahora que
systemd-resolved
está fuera de juego, NetworkManager u otros clientes DHCP podrían intentar recrear el archivo. Es posible que tengas que configurar NetworkManager (Método 1, Opción B) para que no gestione el DNS, o usardhclient.conf
(Método 4) para evitar la sobrescritura.
💾 Método 3: El Antiguo resolvconf
– Para Entornos Específicos
Si estás en un entorno donde resolvconf
(el paquete, no systemd-resolved
) es el principal gestor de resolv.conf
, puedes configurarlo para incluir tus DNS.
- Asegúrate de que el paquete
resolvconf
esté instalado:
sudo apt install resolvconf
- Edita el archivo
head
: Este archivo se antepone al contenido generado automáticamente enresolv.conf
.
sudo nano /etc/resolvconf/resolv.conf.d/head
Añade tus servidores DNS al principio del archivo:# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8) # DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN nameserver 8.8.8.8 nameserver 8.8.4.4
Aunque el comentario diga „NO EDITAR A MANO”, el archivo
head
está diseñado precisamente para que se añadan configuraciones estáticas que persistirán. - Actualiza
resolv.conf
:
sudo resolvconf -u
Con este método, resolvconf
se encargará de que tus servidores DNS siempre aparezcan al principio de /etc/resolv.conf
, incluso si otros servicios intentan añadir los suyos.
🧑💻 Método 4: Configuración Avanzada del Cliente DHCP – Para un Control Fino
Si tu sistema obtiene la configuración de red a través de DHCP y quieres evitar que el servidor DHCP te imponga sus DNS, puedes instruir a tu cliente DHCP para que ignore los servidores DNS proporcionados o para que añada los tuyos.
Normalmente, el cliente DHCP es isc-dhcp-client
, que utiliza dhclient.conf
.
- Edita el archivo de configuración de
dhclient
:
sudo nano /etc/dhcp/dhclient.conf
- Modifica la línea
request
(para ignorar DNS) oprepend
(para añadir tus DNS):- Para ignorar DNS del DHCP: Busca la línea que comienza con
request
y eliminadomain-name-servers
de la lista.# Ejemplo: # request subnet-mask, broadcast-address, time-offset, routers, # domain-name, domain-search, host-name, # netbios-name-servers, netbios-scope, interface-mtu; # # Sería: request subnet-mask, broadcast-address, time-offset, routers, domain-name, domain-search, host-name, interface-mtu;
- Para anteponer tus propios DNS: Añade la línea
prepend domain-name-servers 8.8.8.8, 8.8.4.4;
al principio del archivo (o en la sección de tu interfaz).prepend domain-name-servers 8.8.8.8, 8.8.4.4;
- Para ignorar DNS del DHCP: Busca la línea que comienza con
- Guarda y cierra el archivo.
- Reinicia el servicio de red: Esto puede variar. Si usas NetworkManager, reinícialo. Si no, reinicia el cliente DHCP o el sistema.
sudo systemctl restart NetworkManager
osudo systemctl restart isc-dhcp-client
(si está instalado como servicio).
✅ ¿Cuál Método Elegir? Una Guía Práctica
La elección del método depende de tu configuración y preferencias:
- La mayoría de los usuarios de Kali Linux: Empieza por el Método 1: Configurando NetworkManager (Opción A). Es el más integrado y menos propenso a efectos secundarios, ya que respeta la forma en que el sistema gestiona las redes.
- Si
/etc/resolv.conf
es un enlace simbólico a/run/systemd/resolve/...
: Opta por el Método 2: Gestionandosystemd-resolved
(Opción A). - Si NetworkManager no está presente o lo deshabilitaste, y el paquete
resolvconf
está activo: Usa el Método 3: El Antiguoresolvconf
. - Para control granular en entornos DHCP específicos: El Método 4: Configuración Avanzada del Cliente DHCP es para usuarios que saben lo que hacen y quieren un control muy específico sobre cómo se obtienen los DNS del DHCP.
✨ Verificación: Asegurándote de Que Tus Cambios Perduren
Después de aplicar cualquiera de las soluciones, es fundamental verificar que tus cambios se han mantenido tras un reinicio del sistema. Aquí te dejo algunas maneras de hacerlo:
- Comprobar el contenido de
resolv.conf
:
cat /etc/resolv.conf
Deberías ver tus servidores DNS preferidos en el archivo. - Consultar NetworkManager:
nmcli device show | grep DNS
Esto te mostrará los servidores DNS que NetworkManager está utilizando para las interfaces activas. - Verificar
systemd-resolved
:
resolvectl status
Sisystemd-resolved
está activo, este comando te dará una visión detallada de los servidores DNS configurados. - Prueba de resolución DNS:
dig google.com @8.8.8.8
(para probar un servidor específico)
ping google.com
(para una prueba general de resolución)
Si tus servicios de DNS personalizados están funcionando, estas pruebas deberían ser exitosas. - ¡Reinicia tu sistema! Esta es la prueba de fuego definitiva. Si después de un reinicio los cambios persisten, ¡habrás triunfado!
⚠️ Consideraciones Importantes y Buenas Prácticas
- Seguridad y Privacidad: Elegir servidores DNS de confianza es crucial. Google DNS (8.8.8.8, 8.8.4.4) o Cloudflare (1.1.1.1, 1.0.0.1) son opciones populares, pero puedes optar por servicios más orientados a la privacidad o los de tu propio proveedor.
- Impacto en VPNs y Tor: Si utilizas VPNs o Tor, estas herramientas a menudo configuran sus propios DNS para evitar fugas. Asegúrate de que tus configuraciones persistentes no interfieran con la operación normal de estas herramientas, o configura excepciones específicas.
- Copia de Seguridad: Antes de realizar cambios importantes en archivos de configuración del sistema, siempre haz una copia de seguridad. Por ejemplo:
sudo cp /etc/resolv.conf /etc/resolv.conf.bak
sudo cp /etc/NetworkManager/NetworkManager.conf /etc/NetworkManager/NetworkManager.conf.bak
Esto te permitirá revertir fácilmente si algo sale mal. - Entender tu Stack de Red: Kali Linux, como otras distribuciones, puede evolucionar. Es vital entender qué servicios están activos en tu sistema para gestionar la red y los DNS (
NetworkManager
,systemd-resolved
,dhclient
,resolvconf
) y cómo interactúan entre sí.
💬 Opinión Personal Basada en la Experiencia de la Comunidad
„A lo largo de los años, he visto incontables veces cómo la frustración por la pérdida del
resolv.conf
lleva a muchos a soluciones temporales y, a menudo, perjudiciales comochattr +i
. Sin embargo, la vasta experiencia de la comunidad Linux y los desarrolladores de Kali sugiere que la inmensa mayoría de los casos se resuelven de forma limpia y efectiva mediante la correcta configuración de NetworkManager o systemd-resolved. Ignorar estos servicios en lugar de trabajar con ellos es como intentar nadar contra la corriente del río: agotador y rara vez exitoso. Una configuración inteligente dentro del marco de estos gestores no solo es más estable, sino también más segura y fácil de mantener a largo plazo, evitando conflictos inesperados y manteniendo la flexibilidad de tu sistema.”
La opción de configurar DNS específicos para cada conexión a través de NetworkManager (nmcli connection modify
) suele ser la más elegante y menos invasiva. Permite una gran flexibilidad, ya que puedes tener diferentes configuraciones DNS para tu red Wi-Fi de casa, la de un cliente o tu conexión de laboratorio, sin interferir con otras.
🎉 Conclusión: Retoma el Control de Tu Red en Kali Linux
¡Felicidades! Has llegado al final de esta guía exhaustiva y ahora posees el conocimiento necesario para dominar el enigmático comportamiento del archivo resolv.conf
en Kali Linux. No más sobrescrituras indeseadas, no más reinicios que borren tus configuraciones cruciales. Al comprender los mecanismos subyacentes y aplicar las soluciones adecuadas, no solo resolverás un problema persistente, sino que también obtendrás un control más profundo y una comprensión más clara de cómo funciona la gestión de red en tu sistema. Configurar tus servidores DNS de forma permanente te permitirá trabajar con mayor eficiencia, seguridad y tranquilidad. ¡Es hora de que tu Kali Linux haga exactamente lo que tú quieres!