Menu

Conexiones VPN con dispositivos Android y strongSwan

Bien, antes habíamos dicho de investigar cómo conectar un dispositivo móvil a la VPN que creamos. En este caso, lo conseguimos con un dispositivo Android utilizando la “app” para “smartphones” de “strongSwan”.

La configuración no se diferencia en exceso de la que pudiéramos implementar para computadoras con sistemas Windows, lo único a tener en cuenta son unos pocos parámetros y, quizás lo más reseñable, la importación del certificado al “smartphone”.

Configurando el servidor


Partimos del supuesto de que ya hemos configurado la VPN (con 
el post que hice anteriormente). Pues bien, en esta ocasión nos fuimos a configurar de nuevo el archivo “/etc/ipsec.conf” para poner esta configuración:

conn %default
auto=add
type=tunnel
keyexchange=ikev2
ike=aes256-sha1-modp1024,3des-sha1-modp1024!
esp=aes256-sha1,3des-sha1!
left=<ip privada del servidor “strongSwan”>
leftid=<CN que hubiéramos puesto en el certificado>
leftcert=/etc/ipsec.d/certs/vpn-server-cert.pem
leftsendcert=always
leftsubnet=0.0.0.0/0

conn ANDROID_CLIENTS
right=%any
rightsourceip=172.17.0.0/16
rightauth2=eap-mschapv2


Esta es la configuración mínima que hay que hacer en el servidor. En cuanto al archivo “/etc/ipsec.secrets”, nos sirven incluso los usuarios que habíamos definido anteriormente para sistemas Windows ya que, de hecho, es el mismo tipo de autenticación el que haríamos.

Reiniciaríamos el servicio con “sudo ipsec restart”, y si queremos, podríamos visualizar, en tiempo real, todos los mensajes que llegan al registro del servicio con el comando “sudo tail -f /var/log/syslog | grep charon”:


Si os fijáis en la captura, podréis ver que se cargó la configuración sin problemas. Había un mensaje que nos indicaba que el id no se confirmó por parte del certificado, pero no hay problema, la conexión se realiza autenticando el id igualmente.

Podéis ver también que se cargó la configuración para dispositivos Windows, debido a que también tenia la configuración implementada.

Pero, al igual que en dichos dispositivos Windows, los “smartphones” también deberán poseer un certificado para poder conectarse a la VPN. Para poder exportar el certificado, nos valdríamos del siguiente comando:

sudo openssl pkcs12 -in /etc/ipsec.d/certs/vpn-server-cert.pem -inkey /etc/ipsec.d/private/vpn-server-key.pem -certfile server-root-ca.pem -export -out peer.p12 


De esta manera, generamos un archivo con formato “.p12” que contiene todo lo necesario para realizar la implementación del certificado en el “smartphone”, utilizando cualquier técnica para que el archivo llegue al mismo. Añadir que nos pedirá una contraseña para cuando tengamos que instalarlo.

Dicho todo lo anterior, pasaríamos a configurar el dispositivo Android para conectarnos a la VPN.

Configurando Android

En este momento, sabemos que hemos descargado e instalado sin problemas la aplicación “strongSwan” desde “Google Play Store”.

Una vez hemos lanzado la aplicación, pulsamos arriba a la derecha donde dice “Add VPN profile”, rellenando los campos de la siguiente forma:

  • En “Server”, ponemos la IP pública del servidor.
  • Donde dice “VPN type”, seleccionamos la opción “IKEv2 Certificate + EAP (Username/Password)”.
  • Lógicamente, ponemos nuestro usuario y, opcionalmente, podemos poner la contraseña.


Ahora viene el punto importante: instalar y utilizar el certificado.


Primero seleccionamos la opción que dice “User identity” para seleccionar algún certificado. Hecho lo anterior, el dispositivo nos avisa de que la aplicación quiere usar un certificado; en principio no tenemos ningún certificado para usar, así que pulsamos sobre el botón “Instalar”:



El dispositivo entonces buscará el archivo “.p12” que hayamos puesto en el mismo; de encontrarlo, nos avisará y nos pedirá la contraseña que habíamos generado en el servidor anteriormente. En la captura, podéis ver que ya habíamos realizado la importación sin problemas.

La marcamos, y finalmente pulsamos sobre “Permitir”.

  • Desplegamos también la casilla de “Advanced settings”, y dejamos vacíos los campos que salen. Opcionalmente, podemos activar la opción “Send certificate requests”. En la información de la opción nos indican desactivarla para reducir el tamaño de los paquetes que viajan al servidor, avisándonos de que esto únicamente funciona si el servidor envía su certificado.
  • Todas las demás opciones se pueden configurar como se quiera.

La configuración final nos quedaría de esta manera:


Probando la conexión

Pues bien, llegados a este punto nos decidimos a probar la conexión. Si ejecutamos en el servidor “sudo tail -f /var/log/syslog | grep charon”, a priori no veremos nada. Pero si pulsamos sobre la conexión que hemos creado en el dispositivo, veríamos que tras unos segundos, si todo ha ido bien, estábamos conectados:



En el servidor veríamos una gran cantidad de mensajes entre ambos puntos (servidor y “smartphone”). Prestando atención sobre todo en las últimas líneas de la captura:



Incluso, en el dispositivo, si navegamos por Internet, y quisiéramos saber cuál es nuestra IP pública actual, veríamos que nos dice la del servidor (40.68.226.163), sabiendo nosotros de antemano que realmente era otra:



Y, de hecho, podríamos hacer ping al “smartphone” desde un equipo Windows 10 on-premises (ya que éste está conectado de la misma forma al servidor):



Y nada más, así ya tendríamos una manera de poder conectar dispositivos móviles a la VPN que tuviéramos en Azure (o en cualquier otro entorno). Aunque aún no habíamos investigado cómo hacerlo en “iOS”, suponemos que no diferirá mucho de esta técnica.

Fuentes consultadas

https://wiki.openwrt.org/doc/howto/vpn.ipsec.roadwarrior

https://wiki.strongswan.org/projects/strongswan/wiki/SimpleCA#Install-certificates-in-other-platforms