Tuneliza datos IPv4 a través de servidores DNS para evadir las restricciones del firewall y proporcionar acceso de red encubierto para pruebas de penetración.
Este es un software que te permite tunelizar datos IPv4 a través de un servidor DNS. Esto puede ser útil en diferentes situaciones donde el acceso a internet está bloqueado por un firewall, pero las consultas DNS están permitidas.
Para compilar iodine necesitas meson.
Ejecuta los siguientes comandos para compilar dentro del directorio build:
meson setup build
cd build
ninja
Para compilar y ejecutar las pruebas necesitas la librería check. Inícialas
ejecutando ninja test dentro del directorio de compilación.
¡Pruébalo dentro de tu propia LAN! Sigue estos sencillos pasos:
./iodined -f 10.0.0.1 test.com.
Si ya usas la red 10.0.0.0, usa otra red interna como
172.16.0.0../iodine -f -r 192.168.0.1 test.com.
Reemplaza 192.168.0.1 con la dirección IP de tu servidor.10.0.0.2 y el servidor tiene 10.0.0.1.Para usarlo realmente a través de un servidor de nombres retransmisor, consulta más abajo.
Nota: el servidor y el cliente deben hablar exactamente el mismo protocolo. En la mayoría de los casos, esto significa ejecutar la misma versión de iodine. Desafortunadamente, implementar compatibilidad de protocolo hacia atrás y hacia adelante normalmente no es factible.
Para usar este túnel, necesitas control sobre un dominio real (como mydomain.com),
y un servidor con una dirección IP pública para ejecutar iodined. Si este servidor
ya ejecuta un programa DNS, cambia su puerto de escucha y luego usa la opción -b de iodined
para permitir que iodined reenvíe las solicitudes DNS. (Ten en cuenta que este procedimiento
no se recomienda en entornos de producción, porque el reenvío DNS de iodined
no es completamente transparente; por ejemplo, las transferencias de zona no funcionarán).
Alternativamente, puedes reenviar el subdominio desde tu servidor DNS a iodined,
que entonces debe ejecutarse en un puerto diferente (-p).
Luego, delega un subdominio (digamos, t1.mydomain.com) al servidor iodined.
Si usas BIND para tu dominio, añade dos líneas como estas al archivo de zona:
t1 IN NS t1ns.mydomain.com. ; note the dot!
t1ns IN A 10.15.213.99
La línea NS es todo lo que se necesita para enrutar las consultas del subdominio t1
al servidor t1ns. Usamos un nombre corto para el subdominio, para mantener tanto
espacio como sea posible disponible para el tráfico de datos. Al final de la línea NS
está el nombre de tu servidor iodined. Puede ser cualquier nombre, apuntando a cualquier lugar,
pero en este caso es fácil mantenerlo en el mismo archivo de zona. Debe ser un nombre
(no una dirección IP), y ese nombre en sí mismo debe tener un registro A
(no un CNAME).
Si tu servidor iodined tiene una IP dinámica, usa un proveedor de DNS dinámico. Simplemente
apunta la línea NS a él, y omite la línea A:
t1 IN NS myname.mydyndnsprovider.com. ; note the dot!
Luego recarga o reinicia tu programa de servidor de nombres. Ahora cualquier consulta DNS para
dominios que terminen en t1.mydomain.com se enviará a tu servidor iodined.
Finalmente inicia iodined en tu servidor. El primer argumento es la dirección IP
dentro del túnel, que puede ser de cualquier rango que aún no uses (por
ejemplo 192.168.99.1), y el segundo argumento es el dominio asignado (en este
caso t1.mydomain.com). Usar la opción -f mantendrá iodined ejecutándose en
primer plano, lo cual ayuda al probar. iodined abrirá una interfaz virtual
("tun device"), y también comenzará a escuchar consultas DNS en el puerto UDP 53.
Introduce una contraseña en la línea de comandos (-P pass) o después de que el servidor haya
iniciado. Ahora todo está listo para el cliente.
Si existe la posibilidad de que uses un túnel iodine desde entornos inesperados,
inicia iodined con una opción -c.
La línea de comandos resultante en esta situación de ejemplo:
./iodined -f -c -P secretpassword 192.168.99.1 t1.mydomain.com
Toda la configuración está hecha, solo inicia iodine. Toma uno o dos argumentos, el
primero es el servidor DNS retransmisor local (opcional) y el segundo es el dominio
que usaste (t1.mydomain.com). Si no especificas el primer argumento, se consultará
la configuración DNS actual del sistema.
Si las consultas DNS están permitidas a cualquier computadora, puedes dar directamente la dirección
del servidor iodined como primer argumento (en el ejemplo: t1ns.mydomain.com o
10.15.213.99). En ese caso, también puede ocurrir que cualquier tráfico esté permitido
al puerto DNS (53 UDP) de cualquier computadora. Iodine detectará esto, y cambiará
a tunelización UDP cruda si es posible. Para forzar la tunelización DNS en cualquier caso, usa la
opción -r (especialmente útil al probar dentro de tu propia red).
La interfaz del túnel del cliente obtendrá una IP cercana a la del servidor (en este
caso 192.168.99.2 o .3 etc.) y una MTU adecuada. Introduce la misma contraseña que
en el servidor, ya sea como opción de línea de comandos o después de que el cliente haya iniciado.
Usar la opción -f mantendrá el cliente iodine ejecutándose en primer plano.
La línea de comandos resultante en esta situación de ejemplo, añadiendo -r fuerza la tunelización DNS incluso si la tunelización UDP cruda fuera posible:
./iodine -f -P secretpassword t1.mydomain.com
Desde cualquiera de los lados, ahora deberías poder hacer ping a la dirección IP en el otro
extremo del túnel. En este caso, ping 192.168.99.1 desde el cliente iodine, y
192.168.99.2 desde el servidor iodine.
Los datos dentro del túnel son solo IPv4.
El servidor escucha tanto IPv4 como IPv6 para solicitudes entrantes por defecto.
Usa las opciones -4 o -6 para escuchar solo en un protocolo. Se intentará el modo crudo
en el mismo protocolo que se usó para el inicio de sesión.
El cliente puede usar servidores de nombres IPv4 o IPv6 para conectarse a iodined. Los servidores de nombres
retransmisores traducirán entre protocolos automáticamente si es necesario. Usa
las opciones -4 o -6 para forzar al cliente a usar una versión de IP específica para sus consultas
DNS.
Si tu servidor está escuchando en IPv6 y es accesible, añade un registro AAAA para él en tu configuración DNS. Extender el ejemplo anterior se vería así:
t1 IN NS t1ns.mydomain.com. ; note the dot!
t1ns IN A 10.15.213.99
t1ns IN AAAA 2001:db8::1001:99
Es posible enrutar todo el tráfico a través del túnel DNS. Para hacer esto, primero añade una ruta de host al servidor de nombres usado por iodine sobre la interfaz cableada/inalámbrica con la puerta de enlace predeterminada como puerta de enlace. Luego reemplaza la puerta de enlace predeterminada con la dirección IP del servidor iodined dentro del túnel DNS, y configura el servidor para hacer NAT.
Sin embargo, ten en cuenta que el tráfico de datos tunelizado no está cifrado en absoluto, y puede ser leído y modificado por terceros con relativa facilidad. Para máxima seguridad, ejecuta una VPN a través del túnel DNS (=doble tunelización), o usa acceso secure shell (SSH), posiblemente con reenvío de puertos. Este último también se puede usar para navegar por la web, cuando ejecutas un proxy web (por ejemplo Privoxy) en tu servidor.
El servidor iodined responde a las solicitudes NS enviadas para subdominios del dominio
del túnel. Si tu subdominio iodined es t1.mydomain.com, envía una solicitud NS para
foo123.t1.mydomain.com para ver si la delegación funciona.
dig es una buena herramienta para esto:
% dig -t NS foo123.t1.mydomain.com
ns.io.citronna.de.