El misterioso caso del «hosts» fantasma
Hace algún tiempo tuve un problema con Windows XP en mi trabajo. QuerÃa probar un sitio web que estaba en fase de desarrollo y era imprescindible que mi ordenador resolviera un determinado nombre de dominio con la IP del servidor web de desarrollo, y no con la del servidor real donde más tarde se alojarÃa el sitio, y que era por cierto la que devolvÃa el servidor DNS de la empresa. Por supuesto fui a modificar el fichero que sirve para estos menesteres c:\windows\system32\drivers\etc\hosts. Supuestamente al asociar la IP del servidor de desarrollo con el nombre del dominio en mi fichero hosts, mi equipo no preguntarÃa al servidor DNS cual era la IP a la que tenÃa que conectarse, sino que se conectarÃa directamente con el servidor de desarrollo. Pero no funcionaba.
Después de buscarle explicaciones supra-terrenales al asunto y de preguntarme como era posible que algo tan simple y que habÃa hecho tantas veces ahora no funcionara, decidà que la explicación tenÃa que ser sencilla y que la iba a buscar. Aunque estuve a punto de caer en la tentación de reinstalar todo el sistema operativo, la solución universal de los informáticos ante problemas que no sabemos resolver. Lo primero fué comprobar si Windows estaba leyendo el fichero hosts como se suponÃa que debÃa hacer. Ejecuté el Filemon, puse un filtro para que aparecieran en el log únicamente las lÃneas que contuvieran la cadena «hosts», vacié con el comando «ipconfig /flushdns» la caché del cliente DNS de Windows para obligarlo a releer el fichero hosts la próxima vez que se hiciera una resolución de un nombre de dominio, e inmediatamente ejecuté «ping www.google.com» para que Windows resolviera la IP de www.google.com. Inmediatamente apareció en el Filemon el acceso al fichero hosts, el fichero se habÃa leÃdo tal y como yo esperaba, estaba ahÃ.. ¡pero en otra ruta!
Resulta que yo habÃa estado modificando el fichero en c:\windows\system32\drivers\etc\hosts y el sistema estaba leyendo un fichero en c:\windows\nsdb\hosts. Yo habrÃa jurado que el fichero hosts de Windows siempre estaba en %system%\drivers\etc, al menos nunca lo habÃa visto en otro lugar. Abrà el fichero impostor y le agregé la IP y el dominio que llevaba un buen rato intentando redirigir, y… ¡voilá! En efecto mi fichero hosts ya no estaba en c:\windows\system32\drivers\etc\ como habÃa estado siempre, sino en c:\windows\nsdb. ¿Y esto por qué? ¿Cómo sabe Windows donde encontrar este fichero si no está en una ubicación fija como yo pensaba? Abrà el Regmon y repetà los mismos que habÃa seguido antes con el Filemon: limpiar la caché de DNS, y hacer un ping para provocar una resolución de dominio. Esta vez habÃa puesto como filtro en Regmon la cadena «nsdb», que era el nombre del directorio donde estaba ahora mi fichero hosts. Si esa cadena aparecÃa en alguna lectura del registro el Regmon me lo dirÃa. La entrada de registro en la que estaba especificada la ruta del fichero hosts resultó ser:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\DataBasePath
Cambiando el valor de esta entrada de %SystemRoot%\nsdb a %SystemRoot%\drivers\etc, restablecà la ubicación original de mi fichero, y todo empezó a funcionar como yo esperaba al inicio. TodavÃa me pregunto por que razón Microsoft decidió que el fichero hosts de Windows debÃa ser «movible». Lo único que se me ocurre es que un administrador de red podrÃa usarlo para que varios equipos compartan el mismo fichero de hosts a través de una carpeta compartida de red, y de esta forma centralizar la configuración. Aún asà no me parece una solución elegante. Esta «flexibilidad» de Windows no creo que sea muy utilizada beneficiosamente, sin embargo es una técnica empleada por algún que otro malware para pasar desapercibido. De hecho luego comprobé que mi fichero hosts habÃa sido cambiado de lugar por un adware con el que se habÃa infectado el equipo tiempo atrás. Siempre habÃa tenido la costumbre de revisar mi fichero de hosts periódicamente, porque suele ser modificado por muchos malwares para impedir el acceso a las páginas de antivirus y herramientas de seguridad, redireccionando los nombres de dominio generalmente hacia 127.0.0.1, o a cualquier otro lugar. ¡Pero siempre miraba en %system%\drivers\etc\hosts! Asà que ya sabeÃs….
PS: Siempre me habÃa gustado la decisión de Microsoft de imitar a Unix -y familia- en la configuración de los hosts, con un simple archivo de texto plano. Pero terminaron haciéndolo a la «Redmond’s way».