Introducción
¿Le gustaría acceder a Internet de forma segura desde su smartphone o portátil cuando se conecta a una red no confiable (por ejemplo, el WiFi de un hotel o una cafetería)? Por suerte, hay una manera de cumplir sus deseos. Puede conectarse de forma segura a una red no confiable como si estuviera en una red privada utilizando una Red Privada Virtual (VPN).
¿Qué es una VPN?
VPN son las siglas de Red Privada Virtual (Virtual Private Network). Ofrece la posibilidad de abrir un túnel seguro a un servidor de confianza. Todas las solicitudes se envían y reciben a través de este servidor. La ventaja es asegurar su acceso y transacciones al utilizar redes públicas, como el WiFi gratuito de un hotel.
A través de la VPN, todos los datos se cifran y se procesan a través del servidor. Los dispositivos intermedios, como routers de terceros y similares, no tienen forma de redirigir el tráfico a destinos no deseados. Además, una vez que la conexión se ha establecido con éxito, usted forma parte de la red del servidor. Ahora también se puede acceder a través del túnel VPN a otros servidores, ordenadores o dispositivos como impresoras que normalmente solo estarían accesibles en la red local del servidor. Sin embargo, dado que no todos los datos tienen que enviarse a través de un túnel cifrado, es posible configurar el cliente VPN para que solo una parte definida de las solicitudes se envíe a través del túnel VPN. El resto del tráfico se procesa normalmente a través de Internet.
En este tutorial, le guiaremos a través de los pasos para configurar un servidor OpenVPN en Ubuntu 18.04.
Requisitos
Necesita tener acceso a un servidor Ubuntu 18.04 para alojar su OpenVPN para completar este tutorial. Antes de comenzar esta guía, también necesita configurar un usuario no raíz con permisos sudo. Puede instalar fácilmente su servidor siguiendo nuestro tutorial sobre cómo configurar un servidor Ubuntu.
Además, necesitará un ordenador independiente que actúe como autoridad de certificación (CA). Técnicamente, puede utilizar su servidor OpenVPN. Sin embargo, no lo recomendamos, ya que expondrá su VPN a fallos de seguridad. Según la documentación oficial de OpenVPN, debe ubicar la autoridad de certificación en un ordenador independiente dedicado a importar y firmar solicitudes de certificados. Por lo tanto, asumimos que su autoridad de certificación se encuentra en un servidor Ubuntu 18.04 independiente que también tiene un usuario no raíz con permisos sudo y un cortafuegos básico. A lo largo de esta guía, todos los pasos de instalación y configuración serán lo más sencillos posible para cada una de las instalaciones. También puede echar un vistazo a nuestro tutorial sobre cómo configurar un servidor OpenVPN en Docker.
Paso 1 – Instalar OpenVPN y EasyRSA
Primero, actualice el índice de paquetes de su servidor VPN e instale OpenVPN. Puede instalar OpenVPN usando apt porque está disponible en los repositorios predeterminados de Ubuntu:
|
1 2 |
sudo apt update sudo apt install openvpn |
Paso 2: Crear una autoridad de certificación
Cree una autoridad de certificación (CA) simple para emitir certificados de confianza para el servidor OpenVPN. Para hacer esto, descargue la última versión de EasyRSA tanto en su máquina CA como en el servidor OpenVPN usando wget. Para obtener la última versión, vaya a la página de lanzamientos (Releases) del proyecto oficial de GitHub de EasyRSA, copie el enlace de descarga para el archivo que termina en .tgz y péguelo en el siguiente comando:
|
1 |
wget -P ~/ https://github.com/OpenVPN/easy-rsa/releases/download/v3.0.4/EasyRSA-3.0.4.tgz <span class="s1">--no-check-certificate</span> |
A continuación, extraiga el archivo tarball:
|
1 2 |
cd ~ tar xvf EasyRSA-3.0.4.tgz |

En este punto, todo el software requerido se ha instalado correctamente en su ordenador CA y en el servidor.
Paso 3 – Configurar las variables de EasyRSA y crear la CA
EasyRSA viene con un archivo de configuración que puede editar para definir una serie de variables para su CA utilizando este comando:
|
1 |
cd ~/EasyRSA-3.0.4/ |
Hay un archivo en el directorio con el nombre vars.example. Realice una copia de este archivo y nombre la copia vars sin extensión de archivo:
|
1 |
cp vars.example vars |
Use su editor de texto preferido para abrir este nuevo archivo:
|
1 |
nano vars |
A continuación, busque los ajustes que establecen los valores predeterminados de los campos para los nuevos certificados. Será similar a esto:
|
1 2 3 4 5 6 |
#set_var EASYRSA_REQ_COUNTRY "US" #set_var EASYRSA_REQ_PROVINCE "California" #set_var EASYRSA_REQ_CITY "San Francisco" #set_var EASYRSA_REQ_ORG "Copyleft Certificate Co" #set_var EASYRSA_REQ_EMAIL "me@example.net" #set_var EASYRSA_REQ_OU "My Organizational Unit" |
Actualice estas variables con los valores que desee, como se muestra a continuación:
|
1 2 3 4 5 6 |
set_var EASYRSA_REQ_COUNTRY "SL" set_var EASYRSA_REQ_PROVINCE "Zurich" set_var EASYRSA_REQ_CITY "Zurich City" set_var EASYRSA_REQ_ORG "CloudSigma" set_var EASYRSA_REQ_EMAIL "admin@example.com" set_var EASYRSA_REQ_OU "Community" |
Guarde y cierre el archivo una vez que esté listo. El siguiente paso es llamar al script easyrsa y ejecutarlo con la opción init-pki para iniciar la infraestructura de clave pública en el servidor CA:
|
1 |
./easyrsa init-pki |

A continuación, ejecute el comando build-ca con la opción nopass para que no se le solicite una contraseña cada vez que interactúe con su CA:
|
1 |
./easyrsa build-ca nopass |
En la salida, se le pedirá que confirme el nombre común para su CA:

Con eso, su CA ya está lista y preparada para comenzar a firmar solicitudes de certificados.
Paso 4 – Generar el certificado del servidor, la clave y los archivos de cifrado
Una vez que la CA esté lista, puede generar la clave privada y la solicitud de certificado desde el servidor y luego enviarla a la CA para su firma creando el certificado requerido. Primero, navegue al directorio EasyRSA en el servidor OpenVPN:
|
1 |
cd EasyRSA-3.0.4 |
Desde allí, ejecute el script easyrsa con la opción init-pki. Aunque ya haya ejecutado este comando en el equipo de la CA, este comando también debe ejecutarse aquí. Esto se debe a que los directorios PKI del servidor y de la CA son diferentes:
|
1 |
./easyrsa init-pki |
Luego llame al script easyrsa nuevamente, esta vez con la opción gen-req, seguida del nombre genérico del equipo:
|
1 |
./easyrsa gen-req server nopass |
Esto creará una clave privada para el servidor y un archivo de solicitud de certificado llamado server.req. Copie la clave del servidor en el directorio /etc/openvpn/:
|
1 |
sudo cp ~/EasyRSA-3.0.4/pki/private/server.key /etc/openvpn/ |
Transfiera el archivo server.req a su equipo CA utilizando un método seguro (como SCP en el siguiente ejemplo):
|
1 |
scp ~/EasyRSA-3.0.4/pki/reqs/server.req cloudsigma@your_CA_ip:/tmp |
A continuación, navegue al directorio EasyRSA en su equipo CA:
|
1 |
cd EasyRSA-3.0.4/ |
Use el script easyrsa nuevamente para importar el archivo server.req y agregue su nombre común después de la ruta del archivo:
|
1 |
./easyrsa import-req /tmp/server.req server |
Luego, firme la solicitud ejecutando el script easyrsa con la opción sign-req seguida del tipo de solicitud y el nombre común. Para la solicitud de certificado del servidor OpenVPN, asegúrese de utilizar el tipo de solicitud server:
|
1 |
./easyrsa sign-req server server |
La salida le pide que verifique que la solicitud proviene de una fuente de confianza. Escriba yes y presione Enter para confirmar. Compruebe los detalles que se muestran a continuación para garantizar la precisión. Tenga en cuenta que esta solicitud aún no ha sido verificada por contraseña.
Solicite el asunto y fírmelo como un certificado de servidor por 3650 días:

Si ha cifrado la clave de la CA, se le pedirá la contraseña en este punto. A continuación, utilice un método seguro para transferir el certificado firmado de vuelta a su servidor VPN:
|
1 |
scp pki/issued/server.crt siigma@your_server_ip:/tmp |
Transfiera el archivo ca.rt al servidor antes de cerrar la sesión en el equipo de la CA:
|
1 |
scp pki/ca.crt siigma@our_server_ip:/tmp |
A continuación, inicie sesión de nuevo en su servidor OpenVPN y copie los archivos server.crt y ca.crt en su directorio /etc/openvpn/:
|
1 |
sudo cp /tmp/{server.crt,ca.crt} /etc/openvpn/ |
A continuación, navegue a su directorio EasyRSA:
|
1 |
cd ~/EasyRSA-3.0.4/ |
Introduzca el siguiente código para crear una clave Diffie-Hellman fuerte que pueda utilizar durante el intercambio de claves:
|
1 |
./easyrsa gen-dh |
Cuando termine, genere una firma HMAC para mejorar la funcionalidad de comprobación de estado TLS del servidor:
|
1 |
openvpn --genkey --secret ta.key |
Cuando se complete el comando, copie los dos nuevos archivos al directorio /etc/openvpn/:
|
1 2 |
sudo cp ~/EasyRSA-3.0.4/ta.key /etc/openvpn/ sudo cp ~/EasyRSA-3.0.4/pki/dh.pem /etc/openvpn/ |
De esta manera, se generan todos los certificados y archivos de clave requeridos por el servidor. Ahora, puede crear el certificado y la clave adecuados que el equipo cliente utilizará para acceder al servidor OpenVPN.
Paso 4 – Generar el certificado del cliente y el par de claves
A continuación, crearemos una clave de cliente y varios certificados. Si tiene varios clientes, puede repetir este proceso para cada cliente. Tenga en cuenta, sin embargo, que debe pasar un valor de nombre único al script para cada cliente. En este tutorial, llamaremos al primer par de certificado/clave client1. Primero, cree una estructura de directorios en su directorio de inicio para almacenar los certificados de cliente y los archivos de clave:
|
1 |
mkdir -p ~/client-configs/keys |
Dado que guarda el par de certificado/clave y el archivo de configuración del cliente en este directorio por razones de seguridad, ahora debería revocar los permisos:
|
1 |
chmod -R 700 ~/client-configs |
A continuación, vuelva al directorio EasyRSA y ejecute el script easyrsa con las opciones gen-req y nopass, así como el nombre genérico del cliente:
|
1 2 |
cd ~/EasyRSA-3.0.4/ ./easyrsa gen-req client1 nopass |
Presione Enter para confirmar el nombre común. Después de eso, copie el archivo client1.key en el directorio /client-configs/keys/ creado anteriormente:
|
1 |
cp pki/private/client1.key ~/client-configs/keys/ |
A continuación, utilice un método seguro para transferir el archivo client1.req a su equipo de CA:
|
1 |
scp pki/reqs/client1.req sigma@your_CA_ip:/tmp |
Inicie sesión en su equipo de CA, navegue al directorio EasyRSA e importe la solicitud de certificado:
|
1 2 3 |
ssh siigma@your_CA_ip cd EasyRSA-3.0.4/ ./easyrsa import-req /tmp/client1.req client1 |

Luego, al igual que en el paso anterior, firme la solicitud en el servidor. Pero esta vez debe especificar el tipo de solicitud del cliente:
|
1 |
./easyrsa sign-req client client1 |
En la solicitud, escriba yes para confirmar que desea firmar la solicitud de certificado y que la solicitud de certificado proviene de una fuente de confianza. Ingrese la palabra “yes” para continuar o ingrese cualquier otra cosa para descartar:
|
1 |
Confirmar detalles de la solicitud: Yes |

Si ha cifrado la clave de la CA, también se le pedirá que introduzca la contraseña aquí. Esto creará un archivo de certificado de cliente llamado client1.crt. Transfiera este archivo de vuelta al servidor:
|
1 |
scp pki/issued/client1.crt siigma@your_server_ip:/tmp |
Conéctese de nuevo por SSH a su servidor OpenVPN y copie el certificado de cliente en el directorio / client-configs / keys /:
|
1 |
cp /tmp/client1.crt ~/client-configs/keys/ |
A continuación, copie los archivos ca.crt y ta.key en el directorio / client-configs / keys /:
|
1 2 |
cp ~/EasyRSA-3.0.4/ta.key ~/client-configs/keys/ sudo cp /etc/openvpn/ca.crt ~/client-configs/keys/ |
Al mismo tiempo, todos los certificados y claves del servidor y del cliente se generaron y guardaron en los directorios correspondientes del servidor. Ahora puede continuar con la configuración de OpenVPN en el servidor.
Paso 5 – Configuración del servicio OpenVPN
Después de generar los certificados de cliente y servidor, puede configurar el servicio OpenVPN para utilizar estas credenciales. Primero, copie el archivo de configuración de ejemplo de OpenVPN en su directorio de configuración y luego extráigalo para usarlo como base de la configuración:
|
1 2 |
sudo cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn/ sudo gzip -d /etc/openvpn/server.conf.gz |
Abra el archivo de configuración del servidor en su editor de texto preferido:
|
1 |
sudo nano /etc/openvpn/server.conf |
A continuación, busque la sección HMAC buscando el comando tls-auth:
|
1 |
tls-auth ta.key 0 # Este archivo es secreto |
Busque la sección de la contraseña buscando la línea de contraseña comentada. El cifrado AES-256-CBC ofrece un buen nivel de cifrado y es ampliamente compatible. La línea no debería estar comentada, pero si lo está, elimine el “;” de delante:
|
1 |
cipher AES-256-CBC |
Debajo de eso, añada un comando Auth para seleccionar el algoritmo de resumen de mensajes HMAC. SHA256 es una buena opción para esto:
|
1 |
auth SHA256 |
A continuación, busque la línea con la declaración dh que define los parámetros de Diffie-Hellman. Debido a algunos cambios recientes en EasyRSA, el nombre del archivo de clave Diffie-Hellman puede ser diferente del nombre de archivo que figura en el archivo de configuración de ejemplo del servidor. Si es necesario, cambie el nombre de archivo que aparece aquí eliminando 2048 para alinearlo con la clave del paso anterior:
|
1 |
dh dh.pem |
Por último, busque los ajustes de usuario y grupo y elimine el “;” al principio de cada línea:
|
1 2 |
user nobody group nogroup |
Hasta ahora, los cambios que ha realizado en el archivo server.conf de ejemplo deberían permitir que OpenVPN funcione.
Paso 6 – Configuración de red del servidor
Configure el reenvío de IP para enrutar correctamente el tráfico a través de la VPN. Esto es esencial para la funcionalidad de VPN que proporciona su servidor:
|
1 |
sudo nano /etc/sysctl.conf |
Busque la línea comentada que establece net.ipv4.ip_forward. Elimine el carácter “#” del principio de la línea para descomentar esta configuración:
|
1 |
net.ipv4.ip_forward=1 |
Guarde el archivo y ciérrelo una vez que haya terminado. Para leer el archivo y ajustar los valores para la sesión actual, escriba:
|
1 |
sudo sysctl -p |

A continuación, añada la interfaz de red pública de su máquina:
|
1 |
ip route | grep default |
Su interfaz pública es la cadena dentro de la salida de este comando que sigue a la palabra “dev”. Por ejemplo, este resultado muestra la interfaz llamada ens3.

Abra el archivo /etc/ufw/before.rules para añadir la configuración correspondiente:
|
1 |
$ sudo nano /etc/ufw/before.rules |
Hacia la parte superior del archivo, añada las líneas resaltadas a continuación para establecer la política predeterminada para la cadena POSTROUTING en la tabla nat y enmascarar cualquier tráfico que provenga de la VPN. Cambie ens3 en la línea -A POSTROUTING a continuación por la interfaz que encontró en el comando anterior:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
# rules.before # Reglas que deben ejecutarse antes de las reglas añadidas por la línea de comandos de ufw. Personalizadas # las reglas deben añadirse a una de estas cadenas: # ufw-before-input # ufw-before-output # ufw-before-forward # START OPENVPN RULES # Reglas de la tabla NAT *nat :POSTROUTING ACCEPT [0:0] # Permitir tráfico desde el cliente OpenVPN a wlp11s0 (¡cámbielo por la interfaz que descubrió!) -A POSTROUTING -s 10.8.0.0/8 -o ens3 -j MASQUERADE COMMIT # END OPENVPN RULES # No elimine estas líneas requeridas, de lo contrario habrá errores . . . |
Guarde el archivo y ciérrelo una vez que haya terminado. A continuación, debe indicarle a UFW que también permita los paquetes reenviados de forma predeterminada. Para hacer esto, abra el archivo /etc/default/ufw:
|
1 |
sudo nano /etc/default/ufw |
En el interior, busque la directiva DEFAULT_FORWARD_POLICY y cambie el valor de DROP a ACCEPT:
|
1 |
DEFAULT_FORWARD_POLICY="ACCEPT" |
Guarde y cierre el archivo cuando haya terminado. A continuación, ajuste el firewall para habilitar el tráfico hacia OpenVPN. Si no cambió el puerto y el protocolo en el archivo /etc/openvpn/server.conf, deberá abrir el tráfico UDP al puerto 1194. Si modificó el puerto y/o el protocolo, sustituya los valores que seleccionó aquí. En caso de que haya olvidado agregar el puerto SSH al seguir el tutorial de requisitos previos, agréguelo aquí también:
|
1 2 |
sudo ufw allow 1194/udp sudo ufw allow OpenSSH |
Después de agregar esas reglas, deshabilite y vuelva a habilitar UFW para reiniciarlo y cargar los cambios de todos los archivos que ha modificado:
|
1 2 |
sudo ufw disable sudo ufw enable |

¡Felicitaciones, su servidor ahora está configurado para manejar correctamente el tráfico de OpenVPN!
Conclusión
Si siguió este tutorial hasta el final, ahora podrá navegar por Internet de forma segura. Podrá mantener su identidad, ubicación y tráfico lejos de miradas indiscretas.
¡Feliz informática!
Comentarios
Aún no hay comentarios. Sea el primero.