Truco rápido y sucio para simular un DNS con vistas

per Victor Carceler darrera modificació 2021-01-07T11:34:23+02:00

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:

  1. En nuestra LAN hay un servidor web, 192.168.0.5 con virtual servers para iespuigcastellar.xeill.net y www.xeill.net entre otros.
  2. Nuestro router que tiene una IP externa tal que 82.151.203.129 tiene dirigido el puerto 80 al anterior servidor web
  3. Un DNS en internet, hace corresponder los anteriores nombres DNS con la anterior IP
  4. 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.