DNS Tunneling con Iodine

DNS Tunneling con Iodine

Tunel DNS con Iodine

Introducción

Aprovechando que tuve la necesidad de armarme un Tunnel DNS para pasar mi tráfico por ahí, voy a escribir un post sobre el tema.

DNS Tunneling es una técnica para transmitir datos usando queries y respuestas DNS.

El tráfico en red es visto absolutamente como tráfico de DNS (ya lo verán en unas capturas de Wireshark), por lo que esta técnica permite saltear firewalls, controles de ancho de banda (en algunos casos), entre otros.

Qué necesitamos?

Necesitamos solamente nuestra computadora, desde la cual queremos camuflar el tráfico, un servidor de salida, y en ambos instalar iodine.

Instalando Iodine

La instalación depende de la distribución linux ó sistema operativo que se use, en mi caso tengo un servidor con Debian, y mi workstation con Archlinux.

Instalación en Debian:

apt-get install iodine

Instalación en Archlinux:

pacman -Sy iodine

Iniciando el servicio

En el servidor debemos ejecutar:

iodined -c -f -P s3cr3tPassword 192.168.99.1 dns.para.camuflar.com

En el cliente, como root ejecutamos:

iodine -f -P s3cr3tPassword servidor dns.para.camuflar.com

Si todo sale bien, en unos pocos segundos eso nos creará una nueva interfaz de red (en mi caso dns0) con la cual nos podemos comunicar hacia el servidor, y todo el tráfico, tanto de entrada como salida, será enviado a través de paquetes de DNS especialmente armados para contener el tráfico.

La comunicación deberá hacerse a través de la IP configurada en iodined, en nuestro caso sería 192.168.99.1

Tunelear TODO el Tráfico de Red

Si bien la comunicación tuneleada hacia el servidor puede resultar útil, la parte más divertida de todo esto es poder sacar todo el trafico de red a través del tunel. Cómo hacemos eso?

Hay que configurar el servidor para que funcione como router y NATear la interfaz de red creada por iodined para poder hacer de gateway para nuestra computadora.

En el servidor ejecutamos:
echo 1 > /proc/sys/net/ipv4/ip_forward
/sbin/iptables -A FORWARD -i dns0 -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
/sbin/iptables -A FORWARD -i dns0 -o eth0 -j ACCEPT

Deberán reemplazar los nombres de las interfaces de red por las que correspondan según su configuración del servidor.

Con esas lineas logramos que el server funcione como gateway, y todo el tráfico que ingrese por la interfaz dns0, la NATea y sale a internet vía eth0.

En nuestro workstation ejecutamos
ip route del default
ip route add default via 192.168.99.1 dev dns0
ip route add IP_DEL_SERVIDOR via NUESTRO_GATEWAY dev eth0

Con eso estamos indicando que todo el tráfico salga por el tunel (dns0), y que el tráfico hacia nuestro servidor (en donde corre iodined), salga por la interfaz comun de internet.

Corroborando con Wireshark que todo funcione

Una vez configurado todo, podemos usar wireshark para ver el tráfico que entra y sale en nuestra interfaz de red (la que provee internet).

Dejo una captura donde se puede ver como lo único que hay son paquetes DNS ;)

wireshark_dns

Como se puede ver, Wireshark no comprende los paquetes DNS, porque no son paquetes DNS, sino que es nuestro tráfico de salida camuflado en forma de DNS.

Have fun ;)

:wq!

Related Article