dns2tcp: entunelando sobre el protocolo de DNS
Por Luis Peralta
Lo que voy a contar no es nada nuevo. Lo que sí que es nuevo para mí es lo sencillo que se ha vuelto montar un túnel TCP sobre el protocolo del DNS a día de hoy. Si no recuerdo mal, fue el Kaminsky el primero que hizo un PoC (luego llegando a hacer streaming de audio y vídeo). Alex, en su día, también se curró un buen tutorial. La utilidad de estos sistemas no es otra que atravesar un cortafuegos para conectarnos a internet en un caso muy común: el del portal cautivo en los puntos de acceso wifi, como La Fonera u otros tantos típicos en hoteles y aeropuertos.
Lo que yo he puesto en marcha ha sido el dns2tcp que, como su propio nombre indica, nos permite encapsular una conexión tcp bajo el protocolo DNS.
En los ejemplos: micro
es un Linux en mi casa que hace de servidor, elrojo
es un Linux detrás de un portal cautivo.
La configuración, incluso con IP dinámica en mi caso, es bastante sencilla. Más teniendo en cuenta que intrepid tiene los paquetes ya hechos.
En el servidor:
micro$ sudo apt-get install dns2tcp
micro$ cat /etc/dns2tcpd.conf
listen = 0.0.0.0
port = 5353
# If you change this value, also change the USER variable in /etc/default/dns2tcpd
user = nobody
chroot = /tmp
domain = tunnels.ziritione.org
ressources = ssh:127.0.0.1:22
`
Donde tunnels.ziritione.org
será la zona que utilizaremos para nuestro
propósito. El porqué de poner el servidor en el puerto 5353
lo contaré más
adelante. En nuestro servidor DNS además tendremos que añadir la zona con el
mismo nombre:
...
www 86400 IN CNAME main.ziritione.org.
tunnels 86400 IN NS magallanes.mine.nu.
...
De nuevo, en mi caso, magallanes.mine.nu
es un host mapeado contra la IP
dinámica de mi casa gracias a
DynDNS (esto
lo hace el router ADSL). En ese mismo router está redigirigo el puerto 53 (el
del DNS) al 5353 de micro
, que es donde tenemos el tcp2dnsd
.
Ahora, en cualquier otra máquina de internet podemos listas los resources
que hemos configurado:
$ dns2tcpc -z tunnels.ziritione.org 192.168.0.10
Available connection(s) :
ssh
`
Y ahora montamos el proxy para que redirija el tráfico que le llegue al puerto
2222 al resource
ssh y lanzamos un ssh contra él que nos monte un proxy
SOCKS en el puerto 8888:
elrojo$ dns2tcpc -r ssh -l 2222 -z tunnels.ziritione.org 192.168.0.10 &
Listenning on port : 2222
elrojo$ ssh -D 8888 -p 2222 localhost
Password:
micro$
`
Si ahora configuramos un firefox en local y le decimos que hay un proxy SOCKS
en localhost
en el puerto 8888 haremos que nuestro tráfico web funcione a
través de micro
, la máquina que tenemos en casa.