Servidor OpenVPN con MikroTik

  • Autor de la entrada:
  • Categoría de la entrada:Tutoriales
  • Tiempo de lectura:5 minutos de lectura

Introducción

El objetivo de este artículo es configurar un RouterOS como servidor OpenVPN para ser utilizado por clientes OpenVPN estándar de cualquier plataforma (Android, Windows, Apple). Se necesitan tres pasos para poder lograrlo, el primero es crear el certificado del servidor, el segundo es configurar el servidor OpenVPN con el certificado creado previamente y por último generar un archivo de configuración .ovpn para poder cargar del lado cliente.

Crear certificado del servidor

Definir las siguientes variables antes de generar el certificado:

  • CertNombre: nombre del certificado. Puede ser el año y el nombre del host VPN.
  • ServidorVPN: nombre de dominio o IP pública fija utilizada para alcanzar al servidor OpenVPN.
{
:local CertNombre "2021_vpn.proz.center"
:local ServidorVPN "vpn.proz.center"

/certificate add name=$CertNombre common-name=$ServidorVPN
/certificate sign $CertNombre
/certificate export-certificate $CertNombre
}

NOTA: hay formas más complejas, y a su vez seguras de configurar certificados, en este ejemplo demostramos una forma suficientemente segura y simple que permitirá poner en marcha este tipo de VPNs.

La última línea de este código exporta a la memoria flash el certificado con extensión .crt. Descargar ese archivo a una computadora (más adelante se va a utilizar) y luego borrarlo del MikroTik.

El certificado debería verse así al abrirlo con un editor de texto plano (por ejemplo el Notepad o Bloc de notas).

Configurar servidor OpenVPN

El servidor OpenVPN se crea como se muestra a continuación, configurando 4 elementos:

  • Pool: rango de IPs que serán utilizadas para darle a cada usuario que se autentique.
  • Gateway: IP del extremo local (lado servidor), es la misma para todos los clientes.
  • User y Password: credenciales de autenticación para cada cliente.
{
:local OpenVPNPool "172.31.0.2-172.31.0.9"
:local OpenVPNGW "172.31.0.1"
:local OpenVPNUser "usuario1"
:local OpenVPNPassword "12345678"
:local CertNombre "2021_vpn.proz.center"

/ip pool add name=pool_openvpn ranges=$OpenVPNPool

/ppp profile
add name=profile_openvpn use-encryption=yes \
local-address=$OpenVPNGW remote-address=pool_openvpn

/ppp secret
add name=OpenVPNUser password=OpenVPNPassword profile=profile_openvpn

/interface ovpn-server server
set enabled=yes \
auth=md5 cipher=aes128 certificate=$CertNombre
}

En caso de necesitar crear más clientes, repetir este bloque de código:

{
:local OpenVPNUser "usuario2"
:local OpenVPNPassword "12345678"

/ppp secret
add name=OpenVPNUser password=OpenVPNPassword profile=profile_openvpn
}

NOTA: MikroTik soporta integración con RADIUS para implementar un sistema de cuentas centralizado, más seguro que crear las cuentas localmente. Pero por fines prácticos esta forma es segura mientras no se divulguen las credenciales.

Crear archivo de configuración para clientes OpenVPN

El archivo de configuración de los clientes OpenVPN tiene una estructura especifica, que incluye el certificado del servidor (el certificado público) y unas cuantos parámetro útiles.

Es importante destacar que el usuario deberá ingresar sus credenciales al momento de conectarse, al menos la primera vez. Es decir, este archivo no contiene información de credenciales.

Generar archivo de configuración para clientes OpenVPN, reemplazar estos valores en la plantilla:

  • {ServidorVPN} = Por ejemplo vpn.domino.com o 203.0.113.100
  • {Puerto} = Por ejemplo 1194 o el que sea que se haya elegido.
  • {Certificado} = Abrir el archivo del certificado exportado del MikroTik con un editor de texto plano y copiar el contenido en esta sección.
  • {Red IP} = Agregar la red del lado servidor con máscara de subred en formato decimal, por ejemplo 172.16.0.0 255.255.255.0.

Plantilla:

# Archivo de configuración de OpenVPN.
# © PROZCENTER.

client
dev tun
remote {ServidorVPN} {Puerto} tcp-client
auth-user-pass
cipher AES-256-CBC
<ca>
{Certificado}
</ca>
route {Red IP} vpn_gateway
management-query-proxy

El archivo generado deberá ser guardado con extensión .ovpn.

Ejemplo de un archivo típico:

# Archivo de configuración de OpenVPN.
# © PROZCENTER.

client
dev tun
remote vpn.proz.center 1194 tcp-client
auth-user-pass
cipher AES-256-CBC
<ca>
-----BEGIN CERTIFICATE-----
MIIDJzCCAg+gAwIBAgIIC+GbJsGxwbowDQYJKoZIhvcNAQELBQAwDjEMMAoGA1UE
AwwDYmxhMB4XDTIxMDIyODA1MDE0OFoXDTIyMDIyODA1MDE0OFowDjEMMAoGA1UE
AwwDYmxhMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA54+CnhHrg73R
Exp8iutVR8eh32tyO143CnOrdZFR5sz4d1N+cYPTzi/xAXMzyH4k9YKDtXykyFVd
ziT2f5XcVmAQYXFNx9r5+mnX5dZEy/FO3SUQsFr5y+/fQ0M0PmlUjvpNOB8nAZJ1
OUyYN/VovFTq5aM6GgLFKjFaNeFUAsdI7Bg3cTlLYTjoNhESvlcPGkJ57NxRlZB5
Q0T1DIzzObgmlZGzv3n2pWD0/i+wppowWH8Yf16jU2q+Bpnf44RDZ49WkokLYWAT
GoBNoAKWNp7sJLG2NLcEpNdvxjB9KtDfI623sX3hzod5tKMno38sr/eEsa+A8qAW
a8UFITGiaQIDAQABo1234IGFMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQD
AgG2MB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAdBgNVHQ4EFgQUNMkT
j1RapxUeX0Ct3ry4jERHru0wJAYJYIZIAYb4QgENBBcWFUdlbmVyYXRlZCBieSBS
b3V0ZXJPUzANBgkqhkiG9w0BAQsFAAOCAQEAbZBbgym4ARwXlolYCUS8gXusQFg1
LtIz/ZdHdf2jzhMWjThF+tfEzffBAVfqjf1BUklCF+ymkOqF8HpUR7onX+vAVkaK
J7URWFSYWbpF418+nmvjepKdk0++7Jv5Qy80iQn+LLatI29rjj3bVEHVRyhRSAtd
X4uXYJJ/76myN8cpGR0UY7eKY0zzEQy7wFF9HUjRqCJYzgk0ahC8VZUdgqjd8kRf
U9vq08LTJEzgk7luIuQGGtiVdCPyi6SfIYau9Or3dzY/uJNdQy0fEP+AQSg9Nu4z
Q96G5+hSYvuzUrwX+CiylFBTvd+67P62dqqXAQrbVbB7cyvNKLK5oVZGYQ==
-----END CERTIFICATE-----
</ca>
route 172.16.0.0 255.255.255.0 vpn_gateway
management-query-proxy

Por último importar este archivo .ovpn en la aplicación cliente, que se encuentra disponible de manera gratis para múltiples platadormas:

Ejemplo de como importar el archivo .ovpn en la versión de código abierto para Windows:

Una vez importado el archivo, sólo hay que conectarse e ingresar las credenciales del usuario para que se complete la conexión y poder ingresar a la red remota.

Espero este articulo te haya resultado útil. ¡Hasta al próxima!