Truco rápido y sucio para simular un DNS con vistas
El problema: Tenemos un DNS que resuelve un nombre a una IP. Pero en ocasiones nos interesa que ese mismo nombre se resuelva a otra IP. La cuestión de si damos la IP uno o la IP dos para el mismo nombre depende de desde dónde nos han preguntado la IP del nombre.
Por si alguien se ha perdido, este es un problema muy típico. Por ejemplo, tenemos un servidor web en nuestra LAN y existe un nombre DNS en internet que se resuelve hacia la IP externa de nuestro router (que tiene el puerto 80 dirigido a la IP interna de nuestro servidor web). Todo funciona bien hasta que desde nuestra LAN intentamos acceder a nuestra web. Si no utilizamos las vistas el nombre DNS se resuelve hacia la IP externa del router, lo que hace que desde nuestra LAN salgamos por el router para volver a entrar, una tonteria cuando podríamos haber ido directamente a la IP (local) del servidor web. En ocasiones este problema es más grave que una simple pérdida de tiempo, porque por ejemplo, con los routers CISCO que instala la XTEC en los centros educativos esto no es posible. Así que hay que conseguir que el dichoso nombre DNS desde nuestra LAN se resuelva directamente a la IP del servidor web.
Para esto se utilizan las vistas de Bind, por ejemplo, se puede leer un interesante artículo sobre el tema.
Lo que aquí voy a contar no utiliza el DNS, es sólo un apaño para resolver un problema parecido que nos ha aparecido en la XEiLL.
El problema es el siguiente:
- En nuestra LAN hay un servidor web,
192.168.0.5
con virtual servers paraiespuigcastellar.xeill.net
ywww.xeill.net
entre otros. - Nuestro router que tiene una IP externa tal que
82.151.203.129
tiene dirigido el puerto 80 al anterior servidor web - Un DNS en internet, hace corresponder los anteriores nombres DNS con la anterior IP
- Una máquina de nuestro centro,
Hobbiton
matiene un DNS raíz para el dominio.xeill.net
en la XEiLL (red inalámbrica educativa de libre acceso).
Problema: Los clientes inalámbricos de nuestro nodo pueden configurar el proxy y navegar por la web, pero cuando intentan navegar por iespuigcastellar.xeill.net
y/o www.xeill.net
no pueden.
No es posible cambiar el DNS de Hobbiton para que esos dominios se resuelvan a la IP 192.168.0.5
porque Hobbiton sabe como alcanzarla, pero el resto de nodos de la XEiLL no.
Así que podemos utilizar los ficheros /etc/host.conf
y /etc/hosts
de Hobbiton, para hacer que Hobbiton vaya a la IP que nos interesa cuando le pregunten por los dominos, mientras por el DNS contesta con otra IP al mismo nombre DNS.
Fichero /etc/host.conf
order hosts,bind
multi on
La opción que nos interesa es order hosts,bind
que le indica a Hobbiton que para obtener la IP de un determinado nombre DNS en primer lugar consulta el fichero /etc/hosts
y si allí no encuentra lo que busca entonces utiliza el servicio DNS.
En el fichero hosts
símplemente añadimos una entrada para que los nombres que nos interesan se resuelvan a la IP que nos interesa, esto es:
127.0.0.1 localhost
192.168.0.5 iespuigcastellar.xeill.net www.xeill.net
Reiniciamos el proxy Squid (que se está ejecutando en Hobbiton) y ya está. Ahora, cuando al proxy le pedimos iespuigcastellar.xeill.net
y/o www.xeill.net
acabamos viendo la web que nos interesa, y sin embargo, cuando a nuestro DNS le preguntan la IP de esos dominios contesta con lo que toca, que es otra IP.