¿Qué es OpenVPN?

OpenVPN es un protocolo de conexión punto a punto de código abierto que se utiliza para facilitar un túnel seguro entre dos puntos de una red. En términos sencillos, esto significa que OpenVPN es una tecnología confiable utilizada por muchas redes privadas virtuales, o VPN, para asegurarse de que los datos enviados a través de Internet vayan cifrados y sean privados.

Ejemplos de implementaciones:

OpenVPN se puede implementar para conectar equipos remotos de manera totalmente cifrada a un sitio remoto por ejemplo acceder directamente a recursos remotos como si estuviéramos en el mismo sitio, configuraciones client-to-site ó site-to-site, es importante también conocer que este protocolo nos permite ocupar el puerto 443 lo cual es una ventaja sobre otros protocolos que ya usan puertos definidos, el caso de usar el puerto 443 nos permite saltar restricciones de pais, firewalls y de esta manera podríamos evadir la censura de VPNs que algunos paises o proveedores imponen ya que el puerto 443 es imposible de bloquear porque se usan para visitar sitios Web.

Características a considerar:

Soportado:

  • TCP

  • bridging (tap device)

  • routing (tun device)

  • certificates

  • p2p mode (refer to OpenVPN V2.1 manual page)

No soportado:

  • UDP

  • LZO compression

Requerimientos:

-Contar con servicio de internet que nos proporcione IP publica, esto solo es necesario del lado del servidor.

-Descargar software OpenVPN:

Windows: https://openvpn.net/client-connect-vpn-for-windows/

MacOS: https://openvpn.net/vpn-server-resources/connecting-to-access-server-with-macos/

IOS: https://openvpn.net/vpn-server-resources/connecting-to-access-server-with-apple-ios/

Android: https://openvpn.net/vpn-server-resources/connecting-to-access-server-with-android/

Linux: https://openvpn.net/vpn-server-resources/connecting-to-access-server-with-linux/

Para equipos de otras marcas o sistema operativo revisar su documentación o ficha técnica, normalmente equipos embebidos ya vienen con el cliente OpenVPN instalado por GUI deben permitir autenticación por usuario y contraseña (revisar sus fichas técnicas previamente).

Usar WinBox para acceder a configurar RouterOS:

https://mikrotik.com/download

Vamos a la configuración:

Primer paso:

- Como primer paso debemos tener nuestro RouterOS ya configurado con una WAN y una LAN, de no ser así podemos seguir los siguientes manuales:

https://soporte.syscom.mx/es/articles/1439489-mikrotik-configurar-puerto-wan

https://soporte.syscom.mx/es/articles/1439489-mikrotik-configurar-puerto-wan

- Y habilitar IP cloud DDNS de nuestro MikroTik el cual podremos usar con IP publica estática o dinámica, podemos usar el siguiente manual:

https://soporte.syscom.mx/es/articles/3840228-mikrotik-activar-el-ip-cloud-ddns-de-mikrotik

Segundo paso:

Generamos los certificados en nuestro RouterOS:

CA (certificate authority) que es el que va a emitir y firmar todos los certificados, ingresamos los siguientes comandos en la terminal:

# Crear CA y autofirmar

[[email protected]] > /certificate add name=CA country="MX" state="MX" locality="MX" organization="empresa" unit="sucursal" common-name="CA" key-size=4096 days-valid=730 key-usage=crl-sign,key-cert-sign


[[email protected]] > /certificate sign CA ca-crl-host=127.0.0.1 name="CA"

El certificado del servidor:

# Crear certificado del servidor OpenVPN y firmarlo con el CA 

[[email protected]] > /certificate add name=SERVIDOR country="MX" state="MX" locality="MX" organization="empresa" unit="sucursal" common-name="SERVIDOR" key-size=4096 days-valid=730 key-usage=digital-signature,key-encipherment,tls-server


[[email protected]] > /certificate sign SERVIDOR ca="CA" name="SERVIDOR"

Certificados de usuarios:

# Crear plantilla de certificado para usuarios y firmarlos con CA.

[[email protected]] > /certificate add name=PLANTILLA-USERS country="MX" state="MX" locality="MX" organization="empresa" unit="sucursal" common-name="USUARIOS" key-size=4096 days-valid=730 key-usage=tls-client


[[email protected]] > /certificate sign PLANTILLA-USERS ca="CA" name="PLANTILLA-USERS"


# Exportar el certificado de CA

[[email protected]] > /certificate export-certificate CA export-passphrase=""


Seguido de haber configurado la plantilla podemos generar mas usuarios con los mismos parámetros y así consecutivamente por cada usuario que vayamos a conectar:


# Crear certificados para clientes ejecutando estos comandos.

[[email protected]] > /certificate add name=USUARIO1 copy-from="PLANTILLA-USERS" common-name="USUARIO1"


[[email protected]] > /certificate sign USUARIO1 ca="CA" name="USUARIO1"


# Exportar el certificado de cliente con una contraseña diferente por cada usuario que queramos conectar para mayor seguridad.

[[email protected]] > /certificate export-certificate USUARIO1 export-passphrase="loquesea"

Tercer paso:

Descargamos los certificados generados, nos vamos a files en el MikroTik y vamos a necesitar para el primer usuario por ejemplo los certificados:

-cert_export_CA.crt - Es el mismo para todos los usuarios que conectemos.

-cert_export_USUARIO1.crt - Cambia por cada usuario (dispositivo) que generemos y queramos conectar.

-cert_export_USUARIO1.key - Cambia por cada usuario que generemos y queramos conectar.

Se realizara un paso un poco tedioso para la contraseña de la clave privada (además del nombre de usuario / contraseña) MikroTik no permite la exportación sin él, pero afortunadamente podemos usar OpenSSL para cambiar esto:

Para evitar que MikroTik nos pida la clave extra debemos copiar el archivo *.key a un sistema Linux y ejecutar.


Con esto ya tenemos desbloqueado el archivo para evitar que MikroTik nos pida la clave extra, aquí solo nos pedirá la clave que le asignamos al crear el key, con esto reemplazamos el archivo original por USUARIO1.key que se definirá en el archivo de configuración *.ovpn


En Windows también podemos hacer uso del binario OpenSSL, el comando es igual solo debemos ser mas específicos en definir la ruta completa del archivo, podemos descargar y ver documentación en el siguiente sitio:

http://gnuwin32.sourceforge.net/packages/openssl.htm

Cuarto paso:

Generamos los archivos de configuración con los siguientes parámetros y lo guardamos con extensión *.ovpn también generamos un archivo credentials.txt donde especificamos el usuario y contraseña de cada certificado generado por usuario:



Explico a que se refieren algunos parámetros importantes definir, # solo significa comentario (no afecta al archivo de configuración).

client  #tipo de archivo para cliente
dev tun #tipo de túnel TUN para dispositivos móviles, TAP para site-to-site
proto tcp-client #MikroTik solo soporta conexión por TCP de momento.
persist-key
persist-tun
tls-client
remote-cert-tls server
verb 4 #Nivel de información que nos dará el LOG del mikrotik y software
auth-nocache
mute 10
remote b880exxxxxx.sn.mynetname.net #nombre de dominio o ip publica
port 1194 #puerto de conexión que hayamos especificado
auth SHA1 #algoritmo de cifrado definido
cipher AES-256-CBC #algoritmo de cifrado definido
redirect-gateway def1 #nos permite usar la WAN remota para internet.
push "route 10.10.100.1 255.255.255.0 10.10.8.1" #ruta para alcanzar LAN
auth-user-pass credentials.txt #credenciales que definimos en certificados
ca cert_export_CA.crt #certificado de autoridad igual en todos
cert cert_export_USUARIO1.crt #certificado por cada cliente
key USUARIO1.key #certificado por cada cliente

Ejemplo archivo OVPN:

Ejemplo archivo de credenciales, en este apartado se ponen las credenciales que se definirán en el secret mas adelante, no tiene nada que ver con la clave del archivo *.key


Podemos ordenar los archivos para cada usuario de la siguiente manera:



Todo debe quedar en la misma carpeta para que sea identificado por el software OpenVPN:

Nota: para cada usuario los parámetros que hay que cambiar son los nombres de los certificados en este caso los últimos 3 parámetros, el DDNS o IP publica, puerto, tipos de cifrado y ruta para alcanzar equipos internos según sea su red LAN.

Ultimo paso:

Para que no se pierda el enfoque en el MikroTik ya tengo configurada una interfaz WAN y LAN de la siguiente manera:

LAN 10.10.100.1/24

WAN 192.168.1.60/24

Por ultimo configuramos el servicio OpenVPN en nuestro MikroTik, para ello abrimos la terminal de nuevo:

# Crear el pool de direcciones que entregara el servicio.

[[email protected]] > /ip pool add name=OVPN-POOL ranges=10.10.8.10-10.10.8.254

Configuramos el perfil de servicio OpenVPN:

#En este comando definimos los parámetros que se le darán al cliente remoto como los DNS que en este caso puede ser el mismo server MikroTik.


[[email protected]] > /ppp profile add dns-server=10.10.100.1 local-address=10.10.8.1 name=PERFIL-OVPN remote-address=OVPN-POOL use-compression=no use-encryption=required


-En el siguiente comando especificamos el cifrado AES256 (importante definirlo por ser uno de los cifrados mas robustos actualmente) y también es donde habilitamos el servicio OPENVPN para comenzar a escuchar conexiones.


[[email protected]] > /interface ovpn-server server set certificate=SERVIDOR cipher=aes256 default-profile=PERFIL-OVPN enabled=yes require-client-certificate=yes

Agregamos el usuario1 y así consecutivamente con cada usuario:

#Este comando crea el USUARIO1 para agregar mayor seguridad y no sea solo por certificados, esto es lo que se define en el archivo credentials.txt

[[email protected]] > /ppp secret add name=USUARIO1 password=loquegustes profile=PERFIL-OVPN service=ovpn

Agregamos reglas al firewall para aceptar las conexiones con los siguientes comandos:

#Esta regla acepta la conexión con el puerto 1194

[[email protected]] > /ip firewall filter add action=accept chain=input comment="ACEPTAR VPN" dst-port=1194 protocol=tcp

#Esta regla nos permite que los usuarios remotos salgan a internet por la WAN del server como si estuvieran en local.

[[email protected]] > /ip firewall nat add chain=srcnat action=masquerade src-address=10.10.8.0/24 log=no log-prefix="" comment="OVPN -> RedLAN"

Por ultimo copiamos los certificados, el archivo de credenciales y configuración a cualquier carpeta en nuestro smartphone o laptop y desde ahí lo ejecutamos con la aplicación.

Ejemplos:

En Windows:

y ejecutamos con la aplicación OpenVPN el archivo *.ovpn:

Con esto ya podremos conectar dispositivos remotos de una manera completamente segura con un cifrado de grado militar como lo es AES256 con una longitud de 4096 bits para que nuestra comunicación sea confidencial.

Cualquier duda, aclaración o proyecto de este tipo nos pueden contactar al área de ingeniería de redes.

Fuentes:

https://wiki.mikrotik.com/wiki/OpenVPN

https://openvpn.net/community-resources/

¿Encontró su respuesta?