¿ Cómo crear una VPN con OpenVPN y routers Teltonika ? (II)

Generación de certificados TLS

El primer paso que debemos hacer antes de configurarnuestros routers servidor y clientes es generar todos los certificados y clavesnecesarias para poder encriptar y autenticar los extremos de la VPN.

La forma más sencilla de generar estos certificados y claveses a través del software OpenVPN para Windows o Linux.

En la página https://wiki.teltonika-networks.com/view/How_to_generate_TLS_certificates_(Windows)%3Fde la wiki de Teltonika tenemos el proceso para instalación del software bajoSO Windows y la generación de los certificados. En cualquier caso destacamoslos siguientes puntos:

El fichero vars.bat contiene algunos parámetros que luego seusarán por defecto en la generación de los certificados. Debemos ajustarlos anosotros para poder así personalizarlos y poderlos asociar al uso que vayamos ahacer de ellos.

Certificate Authority (CA): es el certificado raíz que seusa para firmar el resto de los certificados y claves. Posteriormente deberemoscargarlo tanto en el router servidor como en los routers clientes.

A continuación, generaremos el certificado del routerservidor con el comando build-key-server y los certificados de los routersclientes con el comandos build-key. Para cada certificado que creamos se creandos ficheros: nombre_certificado.crt y nombre_certificado.key dondenombre_certificado es el nombre que le hemos dado al certificado como parámetrodel comando de generación (no es importante, aunque sí recomendable usar unnombre identificativo).

En la generación de certificados debemos tener en cuenta losdos siguientes puntos:

En los certificados de clientes hay un parámetro llamadoCN=Common Name. Este parámetro es de vital importancia ya que es el que lepermite al servidor asociar la petición al cliente VPN en concreto. Por ello, deberemosmodificar el valor que nos proponer por defecto el comando de generación delcertificado y cambiarlo por un nombre único en toda la VPN y a ser posibleidentificativo (lugar, instalación, código,…). Cuando en el router servidordemos de alta al cliente TLS deberemos usar este mismo parámetro usandoidéntico texto.

En segundo lugar, debemos tener en cuenta que el proceso degeneración de certificados que se explica en el link adjunto es un procesodesde cero. Cada vez que repetimos este proceso creamos un CA.crt y un CA.keydiferentes y en base a ellos generamos después el resto de los certificados. Sia posteriori necesitamos añadir algún certificado cliente, no debemos repetirtodos los pasos ni generar el certificado CA de nuevo ya que éste seríadiferente y nuestro certificado cliente, por tanto, no correspondería con losanteriores. En este caso, debemos saltarnos todos los pasos iniciales yúnicamente generar el certificado cliente mediante el comando build-key.

Siendo prácticos, puede resultar difícil recordar si enalgún momento hemos generado otra CA y otros certificados en cuyo caso ya nopodríamos generar un nuevo certificado cliente para una VPN anterior. Por ellorecomendamos generar certificados cliente en exceso, aunque sea nombrándolos deforma genérica como client100, client101, … y guardarlos junto con el resto delas claves y certificados en un directorio aparte del propio de la instalaciónde OpenVPN. En este caso tendremos siempre la seguridad de que los ficheroscontenidos en ese directorio representan un grupo válido de claves ycertificados.

Configuración de una VPN TAP

Configuración del router servidor

En primer lugar, configuraremos el router servidor. Paraello iremos al menú VPN – OpenVPN y crearemos una nueva instancia de servidorOpenVPN. El nombre que le demos no es importante.

NOTA: aunque teóricamente es posible tener creadas (aunquesólo una activa) varias instancias de servidor OpenVPN recomendamos borrar lasque no usemos y dejar sólo la válida. En ocasiones, el router puede mezclarcertificados entre varias instancias y por ello recomendamos sólo tener unainstancia activa con unos certificados cargados.

Una vez creado pincharemos sobre Edit para configurar elservidor.

Por defecto el servidor está en modo TUN. Lo cambiaremos aTAP. Podemos dejar por defecto el resto de los parámetros de configuración(puerto a 1194, protocolo UDP/TCP y compresión LZO). En todo caso tengamos encuenta que deben coincidir entre servidor y clientes.

A continuación, deberemos cargar los certificados (ca.crt,server.crt, server.key, dh2048.pem) (suponemos que el certificado servidor lohemos creado con el nombre server).

Finalmente pincharemos sobre el botón Save para guardar loscambios.

NOTA: en VPN de tipo TAP NO debemos añadir los clientes TLSmanualmente.

Configuración del router cliente

Como en el caso del servidor iremos al menú VPN – OpenVPN ytambién como en el caso anterior no recomendamos tener más de una instancia decliente. Una vez creado pincharemos en Edit para configurarlo.

Cambiaremos el modo de TUN a TAP y verificaremos que elresto de los parámetros coincide con los del servidor VPN.

Finalmente cargaremos los certificados (ca.crt (el mismo queen el servidor), client.crt y client.key). Al final pincharemos en Save paraguardar los cambios.

Verificación de la VPN

Podemos verificar si el router cliente se ha conectado al routerservidor VPN y se ha establecido en túnel VPN a través del menú Status –Network – OpenVPN.

En esta pantalla podemos ver un listado de los clientesconectados con su CN (Common Name), la IP púbica desde la que se conecta, ladirección MAC virtual del cliente en la VPN  y el instante de la conexión.

Lógicamente, la mejor verificación de la VPN es conectar unPC detrás del servidor VPN y poder hacer ping y acceder a todos los routerscliente VPN y a cualquier equipo conectado a la LAN de ellos.

Troubleshooting

En caso de que no se establezca la VPN deberemos:

  • Verificar que la dirección IP pública del routerservidor es accesible y que tenemos redireccionado el puerto TCP/UDP 1194 en elrouter ADSL/FTTH a la IP WAN de nuestro router servidor

  • Verificar que los parámetros de puerto,protocolo, compresión, encriptación, … son idénticos en el router servidor y enlos clientes

  • Verificar que tanto router servidor como clientetienen la fecha correcta (por defecto la obtienen de servidores NTP enInternet)

Finalmente, también podemos verificar el log del router enSystem – Administration – Troubleshoot – System Log

Mon Mar 25 15:30:49 2019 daemon.noticeopenvpn(7365727665725F53657276657232)[17144]: client32/95.131.170.224 peerinfo: IV_VER=2.4.4

Mon Mar 25 15:30:49 2019 daemon.noticeopenvpn(7365727665725F53657276657232)[17144]: client32/95.131.170.224 peerinfo: IV_PLAT=linux

Mon Mar 25 15:30:49 2019 daemon.noticeopenvpn(7365727665725F53657276657232)[17144]: client32/95.131.170.224 peerinfo: IV_PROTO=2

Mon Mar 25 15:30:49 2019 daemon.notice openvpn(7365727665725F53657276657232)[17144]:client32/95.131.170.224 peer info: IV_LZ4=1

Mon Mar 25 15:30:49 2019 daemon.noticeopenvpn(7365727665725F53657276657232)[17144]: client32/95.131.170.224 peerinfo: IV_LZ4v2=1

Mon Mar 25 15:30:49 2019 daemon.notice openvpn(7365727665725F53657276657232)[17144]:client32/95.131.170.224 peer info: IV_LZO=1

Mon Mar 25 15:30:49 2019 daemon.noticeopenvpn(7365727665725F53657276657232)[17144]: client32/95.131.170.224 peerinfo: IV_COMP_STUB=1

Mon Mar 25 15:30:49 2019 daemon.noticeopenvpn(7365727665725F53657276657232)[17144]: client32/95.131.170.224 peerinfo: IV_COMP_STUBv2=1

Mon Mar 25 15:30:49 2019 daemon.noticeopenvpn(7365727665725F53657276657232)[17144]: client32/95.131.170.224 peerinfo: IV_TCPNL=1

Mon Mar 25 15:30:49 2019 daemon.noticeopenvpn(7365727665725F53657276657232)[17144]: client32/95.131.170.224 OutgoingData Channel: Cipher ‘AES-256-CBC’ initialized with 256 bit key

Mon Mar 25 15:30:49 2019 daemon.noticeopenvpn(7365727665725F53657276657232)[17144]: client32/95.131.170.224 OutgoingData Channel: Using 160 bit message hash ‘SHA1’ for HMAC authentication

Mon Mar 25 15:30:49 2019 daemon.noticeopenvpn(7365727665725F53657276657232)[17144]: client32/95.131.170.224 ControlChannel: TLSv1, cipher TLSv1/SSLv3 DHE-RSA-AES256-SHA, 4096 bit RSA

En los registros openvpn podemos localizar los posibles errores en la negociación entre servidor y cliente.

Reply

or to participate.