Delirios de un Informático

Túneles SSH entre Android y OpenWRT con ConnectBot

Desde que tengo Android he querido montar una VPN para poder acceder desde cualquier lugar a todo lo que tengo en mi red casera. La idea inicial era crear algo con OpenVPN pero el cliente para Android requiere privilegios de administrador (lo que sigifica rooteo y pérdida de garantía) así que me puse a investigar con los servidores soportados nativamente y que podía instalar en OpenWRT, con pésimos resultados:

  • PPTP: es fácil de configurar pero es un protocolo viejo y vulnerable y para el cual se puede habilitar encriptacion pero no se especifica en ningún sitio de qué tipo. Además, el intento de acceder con un túnel SSH falla debido a que se necesita el protocolo GRE.
  • L2TP+IPSec: es horriblemente difícil de configurar (aquí mi desesperación) debido a que hay varias aplicaciones con diferentes versiones. En teoría parecía fácil y logré configurar una red con strongSwan+L2TP pero se desconectaba a los 10 segundos.

Por eso, y teniendo en cuenta que el acceso que necesito a mi red interna es para cosas muy concretas, he optado por el uso de la VPN de los pobres creando túneles SSH con ConnectBot. El principal beneficio es que no necesita configuración y es seguro, ya que el tráfico está encriptado desde el primer momento. Como pueden definirse varios túneles que se activarán automáticamente al conectarse al host predefinido, es posible crear túneles para un servidor web, FTP, Samba, un proxy o cualquier cosa que utilice puertos fijos. Un ejemplo:

  • Nickname: alias para el puerto, como “Web
  • Type: local
  • Source port: puerto local que se usará en el dispositivo, mayor que 1000 para no necesitar ser administrador
  • Destination: ip:puerto del equipo de la red

En mi caso he creado un port forwarding en donde el puerto 5080 en mi teléfono (Source port) apunta al puerto 80 de la IP de mi equipo de trabajo (Destination) de modo que puedo acceder a los desarrollos desde un navegador simplemente con abrir la URL http://127.0.0.1:5080 (y que evidentemente no funcionará con los navegadores tipo Opera que se basan en un proxy).

En OpenWRT basta con añadir a /etc/firewall.user las siguientes reglas para abrir el acceso remoto a SSH (el puerto puede cambiarse desde el panel de control):

/usr/sbin/iptables -I INPUT 1 -p tcp --dport 22 -j LOG
/usr/sbin/iptables -I INPUT 1 -p tcp --dport 22 -j ACCEPT

Las pegas de esta opción es el tener que definir todos los puertos uno a uno y que ciertos puertos (los inferiores a 1000) no pueden redireccionarse por lo que se depende de que el software cliente permita personalizar el puerto.

2 comentarios en “Túneles SSH entre Android y OpenWRT con ConnectBot”

javier dice:

Gracias, me ha sido de gran ayuda.

juli dice:

No sabia como hacer tunel pero con tu explicacion me ha servido. Gracias