Como esta misma madrugada decía nuestro amigo Ilion el mundo de Home Assistant (HA) no solo parece sino que es realmente adictivo. Por ello (aunque también «por culpa» del nuevo puesto de trabajo y los proyectos y retos que con él nos han llegado) explican fácilmente que este pasado mes de enero ha sido el primero de nuestra larga historia PcDeMaNeRa que no hemos publicado revisión alguna… y esto no puede seguir así.
Por ello y sobre todo para que no se nos olvide para el futuro y al mismo tiempo por si puede servir para los otros muchos amigos entusiasmados con HA vamos a retomar nuestras revisiones del 2018 con otra muy relacionada con éste aunque también utilizable en muchas otras aplicaciones para «atravesar» los férreos controles de seguridad que tenemos en la empresas que nos dedicamos a la ciberseguridad (y yo que me quejaba de la petrolera que me ponían complicado acceder a ciertas páginas y a ciertos puertos de servidores desconocidos!).
Pues bien y gracias a Google y al apoyo de la comunidad Open Source que funcionan tan bien en estos temas hoy os vamos a presentar el binomio NGINX y DATAPLICITY personalizándolo para el uso y disfrute de Home Assistant (HA).
JUSTIFICACION / NECESIDAD DE INSTALAR DATAPLICITY
Antes de nada algunas cosas para que vayáis ubicando la «necesidad» de la instalación de todo esto con lo sencillo que resulta acceder a tu HA casero a través de cualquier navegador sin más que instalarlo en una RPi3 (por ejemplo y listo).
Cuando quieres acceder desde fuera de tu red y además no dispones de una IP fija lo más habitual y sencillo es «contratar» (incluso sin coste) alguno de los servicios de DNS dinámico (DDNS) te permiten asignar un nombre de dominio de Internet a un equipo con una dirección IP dinámica.
Ahora bien si tu empresa tiene «capado» el acceso a IP numéricas o a cualquier suministrador de DNS la cosa se complica teniendo que olvidarte de utilizar los recursos corporativos o utilizar los datos de tu móvil (o tablet) y poco más… ¿ o no ?
Existe una solución y se llama DATAPLICITY que no es más que una plataforma de uso gratuito (para un primer dispositivo) que nos permite tener siempre una vía de acceso a nuestra Raspberry Pi de manera que, aunque cambie nuestra IP, siempre podamos conectarnos de forma remota a nuestro servidor a través de esta plataforma. Dataplicity nos permite establecer una conexión segura, a través del protocolo HTTPS, con nuestro servidor directamente y sin necesidad de depender de otras plataformas o servidores como un VPN o un DDNS.
Ahora bien, lo que no dice la «propaganda» del producto es que Dataplicity solo es capaz de «publicar» lo que salga por el puerto 80 … además de poder utilizar siempre un acceso vía SSH (en modo terminal) a la RPi.
Hasta aquí todo perfecto por cuanto las empresas suelen permitir a sus empleados el acceso (más o menos libre) al puerto 80 … y encima al no tratarse de un servicios DNS (masificado, conocido) tampoco está en la lista negra de servidores / dominios a evitar.
El problema viene en que Home Assistant, a pesar de poder elegir un puerto de salida distinto al «por defecto» tiene que ser uno muy, muy elevado y nunca el 80. Habemus un problema!.
Por un lado desde la empresa solo podemos «atacar» al puerto 80 y HA no puede trabajar en dicho puerto. ¿Solución? Muy fácil: Usar NGINX que, como todo el mundo sabe, no es más que un servidor web/proxy inverso (open source) ligero de alto rendimiento y un proxy para protocolos de correo electrónico, etc. Entre otras cosas permite redireccionar el tráfico de puertos y de una forma segura por lo que permitirá enviar la salida del HA del puerto 8123 al 80 del Dataplicity.
INSTALACION DE NGINX
Para la instalación del NGINX lo mejor es tirar de la documentación «oficial» de Home Assistant aunque por nuestra parte incluiremos algunos comentarios de cosas que no están suficientemente claras al menos para un no experto en estos temas.
1. GET A DOMAIN NAME FORWARDED TO YOUR IP
Aunque no es imprescindible si usamos posteriormente Dataplicity, no está de más «contratar» un servicio de DNS de los muchos que hay en el mercado (muchos de los cuales son gratuitos).
2 INSTALL NGINX ON YOUR SERVER
En una RPi es de lo más sencillo:
> sudo apt update
> sudo apt-upgrade
> sudo apt-get install nginx
3. OBTAIN AN SSL CERTIFICATE
Aunque no es imprescindible siempre es bueno disponer de un Certificado SSL y si no tienes tu propio dominio (y no necesitas usar IFTTT) siempre te los puedes generar tú mismo para encriptar todo el tráfico a/desde tu HA.
> openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days 9999
> openssl rsa -in key.pem -out key.pem
> sudo cp key.pem cert.pem /etc/nginx/ssl
> sudo chmod 600 /etc/nginx/ssl/key.pem /etc/nginx/ssl/cert.pem
> sudo chown root:root /etc/nginx/ssl/key.pem /etc/nginx/ssl/cert.pem
4. CREATE DHPARAMS FILE
A continuación tendrás que generar el resto de tu seguridad lo que llevará bastantes minutos… pero al menos sigue siendo gratuito.
> cd /etc/nginx/ssl
> sudo openssl dhparam -out dhparams.pem 2048
5. INSTALL CONFIGURATION FILE IN NGINX
> cd /etc/nginx/sites-available
Copiar nuestro fichero hass y poner en el server_name el nombre de tu servidor DNS contratado.
> sudo nano hass
6. ENABLE THE HOME ASSISTANT CONFIGURATION
> cd /etc/nginx/sites-enabled
> sudo unlink default
> sudo ln ../sites-available/hass default
7. START NGINX
Personalmente prefiero la opción de crear un servicio y arrancarlo como tal para evitar problemas con este fichero nginx.service
> sudo chmod 644 /lib/systemd/system/nginx.service
> sudo systemctl daemon-reload
> sudo systemctl enable nginx.service
> sudo systemctl start nginx.service
La «gracia» de este servicio es asegurarse que se ejecuta después de que Home Assistant esté en marcha ya que en otro caso podréis tener errores de todo tipo cuando intentéis acceder a vuestro HA desde fuera de casa
INSTALACION DE DATAPLICITY
Tranquilos que lo que queda es mucho más sencillo que lo que hemos tenido que hacer hasta ahora. Para instalar Dataplicity basta con entrar en la terminal de la RPi y teclear:
> sudo curl https://www.dataplicity.com/jjc9ogdq.py | sudo python
y ya está!.
Ya solo queda redireccionar los puertos en vuestros router 80 y 443 (no el 8123, claro)
¿Y qué mejor que terminar nuestra «revisión» con una bonita imagen que deja más que claro el funcionamiento de DATAPLICITY?
Desde aquí dar las gracias a Radoslaw de Dataplicity que se alegró mucho cuando conseguimos que funcionase todo a pesar de no seguir sus instrucciones. Nos recomendó primero quitar NGINX y después formatear y empezar de cero con nuestra RPi. Al final (por nuestra cuenta y después de muchas horas perdidas) nos dimos cuenta de que todo el problema venía de que el servicio de NGINX arrancaba unas veces antes y otras después del de HA y de ahí los problemas tan raros que sufrimos durante mucho tiempo.
Hasta la próxima.
Pedro
1811
Habrá que leerse este interesante tutorial donde explican en detalle todo lo que tienes que saber para instalar de la mejor forma HA en tu RPi.
Me lo apunto por si algún día decido dejar mi MOX para volver a instalar HA en la RPi 😉