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