[HowTo] Como enviar todo el tráfico de tu iPhone por un tunel SSH

 

Va una no tan obvia y que me llevó su buen rato investigar: Como enviar (y recibir también, no sean pelotudos, es tráfico bi-direccional) todo el tráfico que genera tu iPhone o iPad -o cualquier otro dispositivo que exista en el futuro y corra iOS- por un tunnel SSH para que aparezca como tráfico generado por el servidor donde corre el SSH Server en Linux. Lo que también se conoce como proxy tipo socks.

 

Ya en el pasado le he dedicado diversos artículos a esta técnica que usé y uso hasta varias veces por semana según se me va presentando cada escenario, por ejemplo:

Si no están familiarizados con las tecnologías y protocolos implicados puede que quieran ir a leer primero alguno de los artículos anteriores.

 

Configurando un tunnel SSH que puedas utilizar luego desde tu iphone o ipad para acceder a ese servicio de streaming bloqueado en tu país, ciudad o empresa o como cagarte en todos los firewalls poniendo el servicio SSH de tu servidor a escuchar en el puerto 53 TCP.

Configurando un tunnel SSH que puedas utilizar luego desde tu iphone o ipad para acceder a ese servicio de streaming bloqueado en tu país, ciudad o empresa o como cagarte en todos los firewalls poniendo el servicio SSH de tu servidor a escuchar en el puerto 53 TCP.

 

Ingredientes:

  1. Un servidor corriendo Linux en algún lado.
  2. Un web server en algún lado donde se pueda escribir un archivo. No es estrictamente necesario.
  3. Una PC con Windows o Linux que hará las veces de socks proxy y puede ser el mismo servidor que corre el Linux
  4. Putty, si la PC socks proxy corre Windows. Bajalo de acá.

 

TL:DR, iOS únicamente permite configurar un proxy que hable HTTP en modo manual y si querés uno que sea socks puro necesitás configurarlo en modo automático apuntando la URL a http://ip_o_hostname.de.tuservidor/proxy.pac

 

Donde proxy.pac tiene que contener:

function FindProxyForURL(url, host)
{ 
     return "SOCKS proxy_host:proxy_port";
}

Reemplazando proxy_host:proxy_port por el número de IP de la computadora que hace de socks proxy y el puerto arbitrario que hubieras elegido para el tunel.

 

La versión larga:

Conectá tu windows por SSH a tu Linux seteando un tunel dinámico para que funcione como socks proxy como sigue:

Configuración de un tunel dinámico SSH para que funcione como socks proxy de un iPhone en Windows

Configuración de un tunel dinámico SSH para que funcione como socks proxy de un iPhone en Windows

 

Tendrás que aceptar la advertencia de seguridad que seguramente aparezca cuando el firewall de Windows detecte que estás haciendo alguna cosa rara y permitir la conexión para todos los ámbitos.

Si tu computadora corre linux (o es el mismo servidor y querés hacer la chanchada de ejecutar un SSH a localhost en lugar de una regla de iptables que haga DNAT) lo anterior es el equivalente a ejecutar:

 

ssh -N -D3456 -N [email protected]

 

A partir de lo cual, en tu computadora pasará a existir un nuevo puerto abierto, el 3456 TCP funcionando como socks proxy. Y si me preguntás para qué el -N, te cago a piñas.

Por consiguiente, si tu computadora haciendo de socks proxy está en el IP 192.168.1.100 por ejemplo, tu proxy.pac tiene que decir:

 

function FindProxyForURL(url, host)
{
return "SOCKS 192.168.1.100:3456";
}

 

A su vez, este proxy.pac tiene que estar alojado en algún servidor que tu iPhone o iPad pueda acceder por HTTP, puede ser el mismo Linux contra el cual se corre el SSH server, tu computadora, otro servidor, etc etc. Si querés ahorrarte la configuración de un apache, nginx, lighttpd o etc etc, siempre podés usar el módulo SimpleHTTPServer de python en el directorio que aloja tu proxy.pac (por cierto, pac es por Proxy Auto Configuration y solamente una convención, el archivo se puede llamar como se te cante el culo que funciona igualmente), ejemplo:

 

python -m SimpleHTTPServer    #Case Sensitive lo anterior, si errás una mayúscula o minúscula no funcionará

 

Este módulo de python que tantas alegrías me ha traído, escucha en el port 8000 por lo que luego en tu dispositivo con iOS y desde: Ajustes > Wi-Fi > [tu Wi-Fi] > Configurar proxy > Automático > URL deberás ingresar:

 

http://hostname_o_IP:8000/proxy.pac

O cualquiera sea la URL en la cual estás sirviendo este proxy.pac via http.

 

¿Se entendió? ¿Te sirvió? De nada.

 

 

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *