domingo, 16 de enero de 2022

Home Assistant: Acceso remoto desde internet

Por defecto, podemos acceder a Home Asssitant desde cualquier dispositivo compatible (PC, móvil, tablet, etc.) siempre que estuviera conectado a la misma red local que HA (misma red wifi o misma red LAN). Pero, ¿qué pasa si queremos acceder desde fuera de dicha red, por ejemplo desde nuestro trabajo?. Hay que tener en cuenta que normalmente la IP pública de nuestro router no es fija por lo que no podemos "apuntar" directamente a dicha IP para acceder a nuestro Home Assistant ya que ésta puede cambiar sin previo aviso.

Una solución es contratar IP fija a nuestro proveedor de internet pero eso cuesta dinero. La otra solución es la que os explico en este artículo y es utilizando un servicio denominado DNS (Domain Name System).

Home Assistant ofrece un Add-on muy sencillo para poder acceder a Home Assistant desde cualquier dispositivo con acceso a internet. Además este Add-on incluye configuración de certificados de encriptación SSL para hacer esta conexión segura.


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.

Let’s Encrypt es un Add-on que nos ayudará a renovar el certificado de seguridad generado por Duck DNS en el caso de que no se renueve automáticamente o que nosotros queramos renovarlo de forma manual (hasta 20 días antes de su caducidad).

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.

Nota: Si redireccionamos el puerto de Home Assistant en nuestro router tal y como describo más adelante, podríamos ya acceder desde internet a nuestro servidor conociendo la IP pública. Para ello vamos a Cual es mi ip y obtenemos dicho dato. Lo que pasa es que la IP que normalmente tenemos en casa no es fija sino que va variando (los operadores suelen tener la opción de contratar IP fija pero no suele ser barato) y la conexión no sería segura.

Acceso desde internet fijo y seguro

Para poder instalar y usar Duck DNS y Let’s Encrypt, se debe:

  • Tener una IP interna estática para el servidor Home Assistant (esto lo henos configurado en nuestra instalación de HA)
  • Redireccionar en el router el puerto 8123 (TCP) al puerto 8123 interno para la IP estática del paso anterior. 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).
  • Redireccionar el puerto 443 (TCP) al puerto 8123 interno también para la IP del servidor Home Assistant
  • Regístrarse en duckdns.org mediante cualquiera de los métodos disponibles y crear un subdominio con el nombre que quieras. Tendrás que apuntar el token que genera esta página y por supuesto el subdominio elegido.

Instalación del Add-On

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

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

A continuación vamos a la pestaña de Documentación y seguiremos los pasos que nos indica para configurarlo pero esto lo vemos un poco más adelante.

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. Te ha de devolver la IP pública asignada a tu router y que se mostraba en la página web de Duck DNS.

Configuración de Duck DNS en Home Assistant

Volvemos a Home Assistant y nos vamos a la pestaña de Configuración y modificamos la configuración por defecto:

  • En la línea que indica el token y que por defecto tiene el valor de null añadimos nuestro token.
  • En la línea que indica domain sustituimos null por el nombre del subdominio que hemos creado (incluyendo .duckdns.org).

Click en 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.

Para probar el servicio podemos acceder desde un navegador a nuestro HA desde internet:

http://subdominio.duckdns.org:8123

Este método no es seguro ya que no estamos utilizando cifrado extremo extremo, es decir, la comunicación entre nuestro dispositivo y nuestro servidor de HA no está cifrada y un hacker podría capturar nuestro usuario y password, por ejemplo, para acceder a nuestro Home Assistant.

Nota: Podemos agregar 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 el programa bloquee la dirección IP que realiza las peticiones de conexión. Para ello, en la pestaña de Configuración de Duck DNS añadimos las siguientes líneas:

ip_ban_enabled: true
login-attempts_threshold: n

siendo n el número de intentos erróneos máximos.

Securizando nuestra conexión

Volvemos a la pestaña de Configuración del complemento Duck DNS y realizamos la siguiente acción:

  • En la línea que indica accept_terms sustituimos false por true. para que admita la configuración de Lets Encrypt.
  • Reiniciamos Duck DNS.

A continuación debemos realizar unos cambios en el fichero configuration.yaml. Para ello, vamos a la pestaña de Documentación y copiamos el siguiente código:

http:
  ssl_certificate: /ssl/fullchain.pem
  ssl_key: /ssl/privkey.pem

Con File Editor seleccionamos configuration.yaml y pegamos al final estas líneas de código y Guardar.

Reiniciamos Home Assistant

Vamos a Configuración - Configuración - Controles del Servidor - Verificar Configuración. Si todo está correcto (¡Configuración valida!) hacemos click en Reiniciar. - Aceptar

Probando el servicio

Para probar el servicio debemos ir a nuestro navegador y pegar la url:

https://subdominio_elegido.duckdns.org

Si todo está correcto nos ha de aparecer la pantalla de login de Home Assistant:


Nota: Con la inclusión del certificado debemos acceder en modo seguro (https) a nuestro portal de Home Assistant aunque estemos conectándonos en local a nuestro servidor de HA.

A continuación, en HA, vamos a Ajustes - Sistema - Red y añadimos los campos Url externa (https://subdominio.duckdns.org) y URL interna (https://IP_Local:8123) sustituyendo subdominio por en nombre elegido anteriormente e IP-Local por la IP de nuestro servidor de HA en nuestra red local.


Instalación de Let’s Encrypt

Este complemento se encarga de controlar los certificados de seguridad de Duck DNS. Normalmente los certificados se renuevan automáticamente pero si tenemos algún problema con la renovación hacemos uso de este complemento.

Para instalar Let’s Encrypt debemos ir a Ajustes - Complementos- Tiendas de complementos y buscar por Let’s Encrypt - Instalar.


Una vez instalado activamos la opción para que se Iniciar en el arranque. A continuación nos vamos a la pestaña Configuración y rellenamos los siguientes campos:

  • En email tenemos que indicar la dirección de correo electrónico con la que nos registramos en Duck DNS.
  • En dominio tenemos que añadir nuestro subdominio sin https://, es decir subdominio.duckdns.org

Hacemos click en Guardar, nos vamos a la pestaña Información e Iniciar. Nos vamos a registro y hacemos click varias veces en Actualizar hasta que nos salga el mensaje sending all processes the KILL signal and exiting.

Esta complemento realmente no es necesario que siempre esté ejecutándose ya que solo lo utilizaremos cuando tengamos que renovar nuestro certificado de forma manual. Es más, si reiniciamos HA, aunque hayamos marcado la opción Iniciar al arrancar, normalmente no se inicia.

Esta renovación manual será posible solo cuando falten 20 o menos días a que se caduque el certificado. Como siempre, Reiniciamos nuestro servidor de HA.

Comprobación del certificado

Si queremos comprobar que nuestro certificado está correctamente instalado y que no ha caducado (se renuevan cada 90 días) podemos ir a Configuración - Dispositivos y Servicios - Integraciones - Añadir integración y buscamos Caducidad de certificado. Introducimos el nombre del subdominio de Duck DNS (xxxxxx.duckdns.org) y dejamos el puerto 443. Hacemos click en Enviar 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.


No hay comentarios:

Publicar un comentario

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