PiVPN: Tu propia VPN sin dolor
Ya sea con una raspberry pi o con nuestro VPS, nunca está de más tener disponible una VPN lista para poder ser usada siempre que lo necesitemos, bien porque queremos acceder a algún elemento de nuestra red (por ejemplo, a nuestro NAS o nuestra impresora wifi, por ejemplo), o bien porque no tenemos a mano más que una red pública y necesitamos conectarnos a Internet...
Seguro que pensáis que es demasiado trabajo montar un servidor VPN, ¿verdad? ¡Pues nada más lejos de la verdad! Gracias a PiVPN podemos montar una en cuestión de minutos, sin dolor ni complicaciones.
Recordad que si lo montamos en nuestra LAN deberemos tener algún mecanismo para mantener nuestra IP dinámica referenciada correctamente, cosa de la que hablaremos en otro artículo.
El proyecto de PiVPN se pensó originalmente para ser instalado en las raspberry pi, pero puede correr actualmente en cualquier sistema Linux. Hace uso de OpenVPN para montar nuestro servidor VPN y, desde hace no mucho, también ofrece la posibilidad de instalar Wireguard en su lugar. Para este tutorial haremos uso del primero, dejando para un segundo artículo la otra posibilidad.
Comenzamos ejecutando el comando:
curl -L https://install.pivpn.io | bash
Dicho comando ejecutará el asistente para instalar PiVPN, donde tendremos que seguir una serie de pasos, como son:
- Seleccionar la opción de instalar OpenVPN (wireguard lo dejaremos para otro tutorial).
- Necesitaremos tener una IP estática para nuestro sistema. Si estamos instalando sobre Raspbian, nos ofrecerá establecerla (aunque recomiendo que para nuestra RPi la tengamos ya asignada). Si estamos sobre un VPS, será la IP pública del mismo. También nos pedirá permiso para actualizar el sistema automáticamente y nos preguntará por el usuario que almacenará los perfiles que generaremos.
- Cuando nos pregunte por el protocolo a usar, tenemos 2 opciones: Si queremos más seguridad en nuestra red, seleccionaremos el protocolo UDP y un puerto concreto (por defecto es el 1194, pero recomiendo cambiarlo). Sin embargo, algunas redes bloquean los puertos que no son los mínimamente necesarios para navegar por la red, así que si no vamos a tener un servicio web corriendo en el sistema, recomiendo seleccionar el protocolo TCP y el puerto 443. Esto nos garantizará el poder conectarnos a nuestra VPN desde prácticamente cualquier red.
- Después, deberemos seleccionar el cifrado y su fortaleza. Por defecto nos ofrecerá usar uno de 2048 bits, que es bastante seguro de por sí, pero si queremos más seguridad y no nos importa la penalización en la velocidad a la hora de navegar, podemos subirlo a 4096 bits (ojo, esto hará que las claves tarden más en generarse, así que paciencia...).
- Tras generar las claves, nos preguntará por nuestro nombre de dominio o subdominio. Aquí podemos meter nuestra IP pública, si es fija y no tenemos dominio, o nuestro dominio público si lo tenemos, siempre que apunte a la misma IP o lo mantegamos actualizado (para el caso de los dominios DDNS).
¡Y con esto tendremos nuestro servidor VPN montado y listo para funcionar! Recordad abrir en el router y/o en el firewall el puerto que hemos seleccionado, así como el protocolo elegido. Y, en el caso del router, redirigir dicho puerto a nuestra RPi o máquina en la que lo hayamos instalado.
Crear perfiles de conexión
Con nuestro sistema montado, sólo nos queda crear los perfiles o clientes para conectarnos desde nuestros dispositivos. Esto lo haremos de manera tan sencilla como es ejecutar el comando:
pivpn add
Introducimos los datos que nos pide y, si lo deseamos, una contraseña con la que proteger el perfil y que nos será requerida cada vez que queramos conectarnos a la red, por lo que os la recomiendo encarecidamente. Una vez introducidos todos los datos, tendremos nuestro perfil creado en el directorio personal del usuario que introdujimos en la instalación, dentro de la carpeta ovpns
, y con el nombre que le hayamos dado seguido de la extensión .ovpn
. Dicho fichero deberemos descargarlo en nuestro dispositivo e importarlo en nuestro cliente VPN. Si estamos con un dispositivo Android podemos descargar la aplicación OpenVPN Connect.
Gestionar nuestros perfiles VPN
Además de crear los perfiles, el comando pivpn
nos permite revocarlos, listarlos, comprobar quién está conectado, actualizar la herramienta... Podremos ver todas las opciones ejecutando el comando pivpn -h
, el cual nos listará todas las posibles opciones:
::: Control all PiVPN specific functions!
:::
::: Usage: pivpn <command> [option]
:::
::: Commands:
::: -a, add [nopass] Create a client ovpn profile, optional nopass
::: -c, clients List any connected clients to the server
::: -d, debug Start a debugging session if having trouble
::: -l, list List all valid and revoked certificates
::: -r, revoke Revoke a client ovpn profile
::: -h, help Show this help dialog
::: -u, uninstall Uninstall PiVPN from your system!
::: -up, update Updates PiVPN Scripts
::: -bk, backup Backup Openvpn and ovpns dir
Para actualizar el servidor VPN, bastará con ejecutar el comando pivpn -up
, mientras que con el comando pivpn -c
veremos los clientes que están conectados actualmente a nuestro servidor VPN (a veces tarda un poco en actualizarse, no es instantáneo), mientras que con el comando pivpn -l
veremos los clientes que hemos creado y su estado, si es válido o los hemos revocado:
: NOTE : The first entry should always be your valid server!
::: Certificate Status List :::
Status Name Expiration
Valid my_vpn_server ene 22 2030
Valid ClienteMovil ene 09 2023
Valid ClienteMac ene 12 2023
Revoked ene 13 2023
Como podéis ver en el ejemplo anterior, tenemos 3 dispositivos dados de alta (el primero siempre será nuestro servidor VPN) y un cuarto dispositivo que hemos eliminado (del cual ya no aparece el nombre una vez revocado su permiso).