Preparando la integración : montando una VPN

Buenas noches a todos, con esta entrada os propongo una serie de pasos para poder tener una Fonera con una VPN montada.

Esto nos será de especial utilidad cuando integremos un gestor para la el Arduino dentro de nuestra Fonera. Recordemos que en la entrada Jugando con Arduino — Primera Parte tenía el Arduino conectado al puerto de serie de una Fonera 2200. Seguramente si se hubiera hecho con una FON 2.0 y su USB me hubiera ahorrado muchos dolores de cabeza a la hora de programar la integración… pero ese es otro tema.

El esquema de nuestra red será algo similar a esto:

Mapa Red VPN

Mapa Red VPN


Para poder completar este manual necesitaremos instalar el software OpenVPN en la Fonera. Para realizar este paso, es necesario tener acceso a nuestro OpenWrt, ya sea por Telnet o por SSH.

<br />opkg update<br />opkg install openvpn openvpn-easy-rsa nano<br />

Si tenemos unos certificados de autoridad de cliente y servidor ya creados podemos obviar este paso y copiarlos a la carpeta /etc/easy-rsa/keys/. De otra forma hay que seguir los siguientes pasos:

<br />cd /etc/easy-rsa<br />nano vars<br />

El siguiente paso es editar con nuestra información las siguientes lineas:

<br />export KEY_COUNTRY="US"<br />export KEY_PROVINCE="CA"<br />export KEY_CITY="SanFrancisco"<br />export KEY_ORG="Fort-Funston"<br />export KEY_EMAIL="me@myhost.mydomain"<br />

Una vez hecho este paso podemos generar los certificados con las instrucciones:

<br />build-ca<br />build-dh<br />build-key-server server<br />build-key client<br />

Como supongo que utilizaréis OpenWrt con una interfaz LUCI, la configuración del software irá en la ruta:

/etc/config/openvpn

hay que editarlo para dejarlo de la siguiente manera:

<br />config 'openvpn' 'lan'<br /><%%KEEPWHITESPACE%%>	option 'enable' '1'<br /><%%KEEPWHITESPACE%%>	option 'port' '1194'<br /><%%KEEPWHITESPACE%%>	option 'proto' 'udp'<br /><%%KEEPWHITESPACE%%>	option 'dev' 'tun'<br /><%%KEEPWHITESPACE%%>	option 'ca' '/etc/easy-rsa/keys/ca.crt'<br /><%%KEEPWHITESPACE%%>	option 'cert' '/etc/easy-rsa/keys/server.crt'<br /><%%KEEPWHITESPACE%%>	option 'key' '/etc/easy-rsa/keys/server.key'<br /><%%KEEPWHITESPACE%%>	option 'dh' '/etc/easy-rsa/keys/dh1024.pem'<br /><%%KEEPWHITESPACE%%>	option 'ifconfig_pool_persist' '/tmp/ipp.txt'<br /><%%KEEPWHITESPACE%%>	option 'keepalive' '10 120'<br /><%%KEEPWHITESPACE%%>	option 'persist_key' '1'<br /><%%KEEPWHITESPACE%%>	option 'persist_tun' '1'<br /><%%KEEPWHITESPACE%%>	option 'status' '/var/log/openvpn-status.log'<br /><%%KEEPWHITESPACE%%>	option 'server' '10.0.0.0 255.255.255.0'<br /><%%KEEPWHITESPACE%%>	option 'log' '/var/log/openvpn.log'<br /><%%KEEPWHITESPACE%%>	list 'push' 'dhcp-option DOMAIN lan'<br /><%%KEEPWHITESPACE%%>	list 'push' 'dhcp-option DNS 192.168.22.1'<br /><%%KEEPWHITESPACE%%>	list 'push' 'route 192.168.22.0 255.255.255.0'<br /><%%KEEPWHITESPACE%%>	option 'client_to_client' '1'<br />#	option 'server_bridge' '192.168.22.1 255.255.255.0 192.168.22.128 192.168.22.254'<br />#	option 'client' '1'<br /><%%KEEPWHITESPACE%%>	option 'verb' '3'<br /><br />

En mi caso, las tablas de routing del router principal con lo que toda la información que viaje hacia la red principal desde la red 10.0.0.0 será descartado…

Si pudiéramos configurar las tablas de routing, bastaría con añadir tanto en la Fonera como en el otro router las rutas necesarias y la interfaz de salida para cada red.

Como podéis observar tengo una linea comentada como server_bridge, con esto se soluciona el problema anterior, ya que no se generan 2 redes distintas sino que los clientes empezarían a recibir direcciones IP a partir de la 192.168.22.128, pero hay un problema con esto.. hay que una interfaz del tipo ‘tap’ y de momento Android no soporta esta tecnología. Por consiguiente no me podría conectar a esta red.

Para que la VPN sea accesible desde el exterior hay que configurar el router principal para que deje pasar una VPN (passtrough) y que el puerto 1194 este accesible y apunte a la ip de Openwrt.

En la parte del cliente necesitaremos la siguiente configuración:

<br />client<br />tls-client<br />dev tun<br />proto udp<br />remote domain.domain.test 1194 # Change to your router's External IP<br />resolv-retry infinite<br />nobind<br />ca ca.crt<br />cert client.crt<br />key client.key<br />dh dh1024.pem<br />#comp-lzo<br />#tls-auth ta.key 1<br />#persist-tap<br />persist-key<br />verb 3<br />

Si hubiéramos usado una interfaz tap en el servidor, aquí también deberíamos configurarla.

dónde pone domain.domain.test, debemos sustituirlo por nuestra IP o por un dominio (puede ser dyndns/noip…).

Además de este archivo necesitaríamos en la parte cliente los siguientes archivos que se han generado en la Fonera en el directorio /etc/easy-rsa/keys/:

  • ca.crt
  • client.crt
  • client.key
  • dh1024.pem
  • ta.key

Si quisiéramos instalarlo en un S.O Android, deberíamos instalar el apk OpenVPN Connect y a partir de él especificarle el archivo de configuración que hemos comentado anteriormente.

OpenVpn Connect para Amdriod

Screenshot de la aplicación OpenVpn Connect.

Una vez hechas las pruebas necesarias y habernos cerciorado de que tenemos una VPN funcionando y podemos acceder a la puerta de enlace de la red VPN podemos hacer que el server VPN arranque en cada inicio:

/etc/init.d/openvpn enable

Con esto ya estamos listos para poder jugar de verdad con nuestros cacharros =)

Saludos

Deja un comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.