Hace ya algún tiempo estuve hablando de cómo estuve intentando ver la tele a través de la red local, y aunque me gusta hacer cosas que muchas veces no tienen sentido (aparente) en este caso tenía un objetivo en mente.
Lo hice para poder ver la television española estando fuera de España. Si.. que no hay mucho que ver, y que realmente todo se puede hacer de otra forma, pero a mi me hacía gracia esta.
La idea era combinar el HdHomerun con un servidor Plex para poder ver la tele a través de Plex. La forma esta muy documentada. Plex tiene soporte para “Live TV” .. simplemente hay que tener dos requisitos.
- Una sintonizadora compatible (HDHomerun)
- Poder conectar Plex a la sintonizadora.
En mi caso partía de esta configuración.
pero para poder conectar Plex a la sintonizadora tenía que hacer algo parecido a esto.
Basicamente tenia que poder conectarme desde el servidor Plex al HDHomerun. En este punto podríamos empezar una larga explicación de por que esto es complicado, pero no puedo extender este post tanto como para replicar las clases de arquitectura de redes de la uni. Digamos que tanto mi servidor de Plex como el HDHomerun están en redes privadas y no pueden comunicarse a través de internet.
Las opciones para hacer esto posible son:
- Redirigir puertos en el router tanto al servidor Plex como a la sintonizadora. Realmente hay muchas razones por las que eso no me apetece.
- Crear una red privada virtual (VPN) entre los dos routers para que funcionen como si estuvieran conectados uno a otro y puedan verse los ordenadores de detrás de esos routers.
Pues como he mencionado la primera opción no me gustaba del todo y la segunda opción potencialmente tiene mas ventajas pues ella que vamos.
Configurar una VPN entre dos equipos en la red depende mucho del fabricante y el modelo del dispositivo que estéis usando. En mi caso hace algunos años que me decante por usar UNIFI en mis equipos en casa. Concretamente para el router / firewall uso el USG. Es un modelo antiguo ya. Tiene algunas pegas. Entre una de ellas es que la CPU que tiene no es muy potente, por lo que si haces muchas cosas que dependan de la CPU la cantidad de trafico de red que puede procesar se ve reducida considerablemente.
Y por que menciono esto. Pues por que a la hora de configurar el tipo de VPN tenemos dos opciones.
- OpenVPN
- IPSEC
La opción que tome en un principio fue OpenVPN. La configuración fue muy sencilla y cuestión de unas horas tenia todo funcionando, y así he estado casi más de un año. Pero un reciente cambio ha hecho que tenga plantearme las cosas.
En casa, para almacenamiento, tenia una NAS. Y solía hacer backups de esa NAS en la nube, pero por cambios en la política del servidor de cloud he decidido que a la larga me va a venir mejor duplicar este contenido en otro NAS en España. Todo lo que hay es para mi uso personal, pero el tener dos sitios para guardar cosas me ayuda con proyectos personales.
Y claro, para eso tenemos que configurar un proceso que sincroniza el contenido de un NAS con el otro. No es algo muy complejo y podéis encontrar muchas opciones para ello (dependiendo del fabricante del NAS). Para mi caso no es algo muy relevante. Simplemente supuso que el trafico de la VPN se multiplico considerablemente.
Y como afecta esto a nuestra historia. Pues como dije antes tenia dos opciones para VPN. OpenVPN (por software) y IPSEC (con aceleración hardware) y un firewall (USG) que va justito en CPU. Pues cuando empece a configurar los procesos de sincronización el trafico de red no subia de 1 Mb por segundo. Y no solo eso, sino que cuando la VPN estaba saturada la tele no funcionaba.
El cuello de botella en este caso era la CPU del USG. Asi que me puse a investigar.
- Actualizar el equipo. Por mucho que me guste cacharrear con equipos nuevos UNIFI no tiene un firewall (Solo FW.. no la linea de dream machine) que tenga una CPU en condiciones. Hay un modelo en fabricación, pero la verdad es que esperar no es lo mio.
- Cambiar la VPN por IPSEC. Y aqui es el por que de nuestro post (que la verdad .. como introducción ha sido largo)
La razón por la que me decante por OpenVPN es por que IPSEC con UNIFI requiere especificar una IP como parte de la configuración. No admite un FQHN.
y las IPs que tengo en los proveedores de internet son ambas dinámicas, por lo que si cambian, tengo que actualizar la configuración de la VPN, cosa que no me llama mucho la atención. No me apetece tener que estar pendiente de ello, aunque solo sea una o dos veces al año.
Así que me puse a investigar, y después de un rato investigando es cuándo me propuse escribir estas notas. A pesar de que es posible configurar un túnel IPSEC con hostnames UNIFI no da esa opción desde el interfaz de usuario de la controladora. Y he encontrado las instrucciones para configurarlo muy confusas.
Mi punto de comienzo de esa investigación fue esta URL
En esa dirección te explican que hay dos formas básicamente de configurar un túnel IPSEC con IP dinámica. Una es usando la “auto Ipsec”. Esta opción esta disponible cuando ambos “sites” están configurados en la misma controladora.
Que quiere decir esto. SITE es lo que utiliza UNIFI para indicar todos los dispositivos que están en una misma localización. En mi caso tendría DOS sites. España y Suiza, pero estos dos sites se encuentran cada uno en una controladora. Por lo que esta opción no es valida para mí. ¿ Y por que no poner los dos sites en una controladora ? .. pues no es trivial.
- Para que una controladora pueda gestionar todos los dispositivos de ambos SITES los dispositivos tiene que poder (de alguna forma) hablar con la controladora. O bien directamente o bien a través de una VPN.. (ostia… si eso es lo que estoy arreglando). Para hacer que los dispositivos vean al controladora directamente tendrías que direcciones puertos en el firewall del SITE que va a hospedar la controladora y manualmente decirle a todos los dispositivos que tiene que hablar con esa controladora. No es imposible, pero no es trivial.
El parametro de cual es la dirección de la controladora a la que tienen que hablar los dispositivos para configurarse se indica a través de la configuración del DHCP
o bien a través de SSH con el comando
set-inform http://<ADDRESS>:8080/inform
ADDRESS en este caso debería ser el FQHN del firewall. Para conseguir un FQHN para la IP dinámica deberías dar de alta un DyDNS en tu USG.
Aunque no es imposible esto supone que si por cualquier cosa pierdes la conexión a tu controladora no vas a poder configurar tus dispositivos si no es de manera manual. Este setup no es algo que me llame mucho la atención. Así que vamos a por la segunda opción.
La otra opción es configurar manualmente los parámetros de la VPN. Suena fácil, pero no he encontrado una guía paso por paso de como hacerlo (y aquí la razón de este POST).
Si, llevo escribiendo casi 1200 palabras como introducción a por qué he estado liado con la configuración de mis firewalls durante unas horas.
Partimos de varios puntos.
- Ambos firewalls tienen configurados DyDNS en ellos. Sino va a ser complicado. En mi caso esto ya estaba, la configuración inicial de OpenVPN te deja poner un HOSTNAME asi que ya los tenial
- Tenemos una configuración de IPSEC funcionando. Vamos a ver. Tenemos IPs dinámicas, pero no cambian tan amenudo. Así que al menos van a estar estáticas lo suficiente como para que configures una VPN con IPSEC funcional.
Y este es el punto en el que estoy. Ahora mismo hemos pasado de
[SUM] 0.00-5.37 sec 3.01 MBytes 4.71 Mbits/sec receiver
a
[SUM] 0.00-5.08 sec 25.5 MBytes 42.1 Mbits/sec receiver
lo cual es un aumento considerable (teniendo en cuenta mi conexión actual).
Pues una vez estamos en este punto vamos a hacer una serie de pasos para preparar el fichero config.gateway.json
- Nos conectamos a nuestro USG. El usuario / constraseña dependerá de nuestra configuración. Una vez conectado ejecutamos el siguiente comando.
$ mca-ctrl -t dump-cfg > config.txt
Este comando nos permite obtener una copia de la configuración que tenemos actualmente. Si todo es correcto (y tenemos una VPN funcionando) entre esa configuración deberemos tener una sección que define la VPN que acabamos de configurar. Debería empezar con algo como
{
«vpn»: {
«ipsec»: {…
…
Esto nos ayudara a ver cual es la sintaxis que necesitamos para poder configurar la VPN. En la configuración que tenemos todo esta basado en IPs. Lógicamente nosotros tendremos que crear una nueva configuración en un fichero remplazando las IPs por FQHN.
{
«vpn»: {
«ipsec»: {
«site-to-site»: {
«peer»: {
“REMOTE_FQHN»: {
«local-address»: “LOCAL_FQHN”,
}
}
}
},
}
}
Lo mismo vuestra configuración varia. Simplemente adaptarla a vuestro caso concreto.
El fichero resultado solo tiene que tener la ENTRADA correspondiente a la definición de la VPN.
Con ese contenido deberís conectaros a la controladora y buscar el direction donde tenéis que colocar el fichero config.gateway.json El fichero debe contener el resultado de antes. En mi caso, como es la controladora de unifi y es el site por defecto el path es:
/srv/unifi/data/sites/[site name]/
Si no habéis creado otro site el nombre sera DEFAULT Así que alla vamos
# pwd
/srv/unifi/data/sites/default
root@UniFi-CloudKey# vim config.gateway.json
root@UniFi-CloudKey# chown unifi:unifi config.gateway.json
Una vez habéis creado el fichero aseguraros que el owner del fichero es unifi:unifi y una vez esta eso podéis esperar o bien forzar el provisioning del dispositivo a través del interfaz web.
Todo parece muy sencillo, pero a mi me dio muchos problemas. El formato no era correcto. También me dio problemas con VTIs (rutado dinámico). El tema del formato lo arregle a través de esta web.
el tema del rutado dinamico lo arregle cambiando una opción en la configuración y generando otra vez la config.
Una vez el prvisioning se ha hecho correctamente podéis volver a comprobarlo usando el comando.
$ mca-ctrl -t dump-cfg
en la salida de ese comando debería haber referencias a la nueva configuración que habéis creado. Una nota es que la configuración que hemos hecho no remplaza la configuración que hay. Vamos, que vais a ver dos entradas. La prueba de fuego es ir al interfaz web y deshabilitar la VPN que crea el interfaz. No tenéis por que borrarla. Solo desactivarla.
En teoria si todo ha funcionado correctamente. Lo mismo tarda un poco en volver a estar activo.
No se si estas notas le servirán a alguien para algo, pero a mi me permitirán acordarme de el ratito que he echado intentando que mi backup se haga antes (y que mientras se hace podamos ver la tele española)