Cómo conectarte a una VPN con OpenVPN

Cómo conectarte a una VPN con OpenVPN

Sergio De Luz

OpenVPN es un cliente/servidor VPN (red privada virtual) multiplataforma. Es compatible con sistemas operativos Microsoft Windows, GNU/Linux, macOS e incluso tiene aplicaciones gratuitas para Android y iOS. Otro punto fuerte de OpenVPN es que algunos fabricantes de routers lo están incorporando en sus equipos, por lo que tendremos la posibilidad de configurar un servidor OpenVPN en nuestro router. Otro aspecto destacable es que, por ejemplo, sistemas operativos orientados a cortafuegos también lo incorporan, PFsense y OPNSense son dos distribuciones muy recomendables para utilizar OpenVPN y el resto de sus opciones de configuración.

Índice

Hay muchos servicios de VPN que podemos utilizar. Algunos de ellos son de pago y otros son gratuitos. Pero entre los que puedes elegir de los muchos que hay está OpenVPN. Un servicio lleno de herramientas, de opciones y de ventajas y del que analizaremos sus características a continuación.

 

¿Qué es?

En primer lugar debemos entender qué es una VPN. VPN significa Virtual Private Network o Red Privada Virtual. Como su propio nombre indica, se trata de un servicio o herramienta que permite crear un túnel que nos protege a través de Internet. ¿Cómo? Explicado de forma básica y sencilla, el servicio utiliza un servidor y un cliente. El cliente es lo que tú usas o instalas en el aparato que quieras y te permite conectarte a ese servidor de la VPN. Una vez instalado, se crea una especie de canal o túnel privado a través del cual la información viaja de forma segura y protegida, cifrada y anónima. Nos permite conectarnos  a Internet protegiendo nuestros datos o la confidencialidad de lo que hacemos.

OpenVPN es un software basado en software libre que nos permite levantar una red privada virtual (VPN), para conectarnos de manera remota al servidor. Este software nos permite configurar dos tipos de arquitecturas de VPN:

  • VPN de acceso remoto: tenemos un servidor VPN central, y varios clientes VPN con el software instalado en su ordenador, smartphone, tablet u otro dispositivo, y todos se conectan de manera centralizada al servidor VPN.
  • VPN Site-to-Site: esta arquitectura nos permite intercomunicar diferentes sedes para compartir los recursos a través de una red segura, protegida con cifrado punto a punto. Este tipo de VPN nos permite intercomunicar oficinas, sedes de empresas etc.

Algunas características muy importantes de OpenVPN son que soporta una amplia configuración, tanto para mejorar el rendimiento como también la seguridad. Está basado en SSL/TLS, por tanto, podremos crear certificados digitales para la autenticación de los clientes VPN, además, también podríamos autenticarnos con certificados más un usuario/contraseña que agreguemos al sistema. OpenVPN es mucho más fácil de configurar que IPsec, y gracias al gran soporte de la comunidad, podremos encontrar OpenVPN en todos los sistemas operativos de escritorio, servidores e incluso en smartphones y tablets.

 

Qué ventajas nos da una VPN

Ahora que sabes que es una VPN, te estarás preguntando en que te puede beneficiar. Pues bien, los beneficios pueden ser muchos, pero podemos decir que estas destacan por algunos que son muy importantes, y que normalmente son el motivo por el cual los usuarios se deciden por utilizar una VPN.

  • Ocultar la dirección IP o cambiarla

La dirección IP que utilizamos se cambia cuando usas una VPN. No tienes por qué mostrar la tuya así que esto nos da una mayor seguridad o mayor privacidad ya que no podrán detectar desde dónde te conectas en realidad.

  • Navegación segura y encriptada:

Es lo más típico de las VPN, siendo esta su ventaja más notable. Usando este tipo de conexiones, nosotros y nuestra información estaremos más protegidos contra posibles ataques de hackers o sniffers de red que capturan nuestro tráfico. Las aplicaciones que tiene esto pueden ser muy numerosas, desde una conexión a una red Wi-Fi abierta a realizar envíos de datos desde un lugar a un servidor de forma segura.

  • Acceso a contenido bloqueado:

Esto está más orientado al ocio, pero puede ser de gran ayuda en muchos ámbitos profesionales también. En muchas ocasiones el contenido que ofrecen los servicios no es el mismo en todos los países, por lo cual con una VPN nos podemos situar en el país que decidamos para poder ver el mismo contenido que se ve en ese lugar. O también, en algunos casos, es realmente útil si nos encontramos en países o lugares en los que se bloquean determinadas webs o contenidos y usando una VPN podemos saltarnos ese bloqueo.

  • Navegación anónima:

Siempre que navegamos por internet queda un registro, un rastro que permite ver que sitios hemos visitado. Esto se guarda en historiales y con las cookies. Con una VPN no tendremos que preocuparnos de esto.

  • Fáciles de usar

Otra de las ventajas es que son herramientas fáciles de usar sin apenas complicaciones y generalmente basta con pulsar un botón para que empiece a tener efecto la VPN cuando naveguemos a través de Internet. Aunque dependerá del partido que quieras sacarle.

 

Desventajas de una VPN

Cómo siempre que hablamos de algún servicio, también es bueno ver las desventajas que este nos da. En el caso de las VPN se puede llegar a decir que los beneficios superan a los inconvenientes, pero algunos de ellos pueden hacer que no queramos usar este tipo de aplicaciones.

  • Velocidad y ancho de banda

Esto siempre será un factor importante. Debido a la encriptación de la información y al camino por diferentes servidores que hacemos, tendremos una reducción que en muchos casos puede ser muy notable en la velocidad y el ancho de banda.

  • Seguridad

Un gran porcentaje de las infecciones de equipos con virus y malware, es por culpa de la propia navegación de los usuarios, la cual se hace de forma indebida muchas veces. Por lo cual, que usemos una VPN con datos encriptados, no quita de que siga siendo necesario un buen antivirus.

 

Rendimiento de OpenVPN

OpenVPN es una de las soluciones más efectivas y utilizadas hoy en día, para establecer conexiones VPN seguras. Como hemos citado, cuenta con muchos beneficios y características, que han llevado a esta herramienta hasta tal punto. Pero uno de los más importantes, es su rendimiento en cuanto a velocidad, latencia y estabilidad. La velocidad de OpenVPN puede tener alguna variación según la configuración que le apliquemos y los recursos con los que cuente el servidor. En cambio, de forma general OpenVPN es muy conocido por disponer de velocidades rápidas y muy confiables. Este está basado en UDP, lo cual quiere decir que no hay retransmisión de paquetes. Lo cual ayuda a mejorar la velocidad de conexión. Por otro lado, su propia compresión de datos también optimiza mucho la velocidad.

En cuanto a la latencia, estamos ante otro aspecto muy importante en el rendimiento de OpenVPN. Este se refiere a la capacidad que tiene de establecer las comunicaciones entre cliente y servidor de forma rápida y eficiente. Con este bajo nivel de latencia, es muy útil para utilizar con aplicaciones que requieren una transmisión de datos en tiempo real. Como puede ser el streaming. Pero para esto también se necesita estabilidad. Esto nos indica la capacidad de OpenVPN de mantener la calidad de la conexión a Internet.  Por lo general, no vamos a tener muchos problemas con la estabilidad, debido a que OpenVPN es estable y confiable. Por lo cual no tendremos problemas de desconexiones, o tasas de transmisión de paquetes muy bajas.

Por lo cual, con OpenVPN estamos ante un servicio muy confiable, y excelente en cuanto a velocidad, latencia y estabilidad. En todo caso, en gran parte dependerá de nuestra conexión a Internet, y de los recursos que tenga el equipo donde se esté utilizando. Esto quiere decir, que OpenVPN se puede ver afectado por factores externos, los cuales pueden afectar a su rendimiento y capacidades. Lo cual repercute directamente en la experiencia de usuario.

 

¿Para qué sirve?

Si creamos un servidor OpenVPN en nuestro hogar, nos puede servir para conectarnos a Internet de una manera segura desde cualquier red ya sea cableada o WiFi, con cifrado WEP/WPA o sin cifrar. Todo el tráfico irá cifrado a través de un túnel desde nuestro ordenador donde nos conectemos, hasta nuestra casa y desde allí saldrá a Internet, es como estar conectados a Internet en nuestro hogar. Debemos tener en cuenta varios factores, como tener una buena velocidad de subida (30Mbps o superior), y tener en nuestro hogar una dirección IP pública, ya que si tenemos CG-NAT no podremos conectarnos debido a que no podremos hacer reenvío de puertos en el router.

Al montar un servidor OpenVPN en nuestro hogar, también podremos acceder a todos y cada uno de los recursos compartidos que tengamos, como servidores Samba, FTP e incluso acceder a la impresora, cámaras IP que tengamos conectadas etc. Todos los permisos de acceso serían tal y como si estuviéramos físicamente en nuestro hogar. OpenVPN es una solución para VPN que implementa conexiones de capa 2 o 3, dependiendo del modo de conexión elegido, funcionará de un modo u otro, además, un detalle importante es que la gran mayoría de sistemas operativos hoy en día soportan OpenVPN, aunque no suelen incorporarlo los fabricantes de hardware para firewalls o routers.

OpenVPN utiliza un conjunto de protocolos SSL/TLS que trabajan en la capa de transporte, y tenemos dos tipos de funcionamiento:

  • TUN: El controlador TUN emula un dispositivo punto a punto, es utilizado para crear túneles virtuales operando con el protocolo IP. De esta forma, se pueden encapsular todos los paquetes que se transportan a través de él como segmentos TCP o datagramas UDP (más adelante veréis que escogemos UDP en lugar de TCP, y preguntaréis que por qué ya que TCP es conectivo, fiable y orientado a conexión). Las máquinas que queden detrás de cada uno de los extremos del enlace pertenecerán a subredes diferentes.
  • TAP: Simula una interfaz de red Ethernet, más comúnmente conocido como modo puente o bridge, estos túneles virtuales encapsulan directamente paquetes Ethernet. Esta situación permite empaquetar entramados diferentes al IP. Las máquinas situadas detrás de cada uno de los extremos del enlace pueden operar como parte de la misma subred (si se utiliza el protocolo IP). El modo de funcionamiento puente es particularmente útil para enlazar usuarios remotos, ya que éstos pueden conectarse a un mismo servidor y virtualmente formar parte de la red principal, sin embargo, si la red privada donde se conecta el origen coincide con la de destino, tendremos problemas de enrutamiento y la comunicación no funcionará.

En el manual utilizaremos TUN y veremos cómo creamos una subred virtual 10.8.0.0/24 donde estarán los clientes OpenVPN cuando se conecten. De esta manera, será mucho más fácil identificar a los clientes VPN que tengamos conectados en la red local.

En este manual os voy a explicar cómo hacerlo en GNU/Linux (en Debian 10), aunque en esencia, es lo mismo para Windows, únicamente cambian los comandos en la consola (cmd.exe), los certificados y las llaves, son los mismos para los dos, es decir, puedes crear TODO en GNU/Linux y luego pasarlo a Windows para usarlo (ya sea cliente o servidor), únicamente deberás cambiar la extensión del cliente/servidor .conf por .ovpn, aunque en las últimas versiones de OpenVPN para Windows ya nos permite reconocer y utilizar los archivos de configuración .conf, por lo que no tendremos que cambiar la extensión.

En este manual os voy a enseñar cómo realizar una configuración de OpenVPN muy segura, personalizando los algoritmos de cifrado simétrico, asimétrico y de hash. De esta forma, podremos tener el mejor cifrado posible de las comunicaciones.

 

¿Qué hace buena una VPN?

Siempre que busquemos utilizar una conexión VPN, es recomendable fijarse en algunos factores que definen las cualidades de un servicio o software. Todo con la finalidad de aprovechar sus funcionalidades al máximo.

Cifrado de IP: Se trata de una de las funciones principales de una VPN, ocultar nuestra dirección IP y otras. Esto nos permite realizar el envío y la recepción de la información cifrada, de forma que tenemos la tranquilidad de que nadie excepto nosotros, tiene acceso a la misma. Por lo cual usar un buen servicio es muy importante.

Cifrado de protocolos: Siempre que navegamos por internet de forma normal, dejamos un pequeño rastro el cual, puede conducir hasta nosotros, y para ello se utilizan las cookie se historiales de búsqueda y navegación. Cifrar las cookies es muy importante, pues impide que puedan obtener acceso a información privada, como pueden ser datos personales, datos bancarios y en general, el contenido de nuestro equipo.

Autentificación: Lo más recomendable es un servicio que cuente con autentificación en dos factores, de forma que al iniciar sesión, este servicio nos envíe un mensaje con un código, y luego poder realizar la conexión.

Kill Switch: En el caso de que la conexión se interrumpa de forma inesperada, la VPN hará lo mismo. Que el servicio sea capaz de finalizar los programas que se estén usando al generarse este corte, es importante para que ninguno tenga la posibilidad de enviar ningún tipo de información no cifrada.

 

Resumen de la criptografía a utilizar

  • Certificados digitales: Usaremos EC (Curvas Elípticas) para la creación de la Infraestructura de Clave Pública. Crearemos tanto los certificados de la CA (Autoridad de Certificación), como también los certificados del servidor y de los clientes VPN que quieran conectarse. El algoritmo EC utilizado es secp521r1, aunque tenemos disponibles muchos otros. El algoritmo hash que utilizaremos será SHA512. Un detalle importante es que no todos los clientes/servidores OpenVPN lo soportan, debemos tener actualizado nuestro OpenVPN y las librerías criptográficas, pero hoy en día es raro encontrarnos en un escenario que no sea compatible.
  • Canal de control OpenVPN: utilizaremos como mínimo TLS 1.2, y siempre utilizando PFS (Perfect Forward Secrecy) basado en Diffie-Hellmann con curvas elípticas (ECDHE). Es decir, utilizaremos una selección de suites criptográficas seguras, como TLS-ECDHE-RSA-WITH-AES-256-GCM-SHA384. Si quieres comprobar si tu servidor o cliente soporta este tipo de cifrado, deberás poner en consola «openvpn –show-tls».
  • Canal de datos OpenVPN: utilizaremos el algoritmo de cifrado simétrico AES-256-GCM, el más seguro actualmente y que se ha incorporado la compatibilidad en OpenVPN 2.4 y posterior. Si quieres comprobar si tu servidor o cliente soporta este tipo de cifrado, deberás poner en consola «openvpn –show-ciphers«. Si utilizamos AES-256-GCM como cifrado en canal de datos, no usaremos ningún algoritmo de HASH ya que es AEAD, sin embargo, si utilizamos AES-256-CBC sí usaremos SHA512.

En las últimas versiones de OpenVPN, y si la librería criptográfica de tu sistema operativo lo permite, podremos usar en el canal de control el protocolo TLS 1.3. Si nos vamos a la línea de comandos del servidor o cliente OpenVPN, y ponemos la siguiente orden:

openvpn --show-tls

Podremos ver si nuestro servidor OpenVPN y/o cliente soportan TLS 1.3, en nuestro caso, tenemos un total de tres suites de cifrados que podemos usar:

  • TLS_AES_256_GCM_SHA384
  • TLS_CHACHA20_POLY1305_SHA256
  • TLS_AES_128_GCM_SHA256

Para definir TLS 1.3 en los ficheros de configuración deberemos usar el argumento «tls-ciphersuites» en lugar del típico «tls-cipher«, seguido de la suite de cifrado que queramos, las tres suites que tenemos disponibles son las más seguras que podemos usar hoy en día, además, gracias al protocolo TLS 1.3 el establecimiento de la conexión será algo más rápido, ideal para establecer el túnel VPN con rapidez.

A partir de la versión OpenVPN 2.5 en adelante, también tenemos un algoritmo de cifrado simétrico para el canal de datos de OpenVPN, podremos usar CHACHA20-POLY1305 que es un cifrado de flujo de 256 bits, y se puede utilizar para acelerar la velocidad real de la VPN que estemos configurando. Si nuestro procesador no soporta AES-NI para acelerar el tráfico de AES-GCM, entonces os recomendamos usar siempre CHACHA20-POLY1305 porque tendrás mejor rendimiento, sin embargo, si soporta AES-NI, nuestra recomendación es que realices pruebas de velocidad utilizando ambos para ver qué velocidad obtendrás. Debemos recordar que este algoritmo de cifrado simétrico es utilizado por defecto en la VPN WireGuard, una de las VPN más seguras y rápidas que podemos utilizar actualmente. En este caso, para configurar este algoritmo de cifrado, se haría de la misma forma que AES-256-GCM, poniendo «cipher» y después el nombre del cifrado tal cual os lo hemos puesto nosotros.

Adicionalmente a estas medidas de seguridad, incluiremos una firma HMAC adicional para la primera negociación de TLS, de esta forma, protegeremos el sistema de posibles ataques de denegación de servicio, de ataques UDP Port Flooding y también de ataques TCP SYN. Al conectarnos al servidor, si el cliente no posee la firma HMAC correcta será bloqueado. En versiones anteriores de OpenVPN 2.4 la directiva era tls-auth, que se encargaba únicamente de la autenticación de una clave precompartida generada por el propio OpenVPN. Ahora en versiones superiores a OpenVPN 2.4 se llama tls-crypt, la principal diferencia es que además de autenticar, también cifra el canal para que nadie sea capaz de capturar dicha clave precompartida. La configuración es muy similar, la generación de la clave es exactamente igual en ambas.

Por último, utilizaremos el protocolo UDP en lugar de TCP, porque es más fuerte frente a ataques de denegación de servicio, debemos recordar que UDP es no conectivo, no fiable y no orientado a conexión. No obstante, podremos usar TCP sin ningún problema para dotar a la VPN de todos los beneficios de este protocolo.

 

Ventajas y desventajas de OpenVPN

OpenVPN no facilita seguridad, estabilidad y muchos mecanismos de cifrado muy accesibles y sin demasiada dificultad. Pero a mayores no ofrece otras ventajas como:

  • Posibilidad de realizar una implementación de modos básicos en capa 2 o 3, por lo cual se puede lograr que los túneles sean capaces de enviar información a otros protocolos.
  • Protección de los usuarios remotos. Una vez que se establece un túnel, el firewall de la organización puede proteger el dispositivo remoto, incluso sin estar en la red local. Por otro lado, solo se podrá abrir un puerto de red hacia la red local.
  • Las conexiones OpenVPN se pueden realizar desde casi cualquier firewall. Si este cuenta con acceso a internet, se puede acceder a lugares HTTPS, por lo cual el túnel OpenVPN debería funcionar sin problemas.
  • Cuenta con soporte para Proxy. También puede funcionar a través de este, y se puede configurar para ejecutarse como un servicio TCP o UDP, y a mayores, como un servidor o como cliente.
  • Solo se tiene que abrir un puerto del firewall para permitir las conexiones. Con OpenVPN 2.0, se permiten diferentes conexiones en el mismo puerto TCP o UDP.
  • Cuenta con interfaces virtuales que nos permiten la implementación de reglas en el firewall, las cuales pueden ser muy específicas.
  • Se pueden usar los conceptos de reglas, restricciones, envío y NAT10 con los túneles OpenVPN.
  • Cuenta con mucha flexibilidad y gran cantidad de posibilidades de extensiones con scripts. Nos ofrece numerosos puntos para que sean ejecutados de forma individual durante el arranque.
  • Soporta IP dinámicas de forma transparente. Por lo cual se elimina la necesidad de usar direcciones IP estáticas.
  • No tiene problemas con la NAT. Esto es así en clientes y servidores, los cuales pueden estar usando solamente IPs privadas.
  • La instalación es relativamente sencilla y accesible.
  • Cuenta con un diseño modular, con un alto grado de simplicidad en cuestiones de seguridad y de red.

Pero, como todo lo que nos podemos encontrar en el mundo de la informática, también tiene sus desventajas las cuales nos pueden hacer decantar por esta u otra. Estas son:

  • No cuenta con compatibilidad con IPsec, el cual es un estándar para las soluciones VPN.
  • No tiene masa crítica.
  • La comunidad sigue siendo pequeña, pero crece con el paso del tiempo.
 

Implantación de OpenVPN

Implementar OpenVPN en una empresa puede proporcionar una solución segura y confiable para el acceso remoto y la conexión de redes privadas. Para ello, podemos seguir unos pasos que nos van a ayudar a que sea un proceso sencillo y guiado.

  • Planificación y diseño: Antes de implementar OpenVPN, es importante realizar una planificación y diseño cuidadosos. Determine los requisitos de la empresa, como el número de usuarios remotos, las aplicaciones y servicios que necesitan acceder, los niveles de seguridad necesarios, y los recursos de hardware y software disponibles.
  • Instalación del servidor OpenVPN: El primer paso es instalar el servidor OpenVPN en una máquina dedicada o en un servidor existente en la red interna de la empresa. Selecciona la versión adecuada de OpenVPN según el sistema operativo utilizado y sigue las instrucciones de instalación proporcionadas por el proveedor.
  • Configuración del servidor OpenVPN: Una vez instalado, configura el servidor OpenVPN según los requisitos de la empresa. Esto implica la configuración de parámetros como la dirección IP, los puertos de escucha, los certificados de seguridad, los métodos de autenticación y las políticas de enrutamiento. Asegúrate de seguir las mejores prácticas de seguridad para garantizar la protección de los datos transmitidos.
  • Creación de certificados y claves: Para establecer una conexión segura, se deben generar certificados y claves de seguridad. Utiliza herramientas como Easy-RSA para generar certificados de cliente y servidor, y asegúrate de proteger adecuadamente las claves privadas.
  • Configuración de clientes: Configura los dispositivos de los usuarios remotos con los clientes OpenVPN adecuados. Proporciona a cada usuario los archivos de configuración necesarios, incluidos los certificados y claves correspondientes. Asegúrate de instruir a los usuarios sobre cómo instalar y configurar correctamente los clientes en sus dispositivos.
  • Pruebas y resolución de problemas: Antes de implementar completamente OpenVPN en la empresa, realiza pruebas exhaustivas para asegurarte de que la conexión remota funcione correctamente. Realiza pruebas de conectividad, velocidad y estabilidad para identificar posibles problemas y solucionarlos antes de la implementación final.
  • Capacitación y soporte: Brinda capacitación a los usuarios sobre cómo utilizar correctamente OpenVPN y los protocolos de seguridad asociados. Proporciona documentación clara y guías de uso para que los usuarios comprendan cómo acceder de forma segura a los recursos de la empresa a través de OpenVPN. Además, asegúrate de contar con un equipo de soporte técnico dedicado que pueda brindar asistencia en caso de problemas o consultas.
  • Monitorización y actualización: Una vez implementado, es importante monitorear continuamente el rendimiento y la seguridad de la solución OpenVPN. Realiza actualizaciones periódicas del software y los componentes relacionados para mantenerse al día con los parches de seguridad y las mejoras funcionales.
 

Pasos a seguir para trabajar con OpenVPN

A continuación vais a poder ver en detalle cómo instalar este software, y también todo lo necesario para ponerlo en marcha con la mejor seguridad posible que nos brinda esta solución para crear una red privada virtual.

 

Descarga e instalación

Lo primero que tenemos que hacer es instalar OpenVPN en nuestro equipo, ya sea con Windows o Linux. Si utilizas Windows debes irte a la página web oficial de descargas de OpenVPN y en el asistente de instalación instalar todo. Si usas un sistema operativo como Debian (nosotros usaremos Debian 10 durante todo el manual), tendrás que introducir el siguiente comando:

sudo apt update

sudo apt install openvpn

 

Descarga de Easy-RSA 3 para los certificados

Una vez instalado, deberemos descargarnos el paquete de software Easy-RSA 3, este paquete de software sirve para la creación de los certificados digitales de forma fácil y rápida. Podremos modificar la longitud de la clave, el tipo de clave, si queremos poner una contraseña a las llaves privadas etc. En la página web oficial del proyecto Easy-RSA 3 de GitHub tenéis toda la información y la posibilidad de descargarnos un .zip con todo.

Si estás en un sistema Linux, os recomendamos utilizar la orden wget para descargarnos el .zip:

wget https://github.com/OpenVPN/easy-rsa/releases/download/v3.0.8/EasyRSA-3.0.8.tgz

A continuación, deberemos descomprimir este archivo descargado e introducirnos dentro de la carpeta para empezar a configurar el archivo vars.

tar -zxvf EasyRSA-3.0.8.tgz  

Configurar «vars» de Easy-RSA 3

El fichero vars.example es el centro de toda la configuración de los certificados, es donde deberemos definir si queremos crear certificados basados en RSA o basados en EC. Asimismo también nos va a permitir firmar los certificados con SHA256 o con SHA512 entre otros. Es decir, debemos configurar este archivo de configuración correctamente para posteriormente crear los certificados digitales.

Lo primero que debemos hacer es copiar el archivo vars.example en la misma carpeta con nombre «vars», si no lo tenemos con este nombre «vars» no actuará. También tenemos la posibilidad de renombrar el archivo vars.example en «vars», pero os recomendamos mejor hacer una copia de seguridad por si elimináis algo y luego no os funciona.

Nos colocamos en la carpeta principal de Easy-RSA3 y copiamos el archivo de esta forma:

cp vars.example vars

Una vez que ya tenemos el archivo «vars», debemos editarlo con cualquier editor de archivos vía consola o interfaz gráfica, nosotros usaremos nano debido a su facilidad. En el siguiente fichero de configuración de «vars» podéis ver cómo quedaría con EC con el algoritmo secp521r1, firmado con SHA512 y hemos utilizado un DN (Distinguished Name) poniendo el CN (Common Name) en lugar de los típicos datos de la «organización» como siempre habíamos hecho anteriormente, de esta forma, facilitamos la creación de los certificados, no obstante, también podríamos hacerlo indicando los típicos datos de organización.

En el propio fichero están los comentarios originales en inglés, y en castellano hemos puesto los nuestros para facilitar la localización de qué hay que modificar. Un detalle muy importante, WordPress pone automáticamente estos símbolos << y >> cuando debería poner simplemente comillas dobles: »

# Easy-RSA 3 parameter settings

# NOTE: If you installed Easy-RSA from your distro’s package manager, don’t edit
# this file in place — instead, you should copy the entire easy-rsa directory
# to another location so future upgrades don’t wipe out your changes.

# HOW TO USE THIS FILE
#
# vars.example contains built-in examples to Easy-RSA settings. You MUST name
# this file ‘vars’ if you want it to be used as a configuration file. If you do
# not, it WILL NOT be automatically read when you call easyrsa commands.
#
# It is not necessary to use this config file unless you wish to change
# operational defaults. These defaults should be fine for many uses without the
# need to copy and edit the ‘vars’ file.
#
# All of the editable settings are shown commented and start with the command
# ‘set_var’ — this means any set_var command that is uncommented has been
# modified by the user. If you’re happy with a default, there is no need to
# define the value to its default.

# NOTES FOR WINDOWS USERS
#
# Paths for Windows *MUST* use forward slashes, or optionally double-esscaped
# backslashes (single forward slashes are recommended.) This means your path to
# the openssl binary might look like this:
# «C:/Program Files/OpenSSL-Win32/bin/openssl.exe»

# A little housekeeping: DON’T EDIT THIS SECTION
#
# Easy-RSA 3.x doesn’t source into the environment directly.
# Complain if a user tries to do this:
if [ -z «$EASYRSA_CALLER» ]; then
echo «You appear to be sourcing an Easy-RSA ‘vars’ file.» >&2
echo «This is no longer necessary and is disallowed. See the section called» >&2
echo «‘How to use this file’ near the top comments for more details.» >&2
return 1
fi

# DO YOUR EDITS BELOW THIS POINT

# This variable is used as the base location of configuration files needed by
# easyrsa. More specific variables for specific files (e.g., EASYRSA_SSL_CONF)
# may override this default.
#
# The default value of this variable is the location of the easyrsa script
# itself, which is also where the configuration files are located in the
# easy-rsa tree.

#set_var EASYRSA «${0%/*}»

# If your OpenSSL command is not in the system PATH, you will need to define the
# path to it here. Normally this means a full path to the executable, otherwise
# you could have left it undefined here and the shown default would be used.
#
# Windows users, remember to use paths with forward-slashes (or escaped
# back-slashes.) Windows users should declare the full path to the openssl
# binary here if it is not in their system PATH.

#set_var EASYRSA_OPENSSL «openssl»
#
# This sample is in Windows syntax — edit it for your path if not using PATH:
#set_var EASYRSA_OPENSSL «C:/Program Files/OpenSSL-Win32/bin/openssl.exe»

# Edit this variable to point to your soon-to-be-created key directory. By
# default, this will be «$PWD/pki» (i.e. the «pki» subdirectory of the
# directory you are currently in).
#
# WARNING: init-pki will do a rm -rf on this directory so make sure you define
# it correctly! (Interactive mode will prompt before acting.)

#set_var EASYRSA_PKI «$PWD/pki»

# Define X509 DN mode.
# This is used to adjust what elements are included in the Subject field as the DN
# (this is the «Distinguished Name.»)
# Note that in cn_only mode the Organizational fields further below aren’t used.
#
# Choices are:
# cn_only – use just a CN value
# org – use the «traditional» Country/Province/City/Org/OU/email/CN format

#ELEGIMOS cn_only PARA LA CREACION DE LOS CERTIFICADOS

set_var EASYRSA_DN «cn_only»

# Organizational fields (used with ‘org’ mode and ignored in ‘cn_only’ mode.)
# These are the default values for fields which will be placed in the
# certificate. Don’t leave any of these fields blank, although interactively
# you may omit any specific field by typing the «.» symbol (not valid for
# email.)

#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»

# Choose a size in bits for your keypairs. The recommended value is 2048. Using
# 2048-bit keys is considered more than sufficient for many years into the
# future. Larger keysizes will slow down TLS negotiation and make key/DH param
# generation take much longer. Values up to 4096 should be accepted by most
# software. Only used when the crypto alg is rsa (see below.)

#set_var EASYRSA_KEY_SIZE 2048

# The default crypto mode is rsa; ec can enable elliptic curve support.
# Note that not all software supports ECC, so use care when enabling it.
# Choices for crypto alg are: (each in lower-case)
# * rsa
# * ec

#ELEGIMOS CURVA ELIPTICA PARA LA CREACION DE CERTIFICADOS, POR DEFECTO ES RSA.

set_var EASYRSA_ALGO ec

# DEFINIMOS EL NOMBRE DE LA CURVE ELIPTICA ELEGIDO

set_var EASYRSA_CURVE secp521r1

# CONFIGURAMOS LA CADUCIDAD DE LA CA

set_var EASYRSA_CA_EXPIRE 3650

# CONFIGURAMOS LA CADUCIDAD DE LOS CERTIFICADOS CREADOS.

set_var EASYRSA_CERT_EXPIRE 1080

# How many days until the next CRL publish date? Note that the CRL can still be
# parsed after this timeframe passes. It is only used for an expected next
# publication date.

# How many days before its expiration date a certificate is allowed to be
# renewed?
#set_var EASYRSA_CERT_RENEW 30

#set_var EASYRSA_CRL_DAYS 180

# Support deprecated «Netscape» extensions? (choices «yes» or «no».) The default
# is «no» to discourage use of deprecated extensions. If you require this
# feature to use with –ns-cert-type, set this to «yes» here. This support
# should be replaced with the more modern –remote-cert-tls feature. If you do
# not use –ns-cert-type in your configs, it is safe (and recommended) to leave
# this defined to «no». When set to «yes», server-signed certs get the
# nsCertType=server attribute, and also get any NS_COMMENT defined below in the
# nsComment field.

#set_var EASYRSA_NS_SUPPORT «no»

# When NS_SUPPORT is set to «yes», this field is added as the nsComment field.
# Set this blank to omit it. With NS_SUPPORT set to «no» this field is ignored.

#set_var EASYRSA_NS_COMMENT «Easy-RSA Generated Certificate»

# A temp file used to stage cert extensions during signing. The default should
# be fine for most users; however, some users might want an alternative under a
# RAM-based FS, such as /dev/shm or /tmp on some systems.

#set_var EASYRSA_TEMP_FILE «$EASYRSA_PKI/extensions.temp»

# !!
# NOTE: ADVANCED OPTIONS BELOW THIS POINT
# PLAY WITH THEM AT YOUR OWN RISK
# !!

# Broken shell command aliases: If you have a largely broken shell that is
# missing any of these POSIX-required commands used by Easy-RSA, you will need
# to define an alias to the proper path for the command. The symptom will be
# some form of a ‘command not found’ error from your shell. This means your
# shell is BROKEN, but you can hack around it here if you really need. These
# shown values are not defaults: it is up to you to know what you’re doing if
# you touch these.
#
#alias awk=»/alt/bin/awk»
#alias cat=»/alt/bin/cat»

# X509 extensions directory:
# If you want to customize the X509 extensions used, set the directory to look
# for extensions here. Each cert type you sign must have a matching filename,
# and an optional file named ‘COMMON’ is included first when present. Note that
# when undefined here, default behaviour is to look in $EASYRSA_PKI first, then
# fallback to $EASYRSA for the ‘x509-types’ dir. You may override this
# detection with an explicit dir here.
#
#set_var EASYRSA_EXT_DIR «$EASYRSA/x509-types»

# OpenSSL config file:
# If you need to use a specific openssl config file, you can reference it here.
# Normally this file is auto-detected from a file named openssl-easyrsa.cnf from the
# EASYRSA_PKI or EASYRSA dir (in that order.) NOTE that this file is Easy-RSA
# specific and you cannot just use a standard config file, so this is an
# advanced feature.

#set_var EASYRSA_SSL_CONF «$EASYRSA/openssl-easyrsa.cnf»

# Default CN:
# This is best left alone. Interactively you will set this manually, and BATCH
# callers are expected to set this themselves.

#set_var EASYRSA_REQ_CN «ChangeMe»

# Cryptographic digest to use.
# Do not change this default unless you understand the security implications.
# Valid choices include: md5, sha1, sha256, sha224, sha384, sha512

# SELECCIONAMOS EL HASH SHA512

set_var EASYRSA_DIGEST «sha512»

# Batch mode. Leave this disabled unless you intend to call Easy-RSA explicitly
# in batch mode without any user input, confirmation on dangerous operations,
# or most output. Setting this to any non-blank string enables batch mode.

#set_var EASYRSA_BATCH «»

Una vez que lo hemos modificado todo, guardamos el archivo ya que posteriormente lo vamos a utilizar con estos valores.

 

Creación de la PKI: CA, certificados de servidor y para los clientes

Cuando ya tenemos el fichero «vars» configurado, procedemos a crear la Infraestructura de Clave Pública (PKI) con la siguiente orden (suponemos que seguís en el directorio principal de Easy-RSA3):

./easyrsa init-pki

root@debian-vm:/home/bron/EasyRSA-v3.0.6# ./easyrsa init-pki

Note: using Easy-RSA configuration from: ./vars

init-pki complete; you may now create a CA or requests.
Your newly created PKI dir is: /home/bron/EasyRSA-v3.0.6/pki

Una vez inicializada la PKI, debemos crear la Autoridad de Certificación (CA):

./easyrsa build-ca

Una vez ejecutado, debemos seguir el sencillo asistente de generación de CA. La contraseña que nos pide es para proteger la clave privada de la CA, algo fundamental.

root@debian-vm:/home/bron/EasyRSA-v3.0.6# ./easyrsa build-ca

Note: using Easy-RSA configuration from: ./vars

Using SSL: openssl OpenSSL 1.1.1d 10 Sep 2019

Enter New CA Key Passphrase:
Re-Enter New CA Key Passphrase:
read EC key
writing EC key
Can’t load /home/bron/EasyRSA-v3.0.6/pki/.rnd into RNG
139864421569664:error:2406F079:random number generator:RAND_load_file:Cannot open file:../crypto/rand/randfile.c:98:Filename=/home/bron/EasyRSA-v3.0.6/pki/.rnd
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter ‘.’, the field will be left blank.
—–
Common Name (eg: your user, host, or server name) [Easy-RSA CA]:AUTORIDAD-CERTIFICACION

CA creation complete and you may now import and sign cert requests.
Your new CA certificate file for publishing is at:
/home/bron/EasyRSA-v3.0.6/pki/ca.crt

Si no queremos introducir una contraseña en la clave privada de la CA (no es recomendable por cuestiones de seguridad), deberemos poner este comando:

./easyrsa build-ca nopass

Una vez que hemos creado la CA, deberemos crear el certificado del servidor, y los certificados de los clientes. A continuación, deberemos firmarlo con la CA.

 

Creación del certificado del servidor y firmarlo con la CA

A la hora de crear los certificados de servidor y clientes, podremos dotarles de una contraseña para la clave privada, no obstante, no es recomendable hacerlo en el servidor ya que cada vez que lo iniciemos, nos pedirá la contraseña para utilizarlo. Si no queremos contraseña pondremos «nopass» detrás de cada orden que veréis a continuación.

./easyrsa gen-req servidor-openvpn-redeszone nopass

La salida del terminal es la siguiente:

root@debian-vm:/home/bron/EasyRSA-v3.0.6# ./easyrsa gen-req servidor-openvpn-redeszone nopass

Note: using Easy-RSA configuration from: ./vars

Using SSL: openssl OpenSSL 1.1.1d 10 Sep 2019
Generating an EC private key
writing new private key to ‘/home/bron/EasyRSA-v3.0.6/pki/private/servidor-openvpn-redeszone.key.bHJsAFg0KR’
—–
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter ‘.’, the field will be left blank.
—–
Common Name (eg: your user, host, or server name) [servidor-openvpn-redeszone]:

Keypair and certificate request completed. Your files are:
req: /home/bron/EasyRSA-v3.0.6/pki/reqs/servidor-openvpn-redeszone.req
key: /home/bron/EasyRSA-v3.0.6/pki/private/servidor-openvpn-redeszone.key

Una vez creado el certificado, deberemos firmarlo con la CA en modo «server»:

./easyrsa sign-req server servidor-openvpn-redeszone

root@debian-vm:/home/bron/EasyRSA-v3.0.6# ./easyrsa sign-req server servidor-openvpn-redeszone

Note: using Easy-RSA configuration from: ./vars

Using SSL: openssl OpenSSL 1.1.1d 10 Sep 2019

You are about to sign the following certificate.
Please check over the details shown below for accuracy. Note that this request
has not been cryptographically verified. Please be sure it came from a trusted
source or that you have verified the request checksum with the sender.

Request subject, to be signed as a server certificate for 1080 days:

subject=
commonName = servidor-openvpn-redeszone

Type the word ‘yes’ to continue, or any other input to abort.
Confirm request details: yes
Using configuration from /home/bron/EasyRSA-v3.0.6/pki/safessl-easyrsa.cnf
Enter pass phrase for /home/bron/EasyRSA-v3.0.6/pki/private/ca.key:
Check that the request matches the signature
Signature ok
The Subject’s Distinguished Name is as follows
commonName :ASN.1 12:’servidor-openvpn-redeszone’
Certificate is to be certified until Dec 23 11:40:22 2022 GMT (1080 days)

Write out database with 1 new entries
Data Base Updated

Certificate created at: /home/bron/EasyRSA-v3.0.6/pki/issued/servidor-openvpn-redeszone.crt

Y ya hemos creado el .crt que utilizaremos posteriormente en el fichero de configuración de OpenVPN.

 

Creación de los certificados de los clientes y firmarlos con la CA

Los pasos que veréis a continuación, los tendremos que realizar una vez POR CADA CLIENTE que vayamos a crear. Es decir, si vamos a crear 2 clientes, deberemos seguir los pasos de crear y firmar dos veces. En este parte sí es recomendable crear los certificados del cliente con contraseña, así tendremos la seguridad de que si perdemos el certificado, nadie podrá usarlo. Nosotros en el manual no vamos a introducir ninguna contraseña (pondremos nopass al final).

./easyrsa gen-req cliente1-openvpn-redeszone nopass

root@debian-vm:/home/bron/EasyRSA-v3.0.6# ./easyrsa gen-req cliente1-openvpn-redeszone nopass

Note: using Easy-RSA configuration from: ./vars

Using SSL: openssl OpenSSL 1.1.1d 10 Sep 2019
Generating an EC private key
writing new private key to ‘/home/bron/EasyRSA-v3.0.6/pki/private/cliente1-openvpn-redeszone.key.YflrPvFgdV’
—–
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter ‘.’, the field will be left blank.
—–
Common Name (eg: your user, host, or server name) [cliente1-openvpn-redeszone]:

Keypair and certificate request completed. Your files are:
req: /home/bron/EasyRSA-v3.0.6/pki/reqs/cliente1-openvpn-redeszone.req
key: /home/bron/EasyRSA-v3.0.6/pki/private/cliente1-openvpn-redeszone.key

Una vez creado, deberemos firmarlo:

./easyrsa sign-req client cliente1-openvpn-redeszone

root@debian-vm:/home/bron/EasyRSA-v3.0.6# ./easyrsa sign-req client cliente1-openvpn-redeszone

Note: using Easy-RSA configuration from: ./vars

Using SSL: openssl OpenSSL 1.1.1d 10 Sep 2019

You are about to sign the following certificate.
Please check over the details shown below for accuracy. Note that this request
has not been cryptographically verified. Please be sure it came from a trusted
source or that you have verified the request checksum with the sender.

Request subject, to be signed as a client certificate for 1080 days:

subject=
commonName = cliente1-openvpn-redeszone

Type the word ‘yes’ to continue, or any other input to abort.
Confirm request details: yes
Using configuration from /home/bron/EasyRSA-v3.0.6/pki/safessl-easyrsa.cnf
Enter pass phrase for /home/bron/EasyRSA-v3.0.6/pki/private/ca.key:
Check that the request matches the signature
Signature ok
The Subject’s Distinguished Name is as follows
commonName :ASN.1 12:’cliente1-openvpn-redeszone’
Certificate is to be certified until Dec 23 11:41:36 2022 GMT (1080 days)

Write out database with 1 new entries
Data Base Updated

Certificate created at: /home/bron/EasyRSA-v3.0.6/pki/issued/cliente1-openvpn-redeszone.crt

Si quisiéramos crear y firmar un certificado número 2 para otro cliente, deberemos poner algo así:

./easyrsa gen-req cliente2-openvpn-redeszone nopass ./easyrsa sign-req client cliente2-openvpn-redeszone

Recordad que si queréis poner contraseña, deberemos quitar el «nopass».

 

Organizar los certificados .crt y .key del servidor y clientes

Algo muy importante es organizar por carpetas los certificados del servidor y de los clientes. Los certificados de servidor y clientes están en la ruta «/pki/issued/» y las claves privadas están en «/pki/private», la ca.crt está en la raíz de la carpeta «pki». Debemos crear tres carpetas con el siguiente contenido (de momento):

  • servidor: ca.crt, servidor-openvpn-redeszone.crt, servidor-openvpn-redeszone.key
  • cliente1: ca.crt, cliente1-openvpn-redeszone.crt, cliente1-openvpn-redeszone.key
  • cliente2: ca.crt, cliente2-openvpn-redeszone.crt, cliente2-openvpn-redeszone.key
 

Crear los parámetros Diffie-Hellmann y la clave tls-crypt (tls-auth en sistemas antiguos)

Una vez que ya tenemos los certificados creados y firmados, antiguamente debíamos crear los parámetros Diffie-Hellmann para colocarlos en la carpeta del «servidor», para generarlos usábamos «./easyrsa gen-dh» pero al utilizar ECDHE no es necesario crearlo ni indicarlo tampoco en el archivo de configuración del servidor. Lo que sí debemos crear es la clave tls-crypt con nombre ta.key o el que nosotros queramos. La orden que debemos poner es la siguiente:

openvpn --genkey --secret ta.key

Esta clave ta.key deberemos colocarla en el servidor y en TODOS los clientes.

Una vez llegados hasta aquí, nuestras carpetas con los certificados deberían tener lo siguiente:

  • servidor: ca.crt, servidor-openvpn-redeszone.crt, servidor-openvpn-redeszone.key, dh.pem (Diffie-Hellmann, OPCIONAL porque no lo usaremos con ECDHE), ta.key (tls-crypt)
  • cliente1: ca.crt, cliente1-openvpn-redeszone.crt, cliente1-openvpn-redeszone.key, ta.key (tls-crypt)
  • cliente2: ca.crt, cliente2-openvpn-redeszone.crt, cliente2-openvpn-redeszone.key, ta.key (tls-crypt)

Si vamos a usar tls-auth en lugar de tls-crypt (porque no es compatible, por ejemplo), debemos tener esto en cuenta:

En la configuración del servidor (servidor.conf o servidor.ovpn) deberemos poner:

tls-auth ta.key 0 (0 de Incoming)

En la configuración del cliente (cliente.conf o cliente.ovpn) deberemos poner:

tls-auth ta.key 1 (1 de Outgoing)

A continuación, os ponemos una tabla de qué es cada certificado (los nombres varían).

Cuando tengamos todo organizado en carpetas, ahora es cuando deberemos crear el archivo de configuración (.conf para sistemas Linux y .ovpn para sistemas Windows). Existen ejemplos de los ficheros de configuración en la web oficial de OpenVPN, y también en la ruta «/usr/share/doc/openvpn/examples/examples-config-files/».

Lo primero que tenemos que verificar es si nuestro servidor y clientes soportan los cifrados simétricos, tls-ciphersuites (TLS 1.3) y tls-cipher (TLS 1.2) y las curvas elípticas configuradas. Debemos tenerlo muy en cuenta, ya que de lo contrario nos dará error. Para realizar estas verificaciones debemos ejecutar:

  • openvpn –show-ciphers
  • openvpn –show-tls (nos mostrará tanto si soporta TLS 1.3 y cuáles, como TLS 1.2)
  • openvpn –show-curves
 

Configurar el servidor OpenVPN y arrancarlo

La configuración del servidor OpenVPN es fundamental para dar permisos de acceso a los clientes a nuestra red local, configurar la negociación TLS. Debido a que tenemos cientos de configuraciones disponibles, nosotros os vamos a poner nuestra configuración con unos comentarios explicando cada parámetro, podéis copiar y pegar la configuración sin problemas. Recordad que para Linux debe tener extensión .conf y para Windows .ovpn.

#PUERTO A UTILIZAR POR TCP O UDP, POR DEFECTO ES 1194.
#PROTOCOLO A UTILIZAR TCP O UDP
#MODO TUNNELING
port 11949
proto udp
dev tun

#CERTIFICADOS
#SI TENEMOS EL .CONF EN LA MISMA CARPETA NO HACE FALTA METER RUTA, SOLO EL NOMBRE.
#SI ESTAN EN OTRA RUTA, DEBEREMOS METER LA RUTA DE TODOS ELLOS

ca ca.crt
cert servidor-openvpn-redeszone.crt
key servidor-openvpn-redeszone.key
#dh dh.pem (OPCIONAL PORQUE USAMOS ECDHE)
dh none
tls-crypt ta.key

#COMPROBAMOS LOS CERTIFICADOS DE LOS CLIENTES (MAYOR SEGURIDAD)
remote-cert-tls client

#MODIFICAMOS EL CIFRADO SIMETRICO DEL CANAL DE DATOS, EL CANAL DE CONTROL TLS Y EL ALGORITMO PARA VERIFICAR LA INTEGRIDAD.
#SI USAMOS AES-256-GCM NO ES NECESARIO PONER LA DIRECTIVA AUTH YA QUE NO SE UTILIZA.

cipher AES-256-GCM
tls-ciphersuites TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256
tls-cipher TLS-ECDHE-ECDSA-WITH-AES-256-GCM-SHA384:TLS-ECDHE-ECDSA-WITH-CHACHA20-POLY1305-SHA256
ecdh-curve secp521r1
tls-version-min 1.2
reneg-sec 0
auth SHA512

#TOPOLOGIA DE LA RED (SE RECOMIENDA SUBNET) Y SUBRED VIRTUAL DONDE ESTARAN LOS CLIENTES.

topology subnet
server 10.8.0.0 255.255.255.0

#CONFIGURAMOS EL SERVIDOR PARA QUE LOS CLIENTES TENGAN LA MISMA IP SIEMPRE, UNA VEZ QUE SE CONECTEN.
ifconfig-pool-persist ipp.txt

#PROPORCIONAMOS AL CLIENTE ACCESO A LA RED DOMESTICA, REALIZAMOS REDIRECCION DE INTERNET Y PROPORCIONAMOS DNS DE OPENDNS. WordPress pone automáticamente estos símbolos << y >> cuando debería poner simplemente comillas dobles: »
push «route 192.168.2.0 255.255.255.0»
push «redirect-gateway def1»
push «dhcp-option DNS 208.67.222.222»
push «dhcp-option DNS 208.67.220.220»

#HABILITAMOS COMUNICACION ENTRE LOS CLIENTES, HABILITAMOS KEEPALIVE PARA SABER SI EL TUNEL SE HA CAIDO, HABILITAMOS COMPRESION Y UN MAXIMO DE 100 CLIENTES SIMULTANEAMENTE
client-to-client
keepalive 10 120
max-clients 100

#SIN PERMISOS DE USUARIO EN OPENVPN, POR SEGURIDAD DEL SERVIDOR
user nobody
group nogroup

#CLAVE Y TUNEL PERSISTENTE
persist-key
persist-tun

#LOS LOGS DEL SERVIDOR EN ESE FICHERO, CONFIGURACION VERB 3 PARA LOS LOGS.
status openvpn-status.log
verb 3
explicit-exit-notify 1

Hasta aquí hemos llegado con la configuración del servidor, para arrancarlo simplemente deberemos poner en sistemas Linux «openvpn servidor.conf» y arrancará automáticamente, al final del arranque deberá poner «Initialization Sequence Completed».

 

Configurar el cliente (o los clientes)

A continuación, podéis ver la configuración del cliente asociada al servidor que hemos visto anteriormente. La única diferencia entre los diferentes clientes.conf es la ruta de los certificados, por ejemplo. Muy importante que el cipher, tls-cipher y otros parámetros sean exactamente iguales, de lo contrario no conectará con el servidor. Recordad que para Linux debe tener extensión .conf y para Windows .ovpn.

#CONFIGURAMOS EN EL MODO CLIENTE, MODO TUN, PROTOCOLO UDP.

client
dev tun
proto udp

#ESTA DIRECTIVA ES LA DE CONEXION CON LA IP PUBLICA O DOMINIO DEL SERVIDOR OPENVPN, TAMBIEN TENEMOS QUE PONER EL MISMO PUERTO DEL SERVIDOR
remote 127.0.0.1 11949

#RESOLVER CONTINUAMENTE LA IP O DOMINIO PARA CONECTARNOS, CLAVE Y TUN PERSISTENTE COMO EL SERVIDOR.
resolv-retry infinite
nobind
persist-key
persist-tun

#RUTA DE LA CA, CERTIFICADOS DEL CLIENTE Y TA.KEY.
#SI LO TENEMOS EN LA MISMA CARPETA, NO ES NECESARIO PONER LA RUTA ENTERA.
ca ca.crt
cert cliente1-openvpn-redeszone.crt
key cliente1-openvpn-redeszone.key
tls-crypt ta.key

#COMPROBAR LA IDENTIDAD DEL SERVIDOR, USAR CIFRADO SIMETRICO GCM, CONFIGURACION DE TLS 1.2 Y AUTH. Si nuestro cliente no soporta TLS 1.3.
remote-cert-tls server
cipher AES-256-GCM
auth SHA512

compress

#Si nuestro cliente soporta TLS 1.3, añadimos esta directiva:
#tls-ciphersuites TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256

#Si nuestro cliente soporta TLS 1.2 únicamente, añadimos esta directiva:
#tls-cipher TLS-ECDHE-ECDSA-WITH-AES-256-GCM-SHA384:TLS-ECDHE-ECDSA-WITH-CHACHA20-POLY1305-SHA256

#HABILITAR LOG DE NIVEL VERBOSE 3

verb 3

Si utilizas Windows, la carpeta de los certificados con el archivo de configuración en extensión .ovpn debe estar en la ruta predeterminada de OpenVPN que es C:UsersBronOpenVPNconfig por defecto, aunque la podremos cambiar. Una vez realizado esto, si pinchamos click derecho sobre OpenVPN en la barra inferior derecha veremos el nombre del archivo del cliente para conectarnos satisfactoriamente. Al final del arranque deberá poner «Initialization Sequence Completed» y nos habremos conectado correctamente al servidor OpenVPN configurado.

 

Crear ruta estática en nuestro router

Para poder tener conectividad con la red local de nuestro hogar, es necesario crear una ruta estática en el router de nuestra casa. Con la configuración de 10.8.0.0/24 que hemos configurado en el servidor OpenVPN, deberemos crear una ruta estática con esta información:

  • IP subred: 10.8.0.0
  • Máscara: 255.255.255.0
  • Puerta de enlace: IP local donde arranquemos el servidor OpenVPN, si por ejemplo tenemos instalado en una Raspberry PI con IP 192.168.1.100, deberemos poner esta IP.
 

Configurar el cliente VPN en Android

El sistema operativo Android permite instalar una app de OpenVPN para conectarnos a cualquier servidor, no es necesario ser root pero sí es necesario que la aplicación tenga los permisos que pide. Actualmente disponemos de dos aplicaciones realmente buenas para este sistema operativo, la oficial es la siguiente:

Pero tenemos otra aplicación que es mucho más completa y dispone de compatibilidad con las últimas tecnologías incorporadas en las últimas versiones, por lo que nuestra recomendación es que utilices esta:

Nosotros llevamos bastantes años utilizando esta aplicación y nunca hemos tenido problemas. A continuación, os vamos a enseñar cómo configurar el cliente con Android.

Lo primero que debemos hacer es copiar en la memoria interna de nuestro smartphone, o bien en la tarjeta micro SD de nuestro móvil, la carpeta con todos los certificados que tengamos, o directamente el archivo .ovpn o .conf con toda la configuración que hemos realizado en los pasos anteriores. De forma general, en la carpeta tenemos que tener lo siguiente:

  • ca.crt
  • cliente1.crt
  • cliente1.key
  • ta.key (en el caso de que hayáis elegido TLS/AUTH una firma HMAC adicional para todos las negociaciones SSL/TLS para la verificación de la integridad).
  • client.ovpn o client.conf

Una vez que tengamos todo en una carpeta dentro de nuestro smartphone, abrimos la aplicación y pinchamos en la sección superior derecha en el icono de «+», y pinchamos en «Importar». Aquí tendremos que buscar el fichero de configuración y lo añadimos.

Una vez que lo hayamos importado, es recomendable revisar que todos los parámetros y configuraciones que se hayan cargado sean correctas.

Cuando ya tengamos todo revisado, simplemente tendremos que pulsar sobre el perfil y empezará a conectarse al servidor.

 

Principales problemas y fallos de conexión al conectar

Cuando montamos por primera vez un servidor OpenVPN, es posible que tengamos diferentes problemas a la hora de conectar los diferentes clientes. Antes de enumerar los diferentes problemas y fallos de conexión que pueden aparecer, debemos deciros que si habéis seguido paso a paso el tutorial, no deberíais tener ningún error al conectar, ya que hemos comprobado la configuración en detalle. La configuración tanto del servidor como de los clientes está en «verb 3», es decir, un nivel de registro recomendado para todos los usuarios, en caso de tener algún problema de conexión, si no damos con el fallo deberemos aumentar el nivel de registro, y poner «verb 5» para tener más detalles de todo lo que ocurre en la conexión.

 

RESOLVE: Cannot resolve host address: xxxx.no-ip.org:11949 (Host desconocido. )

Este error es porque no se encuentra el servidor OpenVPN, debemos revisar que el dominio que nosotros pongamos sea el correcto, este error es porque no encuentra ninguna IP pública asociada a dicho dominio. Lo más común es que hayamos puesto mal el dominio en el cliente VPN, que no exista el dominio que hemos introducido porque aún no lo hemos creado, o porque no está funcionando correctamente el servicio de DNS dinámico.

Si tenéis problemas al utilizar el dominio, nuestra recomendación es que utilices directamente la dirección IP pública del servidor VPN para descartar fallos a nivel de dominio o del servidor DNS, de esta forma, podrás conectarte sin necesidad de servicio de DNS porque no tendrá que resolver ningún dominio.

 

Could not determine IPv4/IPv6 protocol

Este error está relacionado con el anterior, hemos introducido un dominio que no es capaz de encontrar, ya sea utilizando el protocolo IPv4 o el protocolo IPv6. Debemos recordar que este protocolo de VPN soporta los dos protocolos de la capa de red, por lo que podemos conectarnos tanto a redes IPv4 como también a redes IPv6 para tunelizar todo el tráfico de red.

Un detalle muy importante, es que este software también nos permitiría conectarnos a un servidor vía IPv4, para posteriormente salir a Internet con IPv6, pero requiere una configuración compleja adicional que no hemos tratado en este tutorial, no obstante, se podría hacer sin muchos problemas.

 

SIGUSR1[soft,init_instance] received, process restarting

Este aviso nos indica que se va a reiniciar el proceso de conexión con el servidor VPN, simplemente indica que ha habido anteriormente un error y que va a volver a intentar la conexión. Cuando recibimos este tipo de mensaje suele significar que hemos introducido mal la contraseña privada del certificado digital, si no introducimos correctamente la clave, nos devolverá un error.

También puede ocurrir que el establecimiento de la conexión no se ha realizado por algún motivo, es recomendable vigilar los firewall que tengamos entre nuestra conexión y la conexión remota.

 

MANAGEMENT: >STATE:1603127258,WAIT,,,,,,

Aunque esto no es un error propiamente dicho, si el cliente OpenVPN se queda continuamente en esta sección de la conexión, es porque no tenemos ningún puerto abierto en nuestro router o firewall hacia el servidor VPN, dependiendo de si hemos utilizado TCP o UDP, y del puerto seleccionado, deberemos abrir un puerto u otro. Esto es porque el cliente sí es capaz de localizar la dirección IP sin problemas, pero se queda esperando una respuesta por parte del servidor OpenVPN, respuesta que nunca llegará.

Este error también suele suceder cuando no tenemos el servidor VPN arrancado, si se nos ha olvidado arrancarlo al inicio, tendremos este problema. La solución es arrancarlo y esperar que nos aparezcan los primeros clientes.

 

NOTE: –user option is not implemented on Windows

En sistemas operativos Windows no necesitamos poner la directiva «user nobody», algo que en los sistemas operativos basados en Linux sí es recomendable ponerlo. Esto no es un error propiamente dicho, sino un aviso que nos indica que podemos quitarlo sin ningún problema, porque no está implementado en Windows, por lo que no tiene ningún sentido dejarlo en el fichero de configuración .ovpn que hemos configurado.

Si no te molesta este aviso que nos sale con cada conexión, puedes dejar sin tocar el fichero de configuración, de esta forma, si lo usas en Linux te valdrá perfectamente.

 

NOTE: –group option is not implemented on Windows

En sistemas operativos Windows no necesitamos poner la directiva «group nogroup», algo que en los sistemas operativos basados en Linux sí es recomendable ponerlo. Estamos exactamente en el mismo caso que antes, en sistemas Linux ponemos tanto user como group para que no tengamos permisos de superusuario, en el caso de Windows no es necesario ponerlo en el fichero de configuración, por lo que es recomendable quitarlo para que no nos salga este aviso (no es un error).

Os recomendamos quitar la línea «group nogroup» solamente si te molesta este aviso, de lo contrario puedes dejarlo y así ya lo tienes configurado por si utilizas Linux.

 

WARNING: Ignoring option ‘dh’ in tls-client mode, please only include this in your server configuration

En el cliente VPN no tenemos que poner nada relacionado con Diffie-Hellmann, esta directiva es solamente en el fichero de configuración del servidor, en el cliente simplemente sobra.

 

tls-crypt unwrap error: packet authentication failed y TLS Error: tls-crypt unwrapping failed from [AF_INET]

La autenticación con la directiva tls-crypt ha fallado, esto suele ser porque el contenido del archivo ta.key del servidor y de los clientes es diferente. Debemos recordar que la clave ta.key debe ser exactamente la misma tanto en el servidor como en todos los clientes VPN que vayamos a utilizar.

 

TLS Error: Unroutable control packet received from [AF_INET] y TLS Error: local/remote TLS keys are out of sync

Las claves TLS que hemos utilizado no son correctas en el servidor y/o cliente, es necesario revisar la configuración de los certificados y también de la ta.key. Este error sale sobre todo cuando tenemos las ta.key mal configuradas.

 

TLS Error: Unroutable control packet received from

Este es un error general de la conexión TLS, es posible que hayas copiado mal la CA, el certificado del servidor (en la configuración del servidor), el certificado del cliente (en la configuración del cliente). Este error es debido a un fallo a la hora de copiar los diferentes certificados.

 

WARNING: ‘link-mtu’ is used inconsistently, local=’link-mtu 1549′, remote=’link-mtu 1550′

Este error aparece porque es necesario que el MTU sea igual tanto en local (cliente) como también en el remote (servidor VPN), si el MTU está mal configurado, la conexión se establecerá, pero tendremos un rendimiento muy bajo, y es posible que la conexión VPN se corte en cualquier momento.

Este error también ocurre cuando en el servidor VPN hemos activado la compresión de datos, y en el cliente no la tenemos configurada. También ocurre cuando tenemos diferente algoritmo de compresión en servidor/clientes. Es necesario que el servidor y los clientes utilicen la misma compresión, o directamente no utilizar compresión que es lo más recomendable por seguridad.

Para solucionar este error, basta con poner en el cliente la directiva: «compress», para que acepte la compresión que le mande el servidor a través del «PUSH» que realiza.

 

WARNING: ‘comp-lzo’ is present in remote config but missing in local config, remote=’comp-lzo’

Este error ocurre cuando en el servidor VPN hemos activado la compresión de datos con comp-lzo, y en los clientes no tenemos compresión ninguna. Es necesario que tanto el servidor y los clientes dispongan de exactamente el mismo algoritmo de compresión. Para solucionar este error, basta con poner en el cliente la directiva: «compress», para que acepte la compresión que le mande el servidor a través del «PUSH» que realiza.

El error «write to TUN/TAP : Unknown error (code=122)» también puede aparecer debido a esta función de compresión.

 

TLS Error: TLS handshake failed

Ha ocurrido un error a la hora de negociar la información en el canal de control, es posible que tengamos ciferentes tls-cipher o tls-ciphersuites y no haya un algoritmo de canal de control común, esto hace que el «apretón de manos» falle y no pueda continuar.

 

Actualizaciones y novedades en las nuevas versiones de OpenVPN

OpenVPN no para de actualizarse y lanzar nuevas versiones con corrección de bugs, mejoras en el rendimiento y también mejoras en la seguridad, con el objetivo final que las conexiones VPN sean lo más seguras posible. A continuación, os vamos a explicar algunas de las mejoras que tendrá OpenVPN 2.5 que vendrá muy pronto, ya que está en fase «Release Candidate».

 

Se añade tls-crypt-v2

tls-crypt es una funcionalidad que nos permite mitigar los ataques DoS y DDoS a los servidores OpenVPN, gracias a estas llaves que creamos directamente en OpenVPN, podremos hacer que cada cliente se pre-autentique, para posteriormente entrar en la fase de autenticación con su certificado de cliente. La primera versión tls-crypt necesita que tanto el servidor como todos los clientes tengan exactamente la misma clave tls-crypt. Con tls-crypt-v2 podremos hacer que cada cliente tenga su propia clave tls-crypt, de esta forma, organizaciones muy grandes o proveedores de OpenVPN, podrán proteger adecuadamente sus servidores creando varias de estas llaves.

Con tls-crypt-v2 un cliente que se quiera conectar a nuestro servidor OpenVPN, deberá tener lo siguiente:

  • Certificado digital del cliente (llave pública y privada). De manera opcional se le puede poner una contraseña de paso al certificado privado, aumentando la seguridad en caso de robo de los certificados.
  • Certificado de la CA (Autoridad de Certificación)
  • Segundo factor de autenticación usando un usuario/clave, estas credenciales en el servidor podrían estar en los usuarios del propio sistema operativo, o autenticarnos en un servidor RADIUS interno o externo.
  • Llave tls-crypt-v2 específica para este cliente.

De esta forma, se está protegiendo muchísimo más la autenticación de los clientes, sobre todo porque tenemos diferentes medidas de seguridad (algo que tienes y algo que sabes), en caso de pérdida de los certificados digitales.

 

Soporte del cifrado ChaCha20-Poly1305

Actualmente el cifrado simétrico más seguro que se puede utilizar en el canal de datos (data-channel), es AES-256-GCM y AES-128-GCM. Con la última versión de OpenVPN 2.5 también tendremos la posibilidad de elegir el popular cifrado ChaCha20-Poly1305 que utiliza VPN como WireGuard. En caso de que tu servidor OpenVPN tenga aceleración de cifrado por hardware, tanto AES como ChaCha20 funcionarán realmente rápido, es posible que AES sea más rápido que ChaCha20 pero dependerá del procesador y también de los clientes VPN que se vayan a conectar, deberemos realizar pruebas de velocidad para comprobar qué cifrado simétrico es más rápido.

En caso de que el servidor OpenVPN no tenga aceleración de cifrado por hardware, como ocurre en los routers con OpenVPN instalado, entonces lo mejor es seleccionar ChaCha20-Poly1305 porque nos proporcionará un mayor rendimiento en descarga y subida.

 

Mejora de la negociación del cifrado en el canal de datos

Muy relacionado con el anterior punto, tenemos que en la nueva versión de OpenVPN 2.5, la opción ncp-ciphers se ha renombrado a data-ciphers, aunque el nombre antiguo se seguirá aceptando. El cambio es con el objetivo de evitar la ambigüedad de «–cipher» y «–tls-cipher». Ahora los clientes VPN le indicarán al servidor qué tipo de cifrados soporta, y el servidor elegirá el primer cifrado común de la lista de cifrado de datos compatibles, en lugar de utilizar el primero de la lista, lo que hará que el establecimiento de la VPN sea más rápido.

Esto también nos permite que si el servidor tiene la configuración de «data-ciphers» ChaCha20-Poly1305:AES-256-GCM, y el cliente tiene ChaCha20-Poly1305, lo usará porque el cliente lo soporta sin problemas. Esta negociación supone un cambio bastante importante porque el establecimiento será aún más rápido.

 

Se retira el soporte para BF-CBC en la configuración predeterminada

Ahora la configuración predeterminada de OpenVPN no permitirá utilizar BF-CBC, la última versión solamente aceptará los cifrados AES-256-GCM y AES-128-GCM para el canal de datos. Debemos recordar que en OpenVPN tenemos BF-CBC cuando no tenemos la opción de –cipher ni –ncp-ciphers en la configuración. Si se quiere utilizar este tipo de cifrado, será necesario habilitarlo explícitamente.

Esta es una medida claramente de seguridad, con el objetivo de no utilizar este tipo de cifrado simétrico. Teniendo en cuenta que OpenVPN ya soporta AES-256-GCM y AES-128-GCM para el canal de datos, y recientemente se ha incorporado también ChaCha20-Poly1305 que se ha demostrado que es seguro y funciona muy rápido, no tiene mucho sentido dejar esta configuración de BF-CBC de forma predeterminada.

 

Alternativas a OpenVPN

Como hemos visto, OpenVPN es un servicio muy completo y funcional, pero si queremos buscar alguna alternativa, hay muchas. No es la única y hay muchas otras alternativas que podemos tener en cuenta si queremos usar una VPN gratis o de pago. entre las más populares encontramos:

  • NordVPN: Se destaca por su interés en la seguridad y privacidad. Utiliza cifrado de grado militar para proteger la información del usuario durante la transferencia de datos. Ofrece una extensa red de servidores en todo el mundo, lo que permite a los usuarios saltarse las restricciones geográficas y garantizar una conexión rápida y fiable. Además, la aplicación también incluye características adicionales, como la tecnología de doble VPN, que pasa el tráfico a través de dos servidores para una capa adicional de anonimato.
  • ProtonVPN: Desarrollado por el equipo de ProtonMail, un servicio de correo electrónico seguro. Ofrece privacidad con políticas estrictas de no registro. Además del cifrado estándar, ProtonVPN incluye la opción Secure Core, que dirige el tráfico a través de servidores seguros antes de llegar a su destino final.
  • ExpressVPN: Conocido por su enfoque en la velocidad y la facilidad de uso. Ofrece un cifrado robusto y una amplia red de servidores en numerosas ubicaciones. La tecnología TrustedServer de ExpressVPN asegura que los datos de los usuarios se almacenen en RAM en lugar de en discos duros, mejorando la privacidad. También incluye funciones como el interruptor de apagado automático para desconectar la conexión si la VPN se cae inesperadamente.
  • Azure VPN Gateway: Una herramienta proporcionada por Microsoft Azure. Diseñada para entornos empresariales, permite la conexión segura entre redes locales y la infraestructura en la nube de Azure. Utiliza protocolos estándar de VPN, como IKEv2 y SSTP, y es escalable para adaptarse a las necesidades de grandes empresas.
  • Cyberghost: Destaca por su enfoque intuitivo para el usuario y sus funciones de privacidad. Ofrece cifrado fuerte y una política de no registro. La función de bloqueo de anuncios y rastreadores, junto con perfiles preconfigurados para diversas necesidades, hacen que sea accesible y versátil.
  • Surfshark: Conodido por permitir conexiones ilimitadas simultáneas en un solo plan, brindando flexibilidad a los usuarios. Ofrece un cifrado robusto y una función de «MultiHop» que dirige el tráfico a través de múltiples servidores para mayor seguridad.
  • Hotspot Shield: Utiliza una tecnología llamada Hydra VPN, que se centra en la velocidad y el rendimiento. Es especialmente conocido por su capacidad para saltar restricciones geográficas y dar acceso a contenido bloqueado.
  • Hide.me: Una herramienta centrada en la privacidad con políticas de no registro. Incluye un interruptor de apagado automático, múltiples protocolos de seguridad y una opción gratuita limitada que permite a los usuarios probar el servicio antes de contratar un plan.
  • TunnelBear: Conocido por su enfoque dinámico y fácil de usar. Proporciona un nivel sólido de cifrado y una política de no registro. Su interfaz amigable y diseño atractivo lo hacen especialmente adecuado para usuarios con menos experiencia.

Novedad de NordVPN

De nuevo, todas estas cuentan con sus ventajas y desventajas, por lo cual es importante revisar para escoger la que mejor se adapte a nuestras necesidades. ¿Cuál es mejor? Depende. Debes consultar cuál de ellas nos resulta más cómoda según los servidores que ofrece, las funciones o la interfaz. Pero también cuáles son las limitaciones que tienen si lo que queremos es usar un plan gratuito sin tener que pagar nada: ¿permiten o no streaming? ¿cuál es la velocidad máxima a la que podemos navegar? Teniendo en cuenta esto podrás elegir una u otra y acertar con la decisión que hayas tomado.

 

Tinc

Otra opción es Tinc. Tinc es una herramienta multiplataforma que nos proporciona un servidor de CPN mediante tunneling, y cifrado punto a punto para establecer una comunicación segura. Esta es de software libre, y trabaja bajo GNU. Como añadido, nos permite utilizar autenticación, compresión mediante zlib o LZO y cifrado. Para toro esto cuenta con una librería que optimiza el cifrado, a lo que se suma la seguridad de autenticación mediante OpenSSL. Pero si queremos añadir herramientas externas, solo será necesario añadirlos desde el archivo de configuración que nos proporciona. Por lo cual al ser un proceso que no requiere nada a mayores de eso, es muy sencillo y rápido. Pero Tinc no solo nos va a permitir un tunneling, si no que tiene otras funciones que pueden resultar interesantes. Entre ellas el puente Ethernet, con el que podremos tener acceso a la red local doméstica, o en su defecto del trabajo, como si de la propia red interna se tratara. Por otro lado, el soporte a IPv4 E ipV6, es total.

En cuanto a compatibilidades, podemos estar tranquilos. Es compatible con la gran mayoría de los sistemas operativos que nos podemos encontrar en el mercado. Como pueden ser Windows, MacOS, OpenBSD, Linux, entre otros. Pero también lo es con dispositivos móviles, pero aquí solo con los sistemas operativos de iOS y Android. Los cuales son los que copan prácticamente el 100% del mercado actual. En este caso, la conexión se realiza mediante una aplicación que podemos descargar.

Pero una de las principales ventajas que nos da esta herramienta, es que no necesita de equipos muy potentes para ejecutarse. Los recursos que demanda son muy bajos, por lo cual puede ser una buena opción para integrarla en sistemas de menor capacidad. Como pueden ser los routers o dispositivos NAS. Todo esto, hace que sea una buena alternativa a OpenVPN, sobre todo si buscamos funcionalidades, ya que pueden ser más similares.

Esperamos que este manual os haya servido de ayuda. Si tenéis cualquier duda podéis ponernos un comentario, os recomendamos visitar el HOWTO oficial de OpenVPN donde encontraréis toda la información sobre los diferentes parámetros a utilizar. También es de muchísima ayuda el MAN PAGE de OpenVPN 2.4 donde tenéis disponible todos los parámetros.

14 Comentarios