VPN: Conectar a casa remotamente, usando Raspberry
¿Para que podemos necesitar una VPN? – En muchas ocasiones nos encontramos lejos de casa (este post también puede ser válido para una pequeña oficina) y necesitamos algo que tenemos en nuestro NAS o bien conectarnos a nuestros PCs para dejar descargándose alguna cosa en torrent. También cabe la posibilidad que estemos en terreno «hostil», que es como suelo denominar cualquier cosa que no sea mi propia red y especialmente todos los accesos WIFI gratis y/o posiblemente monitorizados.
Si no queremos utilizar servicios gratuitos de conexión remota (¿alguien sabe de donde sacan dinero estos buenos samaritanos?) y tampoco queremos exponer nuestra red interna mediante la apertura de puertos en nuestro router, una solución de bajo coste (40€) puede ser la implantación de un acceso VPN mediante el uso de una Raspberry PI. Las instrucciones son válidas para cualquier otra distribución de linux que tengamos en casa, aunque variarán los comandos de instalación y es posible que también alguna ruta.
Al lío…
La foto final (mas o menos) de lo que queremos montar es la siguiente:
Para ello, deberemos instalar en nuestra Raspberry la distribución Raspbian Jesse Lite. Esta distribución ocupa apenas 300mb y traerá consigo lo mínimo para montar un sistema base. Es recomendable que un sistema que va a dar acceso a toda nuestra red, lo mantengamos bien limpio, aunque si quieres usar otra distribución «allá tu y tu pelo».
Una vez instalada la distribución, debemos instalar OpenVPN mediante el comando:
$ sudo apt-get install open-vpn
Esto instalará además cualquier otro software necesario, es decir, las dependencias de OpenVPN con otros paquetes como SSL, por ejemplo. Para no usar sudo en cada comando, podemos ejecutar lo siguiente para obtener una shell de root:
$ sudo -s
En la mayoría de comandos he mantenido el prompt con la ruta en la que estoy ejecutando el comando. Tenlo en cuenta si vas a usar copy/paste. En otros comandos, he incluido anotaciones o aclaraciones usando el carácter «#», por lo que puedes copiarlos y pegarlos sin problemas porque no se ejecutarán esos comentarios.
Crear certificados de OpenVPN (las cerraduras y las llaves)
OpenVPN lleva consigo una serie de scripts (guiones de texto con los que podemos lanzar varios comandos de forma secuencial y automática) que facilita mucho la tarea de creación y el mantenimiento de los certificados que serán algo así como las «llaves» y al mismo tiempo la «cerradura» de acceso a nuestra red.
Vamos a copiar al directorio /etc/openvpn el directorio que contiene dichos scripts:
# cp -r /usr/share/doc/openvpn/examples/easy-rsa/2.0/ /etc/openvpn/easy-rsa
Una vez hecho esto, vayamos al recién creado directorio /etc/openvpn/easy-rsa para proceder:
# cd /etc/openvpn/easy-rsa
Lo primero que tenemos que hacer es que nuestro entorno tenga correctamente asignadas las variables. Si esto te ha sonado a chino del sur de Beijing, tranquilo, que tampoco es necesario entenderlo. Es como cuando el mecánico te cuenta lo de la junta del cigüeñal.
Para hacer esto, debemos ejecutar lo siguiente:
root@localhost:/etc/openvpn/easy-rsa# source ./vars root@localhost:/etc/openvpn/easy-rsa# ./clean-all
El primer comando carga las variables y con el segundo nos aseguramos que no hay ninguna clave antigua, de ejemplo o similar.
Ahora llega el primer momento interesante: Vamos a crear la CA!! (Pronunciesé imitando a Fernando Fernán-Gomez, o pierde mucho fuelle). La CA, Certification Authority será la firma que avalará que todas las llaves que se entreguen a los clientes y al servidor vienen de nosotros y no podrán ser alteradas.
root@localhost:/etc/openvpn/easy-rsa# ./build-ca RedInterna Generating a 1024 bit RSA private key ............++++++ ....................................++++++ writing new private key to 'ca.key' ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. -----
Ahora nos pedirá una serie de información que identifica nuestro certificado servidor para con nuestros clientes usuarios. Puedes dejar la información por defecto y no es relevante su cambio para la finalidad de una VPN casera, pero si quieres dejarlo bonito y hacer las cosas bien, no cuesta más de 10 segundos:
Country Name (2 letter code) [US]:ES State or Province Name (full name) [CA]:Madrid Locality Name (eg, city) [SanFrancisco]:Madrid Organization Name (eg, company) [Fort-Funston]:Asociación de amigos de la VPN Organizational Unit Name (eg, section) [changeme]:Departamento de Informática Common Name (eg, your name or your server's hostname) [changeme]:aduana Name [changeme]:CA-aduana Email Address [mail@host.domain]:aduana@jesusdml.es
Creando el certificado del servidor
Tenemos la CA creada y ahora vamos a crear el certificado/clave del servidor se usará dicha CA para firmarlo y darle así veracidad.
root@localhost:/etc/openvpn/easy-rsa# ./build-key-server aduana.jesusdml.es Generating a 1024 bit RSA private key ...........................++++++ .................++++++ writing new private key to 'aduana.jesusdml.es.key' ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. -----
Como vamos a dejarlo bonito, al igual que con la CA, alteraré los ejemplos:
Country Name (2 letter code) [US]:ES State or Province Name (full name) [CA]:Madrid Locality Name (eg, city) [SanFrancisco]:Madrid Organization Name (eg, company) [Fort-Funston]:Asociación de amigos de la VPN Organizational Unit Name (eg, section) [changeme]:Departamento de Informática Common Name (eg, your name or your server's hostname) [aduana.jesusdml.es]: Name [changeme]:Server-aduana Email Address [mail@host.domain]:aduana@jesusdml.es Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: (Pulsar Intro(1)) An optional company name []:(Pulsar Intro(2)) Using configuration from /etc/openvpn/easy-rsa/openssl-1.0.0.cnf Check that the request matches the signature Signature ok The Subject's Distinguished Name is as follows countryName :PRINTABLE:'ES' stateOrProvinceName :PRINTABLE:'Madrid' localityName :PRINTABLE:'Madrid' organizationName :T61STRING:'Asociaci\0xC3\0xB3n de amigos de la VPN' organizationalUnitName:T61STRING:'Departamento de Inform\0xC3\0xA1tica' commonName :PRINTABLE:'aduana.jesusdml.es' name :PRINTABLE:'Server-aduana' emailAddress :IA5STRING:'aduana@jesusdml.es' Certificate is to be certified until Mar 29 15:14:56 2026 GMT (3650 days) Sign the certificate? [y/n]:y 1 out of 1 certificate requests certified, commit? [y/n]y Write out database with 1 new entries Data Base Updated
Ya hemos creado y firmado el certificado del servidor. Tal y como se puede leer en el punto (1), es posible asignar una contraseña que se nos solicitaría en el arranque del servicio. Dado el carácter «hogareño, casero, pequeño, peludo, suave; tan blando por fuera, que se diría todo de algodón, que no lleva huesos.» de este artículo, lo vamos a dejar tal cual (living la vida loca). Así mismo, tampoco necesitaremos indicarle un nombre secundario de empresa (2). En ambos casos, pulsaremos intro para continuar.
Para comprobar que tanto la CA como el servidor tienen sus certificados correctamente creados, podemos ir al directorio keys y ejecutar ls. Algunos de estos ficheros son de la «parte CA» y otros del propio servidor:
root@localhost:/etc/openvpn/easy-rsa/keys# ls -1 01.pem #Listado de certificados dados por la CA y numerados en index.txt aduana.jesusdml.es.crt # Certificado del servidor formato pem. aduana.jesusdml.es.csr # Requerimiento de certificado usado por el script. aduana.jesusdml.es.key # Clave privada del servidor. ca.crt # Certificado de la CA. ca.key # Clave privada de la CA. index.txt # Listado de claves creadas por la CA. index.txt.attr # Atributos de los certificados creados por la CA. index.txt.old # Backup del anterior. serial # Número de serie a usar por la CA para el siguiente certificado. serial.old # Backup del anterior.
Otras claves de servidor
Lo siguiente, será crear la clave DH (Diffe-Hellman) a usar por el servidor. No es necesaria la introducción de ningún dato. Esta clave se debe generar en cada servidor VPN. Su creación tarda un par de minutos en nuestra Raspberry:
root@localhost:/etc/openvpn/easy-rsa# ./build-dh Generating DH parameters, 1024 bit long safe prime, generator 2 This is going to take a long time ......................+......................+....(y más puntitos, cruces y algún asterisco)
Si todo sale bien, se habrá añadido el fichero dh1024.pem en nuestro directorio keys.
Además, podemos crear un nivel extra de seguridad mediante el uso de HMAC. Este protocolo firmará los paquetes iniciales de la conexión para evitar que nuestro servidor atienda peticiones de cualquiera que pueda estar haciendo un escaneo de puertos o un ataque de fuerza bruta. Si los paquetes de conexión no están firmados por esta clave, el servidor no hará caso de los mismos. El siguiente comando creará esta clave y la depositará en /etc/openvpn/easy-rsa/keys:
root@localhost:/etc/openvpn/easy-rsa/keys# openvpn --genkey --secret ta.key
Darle una llave a los usuarios/clientes
Una vez creadas la CA y el certificado del servidor, vamos a crear las llaves de los clientes que también serán certificados. Es importante que tengamos claro el uso que vamos a dar de estas llaves. Los dispositivos en las que las instalemos se pueden perder y por ello es importante que tengamos en consideración su mantenimiento.
Por ejemplo, si vamos a usar nuestra VPN en nuestro portátil, tablet y teléfono, recomiendo crear un certificado independiente ya que en el caso de pérdida, podemos revocar el del elemento perdido sin afectar el acceso con los otros. Así mismo, si varias personas van a acceder a la VPN, mejor crear un certificado de cliente para cada uno. Como también los vamos a dejar bonitos, deberíamos de ser coherentes con los parámetros dados en la CA y el servidor:
root@localhost:/etc/openvpn/easy-rsa# ./build-key Jesusdml-Movil Generating a 1024 bit RSA private key ..........................++++++ .......++++++ writing new private key to 'Jesusdml-Movil.key' ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [US]:ES State or Province Name (full name) [CA]:Madrid Locality Name (eg, city) [SanFrancisco]:Madrid Organization Name (eg, company) [Fort-Funston]:Asociación de amigos de la VPN Organizational Unit Name (eg, section) [changeme]:Dirección Gneral. de la cocina Common Name (eg, your name or your server's hostname) [Jesusdml-Movil]: Name [changeme]:Jesus D. Email Address [mail@host.domain]:jd@jesusdml.es Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: (Pulsar intro(1)) An optional company name []:(Pulsar Intro(2)) Using configuration from /etc/openvpn/easy-rsa/openssl-1.0.0.cnf Check that the request matches the signature Signature ok The Subject's Distinguished Name is as follows countryName :PRINTABLE:'ES' stateOrProvinceName :PRINTABLE:'Madrid' localityName :PRINTABLE:'Madrid' organizationName :T61STRING:'Asociaci\0xC3\0xB3n de amigos de la VPN' organizationalUnitName:T61STRING:'Direcci\0xC3\0xB3n Gneral. de la cocina' commonName :PRINTABLE:'Jesusdml-Movil' name :PRINTABLE:'Jesus D.' emailAddress :IA5STRING:'jd@jesusdml.es' Certificate is to be certified until Mar 29 15:58:26 2026 GMT (3650 days) Sign the certificate? [y/n]:y 1 out of 1 certificate requests certified, commit? [y/n]y Write out database with 1 new entries Data Base Updated
Una vez creado el primer usuario, el resto debería tener la misma secuencia. Tan sólo, cambiará el CN, en este caso Jesusdml-Movil, de los otros certificados creados.
WARNING, be careful with pickpockets : Al igual que en la creación del servidor, podremos asignar una contraseña (1) al certificado. Ojo con esto, que si no le pones contraseña estarás conectando a tu red a cualquiera que se haga con una copia de ese certificado.
Después de la creación del certificado de usuario, se habrán agregado cuatro nuevos ficheros al directorio keys:
02.pem Jesusdml-Movil.crt Jesusdml-Movil.csr Jesusdml-Movil.key
Así mismo, si viste el interior de los ficheros index.txt y serial, su contenido también ha variado para incluir el nuevo certificado e incrementando en 1 el número que ya había, respectivamente.
Configurando el Servidor
Hasta ahora hemos visto la creación de las claves necesarias para que se identifiquen entre sí el servidor y los usuarios, todos ellos bendecidos por la CA. Ahora toca la parte quizá más complicada, pero tampoco mucho, de la VPN: El servidor.
Antes de empezar, dado que tenemos todas las claves en /etc/openvpn/easy-rsa/keys es recomendable que hagamos un link a /etc/openvpn/keys para que se acorten las líneas del ejemplo de fichero de configuración y no se me descuadre la maquetación del blog, o por que así queda más bonito. Esto lo haremos con el siguiente comando:
root@localhost:/etc/openvpn# ln -s /etc/openvpn/easy-rsa/keys/ /etc/openvpn/keys
Para configurar el servidor, debemos crear un fichero de texto y denominarlo my-vpn.conf en el directorio /etc/openvpn.conf. Esto lo podemos hacer con vim o cualquier otro editor de texto. En cualquier caso, el contenido deberá ser el siguiente (recomiendo quitarle los comentarios explicativos precedidos por «#»):
port 443# Puerto por el que conectará la VPN (1). Por defecto 1194. proto tcp # Protocolo usado por la VPN (1). Por defecto udp dev tun # Usaremos un dispositivo tipo túnel.(2) ca /etc/openvpn/keys/ca.crt # Certificado de la CA cert /etc/openvpn/keys/server.crt # Certificado del servidor key /etc/openvpn/keys/server.key # Clave del servidor dh /etc/openvpn/keys/dh1024.pem # Clave DH server 192.168.230.0 255.255.255.0 # Red virtual que se creará para "el otro lado"(3) ifconfig-pool-persist ipp.txt # Fichero en el servidor pondrá las direcciones IP de los usuarios. # Así mismo, también podemos añadir (o no) algunas opciones para los clientes push "dhcp-option DOMAIN local" # Cambia el dominio DNS de los usuarios conectados push "dhcp-option SEARCH local" # Cambia el dominio de búsqueda DNS de los usuarios conectados push "dhcp-option DNS 8.8.8.8" # Cambia el servidor de DNS que usarán los usuarios push “route 192.168.x.0 255.255.255.0” # Indica al dispositivo del usuario las redes que están "dentro" de la VPN. Cambia la red por la que tengas en el interior de casa o de tu oficina. push "redirect-gateway" # Le decimos que "todo" el tráfico salga por la VPN.(4) keepalive 10 120 # Indica cada cuanto tiempo se envían paquetes de mantenimiento de conexión. tls-auth /etc/openvpn/keys/ta.key 0 # Ruta del fichero de firma TSL/auth comp-lzo # Indica el uso de la compresión de tráfico. Muy útil para usuarios remotos con conexiones 3G/4G user openvpn # Usuario usado por el servidor group openvpn # Usuario usado por el servidor status /var/log/openvpn-status.log # Fichero para el registro de estado del servidor. log-append /var/log/openvpn.log # Fichero de registros de eventos del servidor. verb 4 # Nivel de información en el log. Va del 1 al 11. Si hay problemas, probar con números superiores. mute 20 # Indica que después de 20 eventos iguales, no se almacenarán en el fichero.
El fichero se puede copiar/pegar tal cuál ya que todo el texto que va precedido del símbolo # hasta el final de la línea, se considerará como comentario y el servidor OpenVPN no lo leerá. Bien, ahora las aclaraciones a los «numeritos»:
(1) Por defecto el puerto de VPN es el 1194. Cambiándolo por el uso del 443 y del protocolo tcp en vez de el udp, podremos usar nuestra VPN en muchos sitios que restringen el uso de VPNs al simular el uso del HTTPS que usa esos puertos.
(2) OpenVPN puede crear dispositivos tun y tap. Los dispositivos tun crean una red paralela a la existente que conecta al cliente con el servidor manteniéndose separadas del resto de redes que pudiera haber en ambos extremos. Los dispositivos tap suelen usarse para unir de forma virtual varios puntos como si se tratasen de la misma red y puede transportar cualquier protocolo (tun únicamente soporta IP). Si quieres más información sobre esto, puedes seguir este enlace.
(3) Este direccionamiento, denominado habitualmente «Dominio de encriptación», se mantendrá entre las partes que estén dentro de la VPN para comunicarse y enrutarse entre ellas. Es importante que no se repita en otras partes de la red. Por ejemplo, casi todos tenemos en casa la red 192.168.1.0/24 o 192.168.0.0/24, por lo que deberíamos escoger cualquier otro direccionamiento, tal y como he puesto en el ejemplo.
(4) En el caso de que dejemos esta directiva como tal, la VPN se pondrá como ruta por defecto, es decir, que irá por allí todo el tráfico de Internet y de otras redes a las que puedan acceder desde donde se conecten los clientes/usuarios de la VPN. En caso que que queramos seguir saliendo a Internet sin pasar por la VPN, deberemos añadir el carácter # delante de la línea o bien eliminarla.
Configuración de red del servidor
Para que el servidor pueda enviar tráfico entre los usuarios de la VPN y los equipos que tengamos dentro de la red interna, es necesario activar ese reenvío. Deberemos hacer lo siguiente:
- Abrir el fichero /etc/sysctl.conf con vim.
- Buscar la línea
- #net.ipv4.ip_forward=1
- Eliminar la almohadilla del principio dejando la línea de esta forma:
- net.ipv4.ip_forward=1
- Salvar el fichero y cargar los cambios con el comando:
# sysctl -p
Ahora es el turno de que los usuarios de VPN sean «enmascarados» por el servidor de VPN. Para ello debemos ejecutar el comando:
# iptables -t nat -A POSTROUTING -s 192.168.230.0/24 -o eth0 -j MASQUERADE
Recuerda que la red 192.168.230.0/24 es la que está en el fichero de configuración de ejemplo que puse más arriba, por lo que si pusiste otra, deberás cambiarlo. Por otra parte, eth0 es el interface de red con el que Raspbian nombra el interface que va conectado al cable. Si quieres «sacar» a los usuarios a redes que están conectadas vía WiFi, deberás usar wlan0.
Para hacer permanentes los cambios, podemos ejecutar los siguientes comandos:
# iptables-save > /etc/network/iptables # echo "pre-up iptables-restore < /etc/network/iptables" >> /etc/network/interfaces
Bien, ya no queda nada por explicar? alguna duda? Continuemos para bingo, que queda poco 🙂
Configurando los clientes de VPN
Ya que tenemos el servidor configurado y todo preparado, podemos comenzar a configurar los clientes. Para el caso, vamos a configurar un usuario en Linux, iPhone y Mac. Si usas otros sistemas, podéis utilizar software para Windows, Linux y Android, todos con su cliente OpenVPN pero con el mismo espíritu. Lo importante es que tengamos claro los ficheros que vamos a necesitar. Voy a usar los nombres que he usado en el artículo, por lo que si los habéis cambiado, adaptadlos:
- ca.crt
- Jesusdml-Movil.crt
- Jesusdml-Movil.key
- ta.key (hay que transmitirlo por un medio seguro. No lo enviéis por correo a los usuarios (o si, como queráis))
Además de los ficheros, necesitaremos un fichero de configuración (OMG, otro!!) que deberá tener el siguiente contenido (en consonancia con el del ejemplo que ponía para el servidor. Adaptadlo si lo habéis cambiado). Esta configuración está pensada en Linux, OSX y iPhone, pero he dejado comentada con el carácter «;» las líneas dedicadas a otros sistemas:
client # Indicamos que somos un cliente dev tun # Deberemos usar el mismo tipo de dispositivo que el servidor ;dev-node MyTap # En sistemas Windows, indicar el dispositivo. proto tcp # Mantener igual que en la configuración del servidor. remote aduana.jesusdml.es 443 # Nombre y puerto del servidor VPN. Recomiendo usar dnsexit o similar en caso de tener una IP dinámica. ;remote-random # En caso de haber puesto varios servidores de VPN. resolv-retry infinite # Intentará resolver el nombre del servidor contínuamente. nobind # Dejar que el puerto local sea asignado automáticamente. ;user nobody # En Linux deberemos descomentarlo (eliminar ";") ;group nobody # En Linuz deberemos descomentarlo. persist-key # Mantener las claves intercambiadas hasta que desconectemos. persist-tun # Mantener el túnel aunque se desconecte. ;http-proxy-retry # En el caso de conectarnos vía proxy, si debemos reintentar la conexión aunque nos desconecte. ;http-proxy [proxy server] [proxy port #] # Indicar servidor puerto del proxy ;mute-replay-warnings # En redes WiFi suelen darse paquetes duplicados. Con esto, se evitará registrar dichos paquetes. Activarlo en WiFi/3G/4G # Indicar la ruta de los certificados propios, la CA y el fichero de autenticación TLS/Auth. ca ca.crt cert Jesusdml-Movil.crt key Jesusdml-Movil.key tls-auth ta.key 1 comp-lzo # Habilita el uso de comprensión. verb 3 # Activa el nivel de log en 3.
Esta configuración básica, es la que vamos a utilizar en los siguientes clientes:
Linux | IPhone | OSX/MAC |
OpenVPN Client |
OpenVPN Connect |
Tunnelblick |
Linux: OpenVPN Client
La instalación y configuración en Linux es más sencilla de lo que parece. Lo primero es instalar OpenVPN con apt-get, yum o lo que tengamos en la distribución:
# apt-get install openvpn openssl
Moveremos a un directorio seguro o, por defecto a /etc/openvpn el fichero de configuración de cliente llamándolo cliente.ovpn y los certificados al directorio /etc/openvpn/keys. Hay que editar en el fichero de configuración la ruta de los ficheros de certificados para que cuadren con el directorio. Por ejemplo:
... ca /etc/openvpn/keys/ca.crt cert /etc/openvpn/keys/Jesusdml-Movil.crt key /etc/openvpn/keys/Jesusdml-Movil.key tls-auth /etc/openvpn/keys/ta.key 1 ...
Una vez hecho esto, ejecutaremos el cliente de openvpn (como root):
# openvpn --config cliente.ovpn Thu Mar 31 21:45:08 2016 OpenVPN 2.2.1 arm-linux-gnueabihf [SSL] [LZO2] [EPOLL] [PKCS11] [eurephia] [MH] [PF_INET6] [IPv6 payload 20110424-2 (2.2RC2)] built on Dec 1 2014 Thu Mar 31 21:45:08 2016 NOTE: OpenVPN 2.1 requires '--script-security 2' or higher to call user-defined scripts or executables Thu Mar 31 21:45:08 2016 Control Channel Authentication: using '/etc/openvpn/keys/ta.key' as a OpenVPN static key file Thu Mar 31 21:45:08 2016 Outgoing Control Channel Authentication: Using 160 bit message hash 'SHA1' for HMAC authentication Thu Mar 31 21:45:08 2016 Incoming Control Channel Authentication: Using 160 bit message hash 'SHA1' for HMAC authentication Thu Mar 31 21:45:08 2016 LZO compression initialized Thu Mar 31 21:45:08 2016 Control Channel MTU parms [ L:1544 D:168 EF:68 EB:0 ET:0 EL:0 ] Thu Mar 31 21:45:08 2016 Socket Buffers: R=[87380->131072] S=[16384->131072] Thu Mar 31 21:45:08 2016 Data Channel MTU parms [ L:1544 D:1450 EF:44 EB:135 ET:0 EL:0 AF:3/1 ] Thu Mar 31 21:45:08 2016 Local Options hash (VER=V4): 'ee93348a’ Thu Mar 31 21:45:08 2016 Expected Remote Options hash (VER=V4): ‘gh555lp1' Thu Mar 31 21:45:08 2016 Attempting to establish TCP connection with [AF_INET]aduana.jesusdml.es:443 [nonblock] Thu Mar 31 21:45:09 2016 TCP connection established with [AF_INET]aduana.jesusdml.es:443 Thu Mar 31 21:45:09 2016 TCPv4_CLIENT link local: [undef] Thu Mar 31 21:45:09 2016 TCPv4_CLIENT link remote: [AF_INET]aduana.jesusdml.es:443 Thu Mar 31 21:45:09 2016 TLS: Initial packet from [AF_INET]aduana.jesusdml.es:443, sid=74999111 gh555lp1 Thu Mar 31 21:45:09 2016 VERIFY OK: depth=1, /C=ES/ST=Madrid/L=Madrid/O=Asociación de amigos de la VPN/OU=Departamento de Informática/CN=aduana.jesusdml.es/name=Server-aduana/emailAddress=aduana@jesusdml.es Thu Mar 31 21:45:09 2016 VERIFY OK: depth=0, /C=ES/ST=Madrid/L=Madrid/O=Asociación de amigos de la VPN/OU=Dirección Gneral. de la cocina/CN=Jesusdml-Movil/name=Jesus D./emailAddress=jd@jesusdml.es Thu Mar 31 21:45:09 2016 Data Channel Encrypt: Cipher 'BF-CBC' initialized with 128 bit key Thu Mar 31 21:45:09 2016 Data Channel Encrypt: Using 160 bit message hash 'SHA1' for HMAC authentication Thu Mar 31 21:45:09 2016 Data Channel Decrypt: Cipher 'BF-CBC' initialized with 128 bit key Thu Mar 31 21:45:09 2016 Data Channel Decrypt: Using 160 bit message hash 'SHA1' for HMAC authentication Thu Mar 31 21:45:09 2016 Control Channel: TLSv1, cipher TLSv1/SSLv3 DHE-RSA-AES256-SHA, 1024 bit RSA Thu Mar 31 21:45:09 2016 [raspi.local] Peer Connection Initiated with [AF_INET]192.168.x.x:443 Thu Mar 31 21:45:11 2016 SENT CONTROL [raspi.local]: 'PUSH_REQUEST' (status=1) Thu Mar 31 21:45:11 2016 PUSH: Received control message: 'PUSH_REPLY,dhcp-option DOMAIN local,dhcp-option SEARCH local,dhcp-option DNS 8.8.8.8,route 192.168.x.0 255.255.255.0,redirect-gateway,route 192.168.230.1,topology net30,ping 10,ping-restart 120,ifconfig 192.168.230.2 192.168.230.1’ Thu Mar 31 21:45:11 2016 Options error: Unrecognized option or missing parameter(s) in [PUSH-OPTIONS]:11: .69.9 (2.2.1) Thu Mar 31 21:45:11 2016 OPTIONS IMPORT: timers and/or timeouts modified Thu Mar 31 21:45:11 2016 OPTIONS IMPORT: --ifconfig/up options modified Thu Mar 31 21:45:11 2016 OPTIONS IMPORT: route options modified Thu Mar 31 21:45:11 2016 OPTIONS IMPORT: --ip-win32 and/or --dhcp-option options modified Thu Mar 31 21:45:11 2016 ROUTE default_gateway= 192.168.x.1 Thu Mar 31 21:45:11 2016 TUN/TAP device tun0 opened Thu Mar 31 21:45:11 2016 TUN/TAP TX queue length set to 100 Thu Mar 31 21:45:11 2016 do_ifconfig, tt->ipv6=0, tt->did_ifconfig_ipv6_setup=0 Thu Mar 31 21:45:11 2016 /sbin/ifconfig tun0 192.168.230.2 pointopoint 192.168.230.1 mtu 1500 Thu Mar 31 21:45:11 2016 /sbin/route add -net 192.168.x.x netmask 255.255.255.255 gw 192.168.x.1 Thu Mar 31 21:45:11 2016 /sbin/route del -net 0.0.0.0 netmask 0.0.0.0 Thu Mar 31 21:45:11 2016 /sbin/route add -net 0.0.0.0 netmask 0.0.0.0 gw 192.168.230.1 Thu Mar 31 21:45:11 2016 /sbin/route add -net 192.168.x.0 netmask 255.255.255.0 gw 192.168.230.1
Si todo se ha configurado e instalado bien, ya deberías estar conectado a tu flamante VPN en Linux!
iPhone: VPN Connect
El software de iPhone es (todavía) más sencillo de configurar. Debemos instalar el software desde la AppStore y una vez hecho esto, abrimos iTunes con el iPhone/iPad conectado.
En aplicaciones de iPhone, en la parte derecha, bajamos hasta ver las aplicaciones con Archivos Compartidos:
Seleccionamos «OpenVPN» y en la parte inferior pulsamos sobre «Añadir», seleccionando posteriormente los siguientes ficheros:
- ca.crt
- Jesusdml-Movil.crt
- Jesusdml-Movil.key
- ta.key
- openvpn.ovpn
Después sincronizamos el iPhone/iPad y en la aplicación de OpenVPN, ya nos aparecerá la nueva configuración. Tan solo debemos activarla con el botón de desplazamiento y voilá! 😀
OSX: Tunnelblick
La instalación en OSX es realmente sencilla usando Tunnelblick. Una vez instalado el software, debemos crear un directorio que contenga los siguientes ficheros:
- ca.crt
- Jesusdml-Movil.crt
- Jesusdml-Movil.key
- ta.key
- openvpn.ovpn
El nombre del directorio puede ser cualquier, pero hay que terminarlo con la extensión .tblk. En el fichero de configuración, debemos quitar los directorios de ruta a los certificados, CA y demás. Por ejemplo:
... ca ca.crt cert Jesusdml-Movil.crt key Jesusdml-Movil.key tls-auth ta.key 1 ...
Una vez hecho esto, hacemos doble-click sobre el nuevo directorio creado, que se habrá transformado en un fichero .tblk y el programa importará automáticamente la configuración. Para activar la VPN habrá que ir al nuevo icono con forma de túnel de la barra superior y seleccionar «Conectar… «Nombre de la VPN»».
Si todo ha salido bien, veremos como salen las notificaciones de nuestra conexión a la VPN 😀
Bien, ya hemos llegado al final de este pequeño pero entretenido artículo, manual, o llámalo Perry Mason. Espero que te sea de utilidad y que no comas mucho antes del verano, que luego vienen las lamentaciones con los bikinis y bañadores. Advertido quedas.
Un Saludo.
Jesus D. Muñoz
Hola Jesus,
Buen tutorial, solo me queda la duda sobre el tema de como tratar el ‘port forwarding’, no veo como el ruteador va a resolver las peticiones que lleguen de los clientes vpn