Bienvenidos a este tutorial sobre como montar nuestra propia VPN sin logs mediante la configuración de un servidor OpenVPN en una máquina en la nube.
Antes de empezar con el tutorial, deberemos de crear una máquina en la nube, yo he usado el VPS de DigitalOcean en el cual tengo una máquina Ubuntu 20.04 por 5$ al mes, puedes usar el siguiente enlace para obtener 100$ gratis.
Crear una máquina en la nube
Como he comentado al principio, he elegido DigitalOcean como VPS, pero existen otros como Linode, Azure o AWS. Para crear una máquina Ubuntu 20.04 deberemos de ir a la parte superior derecha de nuestro panel y seleccionar Create -> Droplets.

Elegiremos la siguiente imagen con el plan más económico (Ubuntu 20.04 por 5$ al mes, recuerda que tienes 100$ gratis si usas mi enlace). También podremos elegir la ubicación de nuestro servidor, que en mi caso usaré Frankfurt (Alemania) y crear unas credenciales para el usuario root.

Generar claves SSH
En el paso anterior, creamos una contraseña para el usuario root, pero el uso de contraseñas sin cifrar para iniciar sesión en nuestra máquina no es muy buena idea ya que estas pueden quedar expuestas en la red al no estar cifradas. Por lo tanto, generaremos unas claves para que solo las máquinas que disponga de ellas (y la contraseña) puedan iniciar sesión.
Podemos generar las claves de la siguiente manera:
En Windows (con PowerShell):
PS C:\> Add-WindowsCapability -Online -Name OpenSSH.Client*
En Linux y Mac
ssh-keygen -t rsa -b 4096

Iniciar sesión en el servidor y actualizar
Iniciamos sesión en nuestro servidor, recuerda que puedes ver la IP de tu máquina en el panel principal de DigitalOcean.

ssh root@[IP]
Escriba la contraseña que especificó a la hora de crear la máquina y ejecute los comandos de actualización.
apt-get update && apt-get upgrade
Crear un usuario
Si bien el usuario root nos permite realizar cualquier acción sobre la máquina, no es recomendable que esté habilitado para SSH, por lo tanto, crearemos un usuario con permisos para el uso de sudo y bash como shell predeterminado.
useradd -G sudo -m jolmedo -s /bin/bash
Después crearemos una contraseña.
passwd jolmedo
Copiar las claves SSH al servidor
En este paso, vamos a copiar las claves SSH generadas del paso anterior a nuestra máquina en la nube.
En Windows (con PowerShell):
type $env:USERPROFILE\.ssh\id_rsa.pub | ssh IP "cat >> .ssh/authorized_keys"
En Linux y Mac:
ssh-copy-id jolmedo@[IP]
Deshabilitar autenticación por contraseña y configuración de seguridad para SSH
Una vez tenemos las claves SSH en el servidor, procederemos a deshabilitar la autenticación por contraseña y a habilitar la autenticación por clave pública. Editamos el archivo sshd
nano /etc/ssh/sshd_config
Antes de nada, vamos a cambiar el puerto por defecto de SSH, puedes usar cualquier puerto (yo usaré el 22022), esto ayudará a que los escáneres no puedan intentar iniciar sesión en nuestro servidor con credenciales por defecto.
# Port 22
Port 22022
Deshabilitamos autenticación por contraseña (solo se podrá iniciar sesión con clave pública).
PasswordAuthentication no
Deshabilitamos el inicio de sesión con root.
PermitRootLogin no
Por último, reiniciamos SSH para aplicar cambios.
systemctl restart sshd
Configuración de OpenVPN
Aquí viene el plato fuerte del tutorial, configurar OpenVPN puede llevarnos algún tiempo (instalación de paquetes, generar las claves, configurar IPTables, generar archivos de configuración, etc), pero gracias al trabajo de un usuario de GitHub, podremos hacerlo de una manera muy sencilla.
En primer lugar, descarga el repositorio.
git clone https://github.com/Nyr/openvpn-install.git
Nos posicionamos en el directorio.
cd openvpn-install/
Ejecutamos el script.
sudo bash openvpn-install.sh
NOTA: Siempre que descargue cualquier script, asegúrate que no haya nada sospechoso en él.
Una vez ejecutado, tan solo deberemos de responder a unas pocas preguntas.

Si os habéis fijado en la captura anterior, he cambiado el puerto por defecto de OpenVPN al 443, esto es debido a que algunas redes pueden bloquear dicho puerto. He decidido usar 443 (el mismo que HTTPS) y os preguntareis que esto puede dar algún problema pero, mientras HTTPS usa TCP, OpenVPN usa UDP, por lo tanto, no habrá ningún conflicto entre ellos.
Después de contestar a las preguntas, el proceso de instalación comenzará. Cuando termine, podremos ver nuestro archivo de configuración .ovpn en la carpeta raíz del usuario root, vamos a moverlo a la carpeta del usuario jolmedo y a asignarlo como propietario.
sudo mv /root/hackpuntes-vps.ovpn ~
sudo chown jolmedo hackpuntes-vps.ovpn
Deshabilitar registros en nuestra VPN
Con todo ya preparado, solo nos queda hacer una cosa muy importante en la parte del servidor, y es deshabilitar los registros, para ello, vamos a modificar el siguiente archivo.
sudo nano /etc/openvpn/server/server.conf
Buscamos la línea verb 3 y lo cambiamos a verb 0. Ahora reiniciamos OpenVPN.
systemctl restart openvpn-server@server.service
Ahora ya tenemos una VPN que realmente no mantiene los registros.
Probar la VPN
Descargamos el fichero hackpuntes-vps.ovpn a nuestra máquina local y creamos una nueva conexión VPN.

Elegimos Import a saved VPN configuration…

Seleccionamos el fichero hackpuntes-vps.ovpn

Y veremos algo similar a lo siguiente:

Guardamos los cambios y ya tenemos nuestra VPN totalmente funcional y sin registro de logs.


Podemos hacer uso de WHOER para conocer información y confirmar el uso de nuestra VPN.

Muchas gracias por seguir el tutorial, compártelo si te fue útil y no dudes en preguntar en los comentarios si necesitas ayuda.