DEV Community

Cover image for Cómo montar una VPN rápido y sin complicaciones donde quieras
Daniel M.
Daniel M.

Posted on

Cómo montar una VPN rápido y sin complicaciones donde quieras

⚠️ Este tutorial sirve para montar una VPN en 5 minutos por si necesitas conexiones esporádicas a alguna red en concreto. Si lo usas de manera profesional, asegúrate de tener la paquetería de seguridad actualizada.

Dónde instalar el servidor VPN

Partimos de cero eligiendo una VPS según nuestros requisitos:

  • Si es para conectarnos a una red local del que queramos usar servicios, montamos una máquina virtual, Raspberry Pi o cualquier otra opción que nos ofrezca poder instalar una distribución de Ubuntu Server.
  • Si es para facilitarnos una IP específica de un país, ya sea porque trabajamos en un marketplace con geolocalización y necesitamos comprobar que sale la moneda local de inicio, entre otros casos. Si es así, en servicios como Digital Ocean o Linode podemos crear una VPS (Droplet en el caso de Digital Ocean) con Ubuntu Server.

Cómo instalar el servidor VPN

  1. Saber cuál es nuestra IP real, podemos verla en whatismyip.com.
  2. Una vez montada la instancia de Ubuntu Server según nuestras necesidades, descargamos el script de GitHub con permisos de root:

    curl -O https://raw.githubusercontent.com/angristan/openvpn-install/master/openvpn-install.sh
    
  3. Damos permisos de ejecución al script:

    chmod +x openvpn-install.sh
    
  4. Ejecutamos el script:

    ./openvpn-install.sh
    
  5. Los primeros pasos para configurar la VPN son:

    1. IP pública del servidor
    2. Activar o no el soporte IPv6 (por defecto: no)
    3. Puerto del VPN (por defecto: 1194)
    4. Protocolo: (UDP)
    5. DNS: En mi caso, he elegido OpenDNS (8)
    6. Activar compresión (por defecto: no)
    7. Personalizar las opciones de cifrado (por defecto: no)
  6. ¡Listo! Siguiendo con la configuración de openVPN, el script permite crear el primer archivo .ovpn de credenciales. Es muy sencillo, escribe un nombre y la opción de si incluir una contraseña o no de importación.

Archivos de configuración de openVPN

También podemos revisar el estado de openVPN con este comando:

systemctl status openvpn
Enter fullscreen mode Exit fullscreen mode

Con un resultado similar a éste:

● openvpn.service - OpenVPN service
Loaded: loaded (/lib/systemd/system/openvpn.service; enabled; vendor preset: enabled)
Active: active (exited) since Tue 2022-08-30 09:21:07 UTC; 1 day 23h ago
Main PID: 12963 (code=exited, status=0/SUCCESS)
CPU: 4ms
Enter fullscreen mode Exit fullscreen mode

Cómo añadir perfiles

Una vez hecho todo lo de arriba, no tenemos que volver a configurar nada si queremos crear perfiles y descargar las credenciales, o también revocarlas si queremos denegarles el acceso.

bash openvpn-install.sh
Enter fullscreen mode Exit fullscreen mode

El menú es el siguiente:

Welcome to OpenVPN-install!
The git repository is available at: [https://github.com/angristan/openvpn-install](https://github.com/angristan/openvpn-install)
It looks like OpenVPN is already installed.
What do you want to do?
1) Add a new user
2) Revoke existing user
3) Remove OpenVPN
4) Exit
Select an option [1-4]:
Enter fullscreen mode Exit fullscreen mode

Si queremos crear un nuevo perfil, elegimos la primera opción y los pasos serán los mismos que en la última parte del proceso inicial.

  1. Nombre del perfil.
  2. Como medida de seguridad, podemos asignarle una contraseña. Por ello, elegimos la segunda opción, “Use a password for the client” just to import it.
  3. Copiar ese archivo a nuestro equipo local para conectarnos, o enviársela a una persona para que se conecte.

Cómo compartir el archivo con otras personas

Existe multitud de opciones, por ejemplo usando el comando scp para enviar remotamente copias de archivos, pero en este caso, vamos a hacerlo de una manera más simple.

cat archivo.ovpn
Enter fullscreen mode Exit fullscreen mode

Entendiendo que hacemos el listado del archivo conectado por ssh a donde hemos instalado el servidor VPN, copiamos el contenido y, ya en local, usamos nuestro editor favorito:

vim archivo.ovpn
Enter fullscreen mode Exit fullscreen mode

el archivo, al no existir en local, se crea nuevo y sólo necesitamos pulsar la tecla i ([INSERT]) y CTRL+shift+v para copiar el contenido.

El último paso para salir:

:wq
Enter fullscreen mode Exit fullscreen mode

Cómo comprobar las conexiones recientes

Puedes ver quién está conectado a la instancia con:

cat /var/log/openvpn/status.log
Enter fullscreen mode Exit fullscreen mode

Con un resultado como éste:

OpenVPN CLIENT LIST
Updated,2023-02-07 14:41:27
Common Name,Real Address,Bytes Received,Bytes Sent,Connected Since
[nombrearchivo],[IP de su equipo]:49161,2759574,2477388,2023-02-07 14:39:55
ROUTING TABLE
Virtual Address,Common Name,Real Address,Last Ref
10.8.0.2,gh-[name+username],[remote IP]:49161:49161,2023-02-07 14:41:26
GLOBAL STATS
Max bcast/mcast queue length,0
END
Enter fullscreen mode Exit fullscreen mode

Cómo instalar el cliente VPN en Ubuntu

🦘 Si ya tienes configurado el cliente VPN en el sistema, salta directamente al punto 4. Los puntos previos son para instalar y activar los servicios. Los pasos a seguir son para distribuciones tipo Debian.

  1. Abre un terminal e instala la paquetería necesaria

    sudo apt install openvpn network-manager-openvpn
    
  2. Activa y habilita el servicio openVPN:

    sudo systemctl start openvpn && sudo systemctl enable openvpn
    
  3. Revisa el estado del permiso con:

    sudo systemctl status openvpn
    

    obtendrás un mensaje similar a éste

    ● openvpn.service - OpenVPN service
    Loaded: loaded (/lib/systemd/system/openvpn.service; enabled; vendor preset: enabled)
    Active: active (exited) since Wed 2022-08-31 08:12:00 CEST; 3h 11min ago
    Main PID: 1427 (code=exited, status=0/SUCCESS)
    Tasks: 0 (limit: 37661)
    Memory: 0B
    CGroup: /system.slice/openvpn.service
    
  4. Sube el archivo de configuración de extensión .ovpn

Escritorio GNOME

Tras seguir los pasos de cómo cargar el archivo .ovpn, puedes comprobar tu IP de nuevo en whatismyip.com y verificar si ha ido todo correcto.

Esto es todo, muy sencillo por ejemplo si tienes un servidor NAS en casa pero no quieres conectarlo a la red pública por privacidad. O tienes una cuenta compartida de algún servicio de streaming y necesitas que tu dispositivo se identifique como "hogar" una vez al mes ;-)

Termino este tutorial igual que como lo empecé, aconsejando que la paquetería de seguridad sea debidamente actualizada.

VPN known issues

Timeout error

En caso de que tengas un timeout en el log[1] y estás usando un escritorio distinto a GNOME, reinicia el servicio de network-manager. Dos opciones:

sudo service network-manager restart
Enter fullscreen mode Exit fullscreen mode

o en su lugar

sudo systemctl restart systemd-networkd
Enter fullscreen mode Exit fullscreen mode

Ubuntu usa network-manager en lugar del servicio por defecto de otras distribuciones.

[1] Obtén información tecleando:

grep openvpn /var/log/syslog
Enter fullscreen mode Exit fullscreen mode

Slack

Encendiendo o apagando la VPN, Slack tendrá un retraso en la conexión de al menos 30-40 segundos en la app de Slack, como si se quedara desconectado. Vía web no me ha ocurrido y tampoco con otra aplicación.

Kubuntu

Hay un bug en KDE no resuelto. Importamos el archivo openvpn en la interfaz del network-manager. Se conecta, timeout, pero no tenemos más pistas. Lo llamativo es que conectándonos vía terminal va perfectamente:

sudo openvpn —config [file].ovpn
Enter fullscreen mode Exit fullscreen mode

Hemos de abrir el archivo openvpn y extraer el bloque key en un archivo independiente. El bloque es algo como esto:

-----BEGIN OpenVPN Static key V1-----
92e2de5ae643729863zzzz4a0ebe952
.
.
.

cc05zxzxczczxxczxzxczxce902b498a5
-----END OpenVPN Static key V1-----

Enter fullscreen mode Exit fullscreen mode

Sálvalo con la extensión [archivo].key

Por ello:

  1. Abre la conexión openVPN ya creada en networkmanager.
  2. Elige "Advanced..." en la pestaña VPN, luego TLS Settings, y cambia sólo dos cosas:
    1. Modo a TLS-Crypt
    2. y el hueco de "Key File", usa la ruta del archivo .key creado anteriormente. ¡No lo elimines!

Et voilà, la conexión funcionará.

Información sobre este bug:

Bug #1847144 “network-manager-openvpn config import ignores tls-...” : Bugs : network-manager-openvpn package : Ubuntu

Top comments (0)