jueves, 22 de agosto de 2024

Home Assistant: Acceso remoto

En un artículo anterior, expliqué cómo acceder remotamente a Home Assistant utilizando Duck DNS pero me han surgido algunos problemas de integración con otros sistemas utilizando este método así que voy a realizar la configuración del acceso remoto incorporando un proxy inverso.


En este artículo voy a explicar todo el proceso paso a paso, incluso la configuración de Duck DNS, por si no has realizado los pasos descritos en el artículo anterior y haré mención a los cambios a realizar si ya tienes configurado el acceso remoto. 

Doy por supuesto que solo quieres acceder remotamente a HA. Si deseas acceder a otros servicios lo ideal será utilizar otro método diferente que no es objeto de este artículo.

Vamos a instalar dos complementos de HA. Además, debemos tener instalado un editor de ficheros como File Editor o Studio Code Server. Si no los tienes instalado puedes leer el artículo Instalar Add-ons de HA imprescindibles.

  • Duck DNS es un servicio gratuito de redirección de DNS (sub-dominios de duckdns.org) a una IP de nuestra elección. Esto es, crear un subdominio xxxxxx.duckdns.org que al acceder desde cualquier navegador, redireccione a la IP que se indique; en nuestro caso, a la IP y puerto de nuestro servidor Home Assistant. De tal manera, que desde cualquier dispositivo con Internet, dentro o fuera de nuestra casa, podamos acceder a nuestro servidor e interfaz web de Home Assistant. Resumiendo, con Duck DNS podemos publicar nuestros servidor de HA en internet de forma segura.
  • NGINX es un servidor proxy inverso que se utiliza para mejorar la seguridad y accesibilidad de la interfaz web de Home Assistant. NGINX actúa como intermediario entre los clientes (como navegadores web o aplicaciones móviles) y Home Assistant, manejando las solicitudes y redirigiéndolas al servidor de Home Assistant de manera segura.

IP Fija en Home Assistant

Si no lo has hecho antes, debes configurar una IP fija para tu Home Assistant. Para ello debes seguir los pasos indicados en el Tips Configurar una IP estática.

Redireccionamiento de puertos en el router

Nota: Si has seguido el artículo anterior debes eliminar o editar las redirecciones de los puertos indicados en dicho artículo.

En este artículo explico cómo realizarlo en mi router HGU de movistar. Si dispones de otro modelo de router tendrás que averiguar cómo hacer esta operación (en la web portforward.com existen muchas guías para realizar esta operación en diferentes routers). 

Los puertos que hay que redireccionar son los siguientes:

  • Redireccionar en el router el puerto 80 (TCP) al puerto 80 interno para la IP estática del paso anterior.
  • Redireccionar el puerto 443 (TCP) al puerto 443 interno también para la IP del servidor Home Assistant

Instalación de Duck DNS

Nota: Si ya instalaste este complemento siguiendo los pasos del anterior artículo puedes saltar este paso y seguir con la instalación de NGINX.

Selecciona Ajustes - Complementos - Tienda de complementos y selecciona Duck DNS.

Selecciona Instalar. Después de unos segundos/minutos, el complemento se ha instalado y debes asegurarte que la opción de arranque al iniciar el programa y vigilancia están seleccionadas.

Registro en Duck DNS

Accedemos a DuckDNS.org y crea una cuenta iniciando sesión a través de cualquiera de los servicios de cuentas disponibles (Google, Github, Twitter, Persona, Reddit). En mi caso voy a utilizar mi cuenta de Google así que hago click en Sign in with Google.


Una vez nos hemos registrado, hacemos click en el captcha y escribimos el nombre del subdominio que deseamos registrar y click en add domain.

Automáticamente nos detecta nuestra IP pública y nos indica que se ha creado correctamente el subdominio (siempre y cuando no estuviera ya ocupado). En la parte superior nos aparece un token que debemos copiar porque nos hará falta más adelante.

Si queremos saber si el subdominio redirecciona correctamente a nuestra IP pública y estás utilizando windows, abre una línea de comando ejecutando cmd y escribe lo siguiente:

nslookup subdominio.duckdns.org

sustituyendo subdominio por el nombre del subdominio que has elegido en Duck DNS. Te ha de devolver la IP pública asignada a tu router y que se mostraba en la página web de Duck DNS.

Volvemos a HA y esperamos a que termine de instalar el complemento Duck DNS. Nos vamos a la pestaña de Configuración y modificamos la configuración por defecto:

  • En  Token añadimos nuestro token que hemos obtenido de la web de Duck DNS.
  • En Domain indicamos el nombre del subdominio que hemos creado (incluyendo .duckdns.org).
  • En Let´s Encrypt, en la línea de código accept_tems sustituimos false por true.

Seleccionamos Guardar la configuración y volvemos a la sección de Configuración de Duck DNS para Iniciar nuestro complemento. Vamos a la pestaña de Registro y comprobamos que se ha iniciado correctamente. Este proceso tarda un poco y hay que ir Actualizando la pantalla hasta que nos indique que se ha iniciado correctamente. Cuando dejen de aparecer mensajes y se indique finalmente Done! confirmamos que se ha iniciado correctamente el servicio y se han generado los certificados.


Instalación de NGINX

Selecciona Ajustes - Complementos Tienda de complementos y selecciona NGINX.


Selecciona Instalar. Después de unos segundos/minutos, el complemento se ha instalado y debes asegurarte que la opción de arranque al iniciar el programa y vigilancia están seleccionadas. 

Nos vamos a la pestaña de Configuración y en Domain indicamos el nombre del subdominio que hemos creado (incluyendo .duckdns.org). Además, en Customize, en la línea de código active: false sustituimos ese false por true.

Seleccionamos Guardar, volvemos a la pestaña Información e Iniciar. Vamos a la pestaña Registro y comprobamos que se ha iniciado el complemento. Esto tarda un poco y hay que esperar e ir actualizando el registro hasta que aparezca el mensaje INFO: Running nginx...

A continuación, abrimos Studio Code Server (o File Editor) y editamos el fichero configuration.yaml

Nota: si ya seguiste los pasos del anterior artículo debes eliminar del fichero las siguientes líneas de código:

# Acceso seguro (Duck DNS & Let's Encrypt)
http:
  ssl_certificate: /ssl/fullchain.pem
  ssl_key: /ssl/privkey.pem

Debes añadir el siguiente código:

# Acceso remoto seguro (Duck DNS & NGINX)
http:
  use_x_forwarded_for: true
  trusted_proxies:
    - 172.30.33.0/24
  ip_ban_enabled: true
  login_attempts_threshold: 10

Nota: Con las dos últimas líneas de código hemos añadido un extra de seguridad para que, en caso de que se intente acceder a Home Assistant de forma errónea un número determinado de veces (10 intentos en este caso) el programa bloquee la dirección IP que realiza las peticiones de conexión. 

Configuración de red en HA

En HA hay que indicarle que vamos a poder acceder remotamente por lo que nos vamos a Ajustes - Sistema - Red y en la sección URL de Home Assistant le indicamos el dominio de Duck DNS

Por último, reiniciamos Home Assistant. Seleccionamos en el menú lateral Herramientas para desarrolladores y en la pestaña YAML seleccionamos Verificar configuración

Si todo es correcto seleccionamos Reiniciar - Reiniciar Home Assistant - Reiniciar.

Prueba del acceso remoto

Para probar el servicio podemos acceder desde un navegador a nuestro HA desde internet una vez se haya completado el reinicio de Home Assistant.

http://subdominio.duckdns.org


Let’s Encrypt

Si ya lo tienes instalado del artículo anterior, lo mejor es desinstalar este complemento.

Comprobación del certificado

Nota: si ya lo tienes instalado del artículo anterior, lo mejor es desinstalar esta integración y volver a instalarlo siguiendo estos pasos.

Si queremos comprobar que nuestro certificado está correctamente instalado y que no ha caducado (se renuevan cada 90 días) podemos ir a Ajustes - Dispositivos y servicios - Integraciones - Añadir integración y buscamos Caducidad de certificado

En Host introducimos el nombre del subdominio de Duck DNS (xxxxxx.duckdns.org) y dejamos el puerto 443. Hacemos click en Enviar , seleccionamos un área y Terminar.

Una vez creada seleccionamos la entidad y nos indica Cert Expiry TimeStamp. Podemos cambiar el nombre (yo lo he cambiado por Certificado Let’s Encrypt). Desmarcamos Habilitar entidad y Actualizar.


Indicamos un Área y listo, nos aparecerá una tarjeta indicándonos el tiempo que falta para que el certificado caduque. Si no os aparece automáticamente puedes Editar el panel de control y añadirlo manualmente.

¿Problemas?

Si bien el acceso remoto desde un PC funciona correctamente, no es así con el acceso remoto desde mi app. Si desactivo el Wi-Fi e intento acceder desde la red 4G a través de Duck DNS, la app no consigue conectar con mi Home Assistant.

Investigando el tema he descubierto que algunos proveedores de internet, aunque tu abras algunos puertos en el router, el acceso a dichos puertos está capado. En mi caso, después de realizar la configuración de Duck DNS y NGINX, accediendo a la página https://www.testdevelocidad.es/test-de-puertos/ obtiene nuestra IP y nos indica si los puertos están abiertos o no.

En mi caso, el puerto 443 está cerrado por lo que debo utilizar otro puerto. Para ello, en el router sustituyo abrir el puerto 443 por el puerto 1443. Si el puerto 80 también estuviera cerrado deberíamos abrir, por ejemplo, el puerto 83.

En HA, nos vamos a Ajustes - Complementos y seleccionamos NGINX. Vamos a la pestaña Configuración y en Red nos aparece los siguiente:

Debemos modificar 443 por 1443. Si hubiéramos configurado también el puerto 83, deberemos seleccionar Mostrar puertos deshabilitados e indicar en el campo que se nos abre el puerto 83 (en mi caso no es necesario este paso). Seleccionamos Guardar y reiniciamos el complemento.

Espero a que se reinicia el complemento y vuelvo a comprobar los puertos y ahora ambos me indican que están abiertos.

Probamos el acceso remoto con el PC a la dirección https://[dominio].duckdns.org:1443 y funciona correctamente. En Home Assistant, seleccionamos Ajustes - Sistema - Red y en Url de Home Assistant añadimos el puerto 1443 a la url.

Ahora probamos la app añadiendo también a la dirección del servidor Duck DNS el puerto 1443 y funciona correctamente.


Resumen

Con esta configuración podemos acceder a nuestro HA remotamente desde un acceso a internet, algo que es fundamental para el control de nuestra vivienda.

No hay comentarios:

Publicar un comentario

Nota: solo los miembros de este blog pueden publicar comentarios.