«Me lo contaron y lo olvidé; lo vi y lo entendí; lo hice y lo aprendí».

— Confucio

Cómo configurar OpenVPN en MikroTik RouterOS v7

Configurar un servidor OpenVPN en MikroTik RouterOS v7 permite acceder de forma segura a nuestra red desde Internet utilizando ordenadores Windows, teléfonos Android y otros dispositivos compatibles con OpenVPN.

En esta guía vamos a configurar completamente un servidor OpenVPN en MikroTik mediante WinBox, utilizando certificados digitales junto con usuario y contraseña. Los clientes podrán acceder tanto a la red local situada detrás del MikroTik como navegar por Internet utilizando la conexión del router.

La configuración está basada en RouterOS 7.24.2, aunque puede utilizarse como referencia para otras versiones recientes de RouterOS 7. RouterOS ha mejorado considerablemente su implementación de OpenVPN durante las últimas versiones, incorporando, entre otras funciones, soporte UDP, AES-GCM y envío de rutas desde el servidor.

¿Por qué utilizar OpenVPN mediante UDP?

OpenVPN puede funcionar tanto mediante TCP como mediante UDP. Para esta configuración utilizaremos UDP, ya que generalmente es la opción más apropiada para una VPN.

Cuando OpenVPN funciona sobre TCP y dentro de la VPN transportamos conexiones TCP, se produce una situación conocida habitualmente como TCP sobre TCP. Ambos niveles realizan sus propios controles de entrega y retransmisiones, lo que puede perjudicar considerablemente el rendimiento cuando existen pérdidas de paquetes. UDP evita este comportamiento y normalmente proporciona menor latencia y mejor rendimiento para tráfico VPN.

RouterOS v7 permite utilizar tanto TCP como UDP como transporte para OpenVPN. TCP puede seguir siendo interesante en determinadas circunstancias, especialmente cuando debemos atravesar redes muy restrictivas que bloquean UDP.

¿Por qué no utilizar el puerto 1194?

El puerto estándar de OpenVPN es el 1194, en este ejemplo utilizaremos 42873/UDP. Utilizar un puerto diferente puede reducir parte de los escaneos automatizados dirigidos específicamente al puerto estándar de OpenVPN.

Sin embargo, es importante entender que cambiar el puerto no constituye realmente una protección de seguridad. Un escaneo completo de puertos puede encontrar igualmente el servicio.

La seguridad debe basarse principalmente en:

  • certificados correctamente generados;
  • autenticación mediante usuario y contraseña;
  • contraseñas robustas;
  • algoritmos criptográficos actuales;
  • reglas adecuadas de firewall;
  • RouterOS actualizado.

El cambio de puerto simplemente reduce algo el ruido procedente de bots y escaneos automatizados.

Activar el DDNS de MikroTik

Como queremos conectarnos desde Internet sin depender de conocer permanentemente nuestra dirección IP pública, utilizaremos el servicio DDNS integrado de MikroTik, desde WinBox accedemos a:

IP → Cloud y ctivamos DDNS Enabled

Después de unos segundos aparecerá un nombre similar a:

xxxxxxxxxxxx.sn.mynetname.net

Este nombre apunta automáticamente a nuestra dirección IP pública, lo utilizaremos posteriormente en el archivo de configuración OpenVPN.

Para que esta configuración funcione directamente, el MikroTik debe ser accesible desde Internet. Si existe CG-NAT o tenemos otro router delante realizando NAT, será necesario solucionar previamente esta situación o realizar el correspondiente redireccionamiento de puertos.

Crear la autoridad certificadora CA

El certificado CA (Certificate Authority o Autoridad Certificadora) es el certificado raíz de confianza de nuestra VPN. Su función principal es firmar y validar los demás certificados.

OpenVPN utiliza certificados para establecer la identidad criptográfica del servidor y de los clientes, primero crearemos nuestra propia autoridad certificadora o CA, desde WinBox accedemos a System → Certificates y creamos una nueva CA.

Seleccionamos una validez suficientemente larga para nuestra infraestructura.

Ahora debemos firmarlo, seleccionamos OVPN-CA y pulsamos Sign, seleccionamos el propio certificado como CA cuando corresponda y realizamos la firma. Una vez terminado, el certificado debe aparecer como certificado válido y podremos utilizarlo para firmar los certificados del servidor y de los clientes.

La clave privada de nuestra CA debe mantenerse protegida, ya que permite emitir nuevos certificados válidos para nuestra infraestructura.

Crear el certificado del servidor OpenVPN

El certificado del servidor identifica específicamente al MikroTik que ejecuta el servidor OpenVPN. Creamos ahora un segundo certificado desde System → Certificates, utilizaremos como nombre OVPN-SERVER. En Common Name introduciremos el nombre OVPN-SERVER.

En Key Usage seleccionaremos los usos apropiados para un servidor TLS, incluyendo:

  • digital-signature
  • key-encipherment
  • tls-server

Seleccionamos posteriormente el certificado y pulsamos Sign, como autoridad certificadora seleccionamos OVPN-CA y realizamos la firma.

Una vez hecho esto tenemos que marcar la opción de Trusted:

Cuando termine tendremos el certificado que utilizará el servidor OpenVPN.

Crear el certificado del cliente

Cada usuario debería disponer de su propio certificado, esto permite revocar individualmente el acceso de un dispositivo sin afectar al resto de usuarios, creamos otro certificado System → Certificates por ejemplo, OVPN-CLIENTE-ALFONSO, Como Common Name podemos utilizar OVPN-CLIENTE-ALFONSO. En Key Usage habilitamos los usos adecuados para un cliente TLS, incluyendo tls-client

Guardamos y posteriormente firmamos, Sign, y como CA seleccionamos OVPN-CA

Después de firmarlo tendremos tres elementos principales:

OVPN-CA

OVPN-SERVER

OVPN-CLIENTE-ALFONSO

Para nuevos usuarios repetiremos únicamente la creación del certificado de cliente. No es recomendable distribuir el mismo certificado entre todos los usuarios.

Crear el perfil PPP para OpenVPN

OpenVPN utiliza la infraestructura PPP de RouterOS, accedemos a PPP → Profiles, y creamos un nuevo perfil.

  • Nombre: OPENVPN-PROFILE
  • En Local Address introducimos: 192.168.9.1
  • En Remote Address seleccionamos: pool-openvpn.
  • Podemos indicar también servidores DNS para los clientes VPN. Por ejemplo, si queremos utilizar el MikroTik como servidor DNS: 10.50.0.1

Si se utiliza esta opción debemos tener correctamente configurado el DNS del router y permitir las consultas procedentes de la red VPN.

Importante: seleccionar el Bridge no es necesario para que los clientes VPN puedan acceder a la red local. Eso se consigue mediante routing + firewall, que es precisamente la arquitectura que estamos configurando.

De hecho, para acceso remoto de Windows/Android, prefiero claramente mantener una subred VPN separada y controlar explícitamente qué puede hacer el rango de IP mediante el firewall. Es más limpio y controlable que intentar integrar los clientes VPN directamente en el bridge de la LAN.

Podemos establecer una sesión por usuario y limitar la velocidad.

Crear el usuario OpenVPN

Accedemos a PPP → Secrets Introducimos, por ejemplo

  • Name: alfonso
  • Password: una contraseña larga y aleatoria
  • Service: ovpn
  • Profile: OPENVPN-PROFILE

No es recomendable reutilizar contraseñas ni utilizar credenciales sencillas. En una infraestructura con varios usuarios crearemos un PPP Secret independiente para cada persona. De esta forma tenemos dos factores de autenticación que debe poseer el cliente, el certificado correspondiente y el usuario y contraseña PPP.

Configurar el servidor OpenVPN

Desde WinBox accedemos a la configuración de OVPN Server dentro del apartado PPP, en versiones recientes de RouterOS v7 existe soporte para múltiples servidores OpenVPN, funcionalidad introducida a partir de RouterOS 7.17. Creamos o editamos el servidor OpenVPN correspondiente.

  • Lo habilitamos y utilizamos como puerto: 42873
  • Como protocolo seleccionamos: UDP
  • En Mode utilizaremos: ip
  • Seleccionamos como certificado: OVPN-SERVER
  • Activamos: Require Client Certificate, con esta opción solamente podrán intentar autenticarse clientes que dispongan de un certificado válido firmado por nuestra CA.
  • En Auth seleccionaremos preferentemente: SHA256
  • En Cipher utilizaremos: AES256-GCM, RouterOS v7 soporta actualmente AES-128-GCM, AES-192-GCM y AES-256-GCM, además de diferentes cifrados CBC. Utilizaremos AES-256-GCM en esta guía.
  • En Default Profile seleccionamos: OPENVPN-PROFILE
  • Redirect Gateway: Disabled: desmarcado Def1: marcado

Cuando esté disponible la selección de versión TLS, utilizaremos una configuración compatible con clientes actuales y evitaremos algoritmos heredados innecesarios.

Configurar el firewall para permitir OpenVPN

Ahora debemos permitir que las conexiones OpenVPN lleguen hasta el router, accedemos a IP → Firewall → Filter Rules y creamos una nueva regla.

  • Chain: input
  • Protocol: udp
  • Dst. Port: 42873
  • In. Interface List: WAN
  • En Action seleccionamos: accept
  • Podemos añadir como comentario: Permitir OpenVPN UDP

Esta regla debe estar colocada antes de la regla general que bloquea el tráfico procedente de Internet hacia el propio router. No debemos simplemente colocarla al final del firewall si antes existe una regla drop.

Exportar el certificado de la CA y cliente

Volvemos a System → Certificates Seleccionamos OVPN-CA y pulsamos Export, no necesitamos exportar la clave privada de la CA, únicamente debemos proporcionar al cliente el certificado público: OVPN-CA.crt. Hacemos los mismo para cliente, estableciendo ademas del nombre una contraseña:

Ahora tendremos los siguientes archivos:

  • OVPN-CA.crt
  • cert_export_OVPN-CLIENTE-ALFONSO.crt
  • cert_export_OVPN-CLIENTE-ALFONSO.key

Nunca debemos distribuir la clave privada de nuestra autoridad certificadora.

Crear el archivo OVPN

Ahora construiremos el archivo que importaremos en Windows y Android, por ejemplo: MikroTik-OpenVPN.ovpn, lo exportamos desde el servidor OpenVPN.

Su configuración básica será similar a:

client
dev tun
proto udp
remote xxxxxxxxxxxx.sn.mynetname.net 42873

resolv-retry infinite
nobind
persist-key
persist-tun

remote-cert-tls server

auth SHA256
cipher AES-256-GCM
auth-user-pass

redirect-gateway def1

<ca>
AQUI-CONTENIDO-DEL-CERTIFICADO-CA
</ca>

<cert>
AQUI-CONTENIDO-DEL-CERTIFICADO-CLIENTE
</cert>

<key>
AQUI-CONTENIDO-DE-LA-CLAVE-PRIVADA-DEL-CLIENTE
</key>

El uso de un único archivo .ovpn con certificados y claves embebidos facilita especialmente la configuración en dispositivos Android. OpenVPN recomienda este formato unificado cuando se pretende evitar tener que gestionar varios archivos independientes en el dispositivo.

Revocar el acceso a un usuario

Si queremos impedir inmediatamente que una persona acceda mediante OpenVPN podemos deshabilitar su cuenta desde:

PPP → Secrets

También podemos revocar o eliminar el certificado del dispositivo, la combinación de ambos mecanismos permite gestionar de forma mucho más segura los accesos remotos. Por ejemplo, ante la pérdida de un portátil deberíamos:

  • deshabilitar su usuario si fuera necesario;
  • revocar el certificado correspondiente;
  • generar un nuevo certificado para el dispositivo sustituto.

Configurar OpenVPN en MikroTik RouterOS v7 proporciona una solución flexible para acceder de forma segura a nuestra infraestructura desde Windows, Android y otros sistemas compatibles con OpenVPN.

Las versiones actuales de RouterOS v7 han mejorado significativamente la implementación de OpenVPN respecto a las generaciones antiguas de RouterOS, permitiendo utilizar UDP, cifrados AES-GCM, certificados de cliente y envío de rutas desde el propio servidor.

Una configuración basada en UDP, AES-256-GCM, SHA-256, certificados individuales y autenticación mediante usuario y contraseña proporciona una base adecuada para desplegar accesos remotos seguros.

Además, combinar OpenVPN con MikroTik Cloud DDNS evita depender de una dirección IP pública fija y simplifica enormemente el acceso remoto.

Finalmente, debemos recordar que la seguridad de una VPN no depende de ocultar su puerto. Mantener RouterOS actualizado, aplicar correctamente el firewall, proteger las claves privadas y utilizar credenciales individuales es mucho más importante que utilizar un puerto diferente al estándar.