⚠️ 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
- Saber cuál es nuestra IP real, podemos verla en whatismyip.com.
-
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
-
Damos permisos de ejecución al script:
chmod +x openvpn-install.sh
-
Ejecutamos el script:
./openvpn-install.sh
-
Los primeros pasos para configurar la VPN son:
- IP pública del servidor
- Activar o no el soporte IPv6 (por defecto: no)
- Puerto del VPN (por defecto: 1194)
- Protocolo: (UDP)
- DNS: En mi caso, he elegido OpenDNS (8)
- Activar compresión (por defecto: no)
- Personalizar las opciones de cifrado (por defecto: no)
¡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.
También podemos revisar el estado de openVPN con este comando:
systemctl status openvpn
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
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
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]:
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.
- Nombre del perfil.
- 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.
- 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
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
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
Cómo comprobar las conexiones recientes
Puedes ver quién está conectado a la instancia con:
cat /var/log/openvpn/status.log
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
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.
-
Abre un terminal e instala la paquetería necesaria
sudo apt install openvpn network-manager-openvpn
-
Activa y habilita el servicio openVPN:
sudo systemctl start openvpn && sudo systemctl enable openvpn
-
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
Sube el archivo de configuración de extensión .ovpn
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
o en su lugar
sudo systemctl restart systemd-networkd
Ubuntu usa network-manager en lugar del servicio por defecto de otras distribuciones.
[1] Obtén información tecleando:
grep openvpn /var/log/syslog
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
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-----
Sálvalo con la extensión [archivo].key
Por ello:
- Abre la conexión openVPN ya creada en networkmanager.
- Elige "Advanced..." en la pestaña VPN, luego TLS Settings, y cambia sólo dos cosas:
- Modo a TLS-Crypt
- 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:
Top comments (0)