Skip to main content
ESPBoards

Acceder a Home Assistant desde Internet con Cloudflare Tunnel

En caso de que no tengas acceso a la configuración de tu router, accede a tu Home Assistant desde Internet sin Reenvío de Puertos, utilizando el servicio en la nube Cloudflare Tunnel.


En la publicación anterior, configuramos Home Assistant e integramos nuestra primera placa ESP32 a través de ESPHome. Ahora tenemos el centro de nuestra casa inteligente, al cual conectaremos todos nuestros elementos de hogar inteligente, ya que Home Assistant proporciona integración fácil para muchos dispositivos. Sin embargo, solo podemos conectarnos a nuestro centro de Home Assistant desde la LAN, lo que significa que solo podemos revisar las estadísticas y controlar nuestra casa inteligente cuando estamos en casa y conectados a la red doméstica.

Para muchas aplicaciones, no tener acceso a Internet público para tu hogar inteligente, elimina el propósito de tenerlo. Por ejemplo, si tienes una cámara y dejas algunas mascotas solas en casa, podrías querer verificarla cuando estás fuera. Si tienes un control de temperatura inteligente en casa, podrías querer calentar tu casa antes de regresar de vacaciones. O incluso si estás en casa, pero tu teléfono no está conectado a la WiFi, sino a la red móvil 4G, aún querrás acceder a tu hogar inteligente. ¿Ves a dónde vamos? Necesitamos acceder a Home Assistant de forma remota desde Internet.

En este tutorial, seguiremos varios pasos para asegurar nuestro túnel Cloudflare:

¿Cómo Acceder a Home Assistant de Forma Remota? #

Cuando se trata de acceder remotamente a Home Assistant desde Internet, tenemos varias opciones. Después de todo, solo necesitamos acceder a la interfaz web de Home Assistant, que podríamos ver como un servidor HTTP simple. Solo necesitamos ser un poco creativos aquí, y pronto se nos ocurren ideas sobre VPN, túneles proxy y más. Todas estas ideas son buenas, pero, como siempre, tienen sus ventajas y desventajas. Las opciones más populares serían:

  1. Home Assistant Cloud
  2. Reenvío de Puertos
  3. VPN
  4. Tunneling

Vamos a echar un vistazo más de cerca a cada una de las opciones.

1. Home Assistant Cloud #

El equipo de Home Assistant proporciona los servicios de Home Assistant Cloud, donde conectas tu instancia de Home Assistant a la nube y obtienes acceso público a Internet a través de la nube. Puedes obtener más información en Nabu Casa, el proveedor oficial de Home Assistant.

Aunque esta es seguramente la opción más fácil de configurar, no es necesariamente la mejor. Al utilizar la interfaz de usuario remota, una función de Home Assistant Cloud, puedes acceder fácilmente a tu Home Assistant de forma remota. Puedes configurarlo a través de la interfaz web de Home Assistant con unos pocos clics.

Sin embargo, tiene un costo. Primero, en términos de dinero, la suscripción a la nube cuesta 65 USD al año, o 75 EUR, si estás en Europa. En segundo lugar, conectarse a la nube significa que dependemos del servicio de terceros. Todas las solicitudes pasarán por un tercero, lo que podría significar menos privacidad. Además, si el servicio de terceros se vuelve inaccesible, perderíamos nuestro acceso remoto y no tendríamos control en términos de restablecerlo.

Ventajas

  • Configuración más fácil
  • Integración nativa con la nube

Desventajas

  • Servicio de pago
  • Dependencia de terceros

2. Reenvío de Puertos #

Dado que ya estamos ejecutando nuestra propia infraestructura (en nuestro caso en Raspberry Pi), no queremos depender de terceros, porque podemos configurar y controlar el acceso público nosotros mismos.

El enfoque más común, sin depender de ningún tercero, sería el Reenvío de Puertos. Necesitarías configurar el reenvío de puertos en tu router, para permitir el acceso público a Internet en el puerto 8123 y reenviar el tráfico a nuestra instancia de Home Assistant en Raspberry Pi.

La configuración difiere en cada router de diferentes fabricantes, pero debería ser bastante fácil, ya que es una operación común. Consulta el manual del fabricante de tu router para obtener instrucciones detalladas.

Ventajas

  • Configuración fácil
  • Autohospedado

Desventajas

  • No muy seguro
  • Necesita acceso a la configuración del router

3. VPN #

Hay varios problemas con el enfoque anterior: 1. no es muy seguro, ya que permitimos el tráfico para todos en Internet, 2. necesitamos acceso a la configuración del router, lo cual no todos los ISP (Proveedores de Servicios de Internet) permiten. Si bien para la configuración de la VPN, aún necesitarás acceder a la configuración del router y abrir algunos puertos, podemos hacer que el acceso sea más seguro, utilizando la VPN.

La configuración será un poco más difícil, ya que aún necesitas hacer un poco de reenvío de puertos (Para la VPN esta vez, no para la instancia de Home Assistant), pero no debería ser muy difícil con soluciones listas para usar, como OpenVPN o Wireguard.

Ventajas

  • Seguro
  • Autohospedado

Desventajas

  • Más difícil de configurar
  • Necesita acceso a la configuración del router

4. Tunneling #

A veces, el proveedor de servicios de Internet no permite que los usuarios finales modifiquen la configuración del router en absoluto, incluido el reenvío de puertos. Además, no queremos depender del servicio de terceros y pagar por él. ¿Qué hacer entonces? No está todo perdido, todavía tenemos otra opción: los servicios de tunneling.

El software de tunneling te permite dirigir rápida y de manera segura el tráfico a tus servicios que se ejecutan localmente sin reenviar los puertos. Funciona instalando el conector de túnel en tu red doméstica (en nuestro caso, en Raspberry Pi, ejecutando Home Assistant) y conectándolo al proveedor de servicios de túnel en la nube. El tráfico desde Internet será dirigido, o "tunneled", al conector de túnel, que a su vez accederá al servicio que se ejecuta en tu red local.

Ventajas

  • Seguro, si se configura correctamente
  • No necesita acceso a la configuración del router

Desventajas

  • Más difícil de configurar
  • Servicio de terceros

¿Entonces, qué Opción Elegir? #

Hemos revisado varias opciones para el acceso a Internet de nuestra instancia de Home Assistant, y como puedes ver, no hay una mejor opción. Todas las opciones tienen sus propias ventajas y desventajas. Dependiendo de si quieres dedicar más tiempo a configurar tu infraestructura o prefieres pagar un poco de dinero y tener una instalación fácil, si tienes acceso a la configuración de tu router y más, tendrás que elegir la opción que mejor se adapte a ti.

En cuanto a nuestro caso específico, donde estamos ejecutando Home Assistant en Raspberry Pi, estamos dispuestos a dedicar algo de tiempo a configurar nuestra infraestructura, no queremos depender de terceros, ni pagar por sus servicios, pero aún así queremos una conexión segura desde Internet a nuestra instancia de Home Assistant. La elección lógica sería una VPN: segura, bastante fácil de configurar y podemos gestionar la infraestructura nosotros mismos.

Sin embargo, tenemos un problema... Nuestro ISP no permite modificar la configuración del router, incluyendo el reenvío de puertos. Además, el router está bloqueado por el proveedor y no se puede reemplazar fácilmente. Oh, odio a los ISP monopolistas... Pero así es con los monopolios, tienes que lidiar con ello. Por lo tanto, la opción que nos queda es Tunneling.

Servicios en la Nube para Tunneling de Tráfico #

Existen muchos servicios en la nube que ofrecen tunneling de tráfico. Cada uno tiene sus pros y contras. No vamos a entrar en muchos detalles sobre las opciones. Puedes elegir la que más te convenga, ya que la mayoría de los proveedores de servicios en la nube modernos ofrecen las mismas características que nuestra elección - Cloudflare.

Una de las principales razones por las que elegimos Cloudflare es la seguridad avanzada y la razón de que ofrecen un plan gratuito para todo lo que necesitamos. Añade esto a la fácil configuración y tenemos un ganador.

Ten en cuenta que, aunque Cloudflare tiene planes gratuitos, aún necesitarás agregar tu tarjeta de crédito/débito a la cuenta de Cloudflare, para poder usar sus servicios en la nube gratuitos. ¡No se te cobrará!

Configuración del Túnel Cloudflare #

Antes de comenzar, necesitarás crear una cuenta de Cloudflare y tener un nombre de dominio público. También asumimos que tienes la misma infraestructura que construimos en la publicación anterior.

Requisitos Previos #

  • Nombre de Dominio
  • Cuenta de Cloudflare

Pasos #

  1. Agregar tu Dominio a Cloudflare

Si tu nombre de dominio no está registrado en Cloudflare, primero debes agregarlo a Cloudflare, para poder usarlo más tarde para el acceso público al túnel.

Inicia sesión en tu cuenta de Cloudflare y ve a "Websites" -> "Add a site". Ingresa tu nombre de dominio y haz clic en "Continuar", y selecciona el plan gratuito.

  1. Configurar los Servidores de Nombres del Dominio

Si tu dominio no está alojado en Cloudflare, necesitarás configurar los servidores de nombres (NS) de tu dominio a los servidores de Cloudflare. Necesitarás ir a tu proveedor de nombre de dominio y reemplazar los servidores de nombres actuales por los de Cloudflare. Sigue las instrucciones proporcionadas por Cloudflare y consulta el manual de tu proveedor de dominio si necesitas ayuda.

  1. Verificar los Servidores de Nombres

Después de haber cambiado los servidores de nombres de tu dominio, haz clic en "Check nameservers" en el panel de control de Cloudflare. Si la configuración es correcta, verás un mensaje de confirmación.

Ten en cuenta que los registradores pueden tardar 24 horas en procesar las actualizaciones de los servidores de nombres. Después de que las actualizaciones hayan sido confirmadas, recibirás un correo electrónico de Cloudflare.

Haz clic en el botón "Back" junto a tu nombre de dominio en la esquina superior izquierda. En "Websites" deberías ver tu nombre de dominio marcado como "Active". Tu dominio está listo para ser utilizado en los servicios de Cloudflare.

  1. Crear un nuevo Túnel

Para crear un nuevo túnel, en el menú del lado izquierdo, selecciona "Access" -> "Tunnels". Haz clic en "Create new tunnel", ingresa el nombre del túnel que elijas y sigue adelante.

  1. Configurar el Conector del Túnel Cloudflare

Dado que esto es una continuación de la publicación anterior, donde configuramos Home Assistant para que se ejecute dentro del contenedor Docker, asumimos que tienes Docker listo.

En el panel de control de Cloudflare, en la sección "Choose your environment" selecciona "Docker". Se te proporcionará el comando "docker run". Lo usaremos en un momento.

2. Abre la Terminal en tu computadora y haz una conexión SSH a tu Raspberry Pi. 3. Crea un nuevo directorio y cámbiate a él escribiendo: ```sh cd ~/ mkdir cloudflare && cd cloudflare ``` 4. Copia el comando `docker run` de Cloudflare y ejecútalo en tu Raspberry Pi. ```sh docker run --name cloudflare cloudflare/cloudflared:latest tunnel --no-autoupdate run --token```

Después de ejecutar el comando "docker run", el contenedor Docker se iniciará. Debería mostrar algunos registros en la consola. Busca la línea “INF ICMP proxy will use x.x.x.x as a source for IPv4", donde “x.x.x.x” es la dirección IP local que el Conector del Túnel Cloudflare está utilizando. En nuestro caso, es “172.17.0.2”. Toma nota de esta dirección IP, la necesitaremos más adelante.

  1. Reiniciar el Contenedor del Túnel

Ahora que hemos tomado nota de la dirección IP, ejecutaremos el contenedor Docker con el Conector en modo desacoplado.

  1. Presiona "ctrl+c" para salir del Contenedor Docker del Conector.
  2. Verifica el nombre del Contenedor del Conector del Túnel Cloudflare. Escribe el siguiente comando y busca el "Nombre" del Contenedor del Conector.
docker ps -a
  1. En nuestro caso, el nombre del Contenedor del Conector del Túnel Cloudflare es "cloudflare".
docker start cloudflare
  1. Verificar el Estado del Conector Después de ejecutar con éxito el Conector del Túnel Cloudflare dentro del Contenedor Docker, deberías ver un nuevo Conector aparecer bajo “Connectors” con el estado "Connected". Haz clic en "Next".
  1. Agregar un Nombre de Host Público para el Conector

A continuación, agregaremos el nombre de host público para nuestro Conector. Selecciona tu Dominio de la lista. Si lo deseas, puedes agregar una Ruta o Subdominio para tu dominio. En nuestro caso, ingresamos "hass" como subdominio, porque queremos acceder al panel de control de Home Assistant yendo a "hass.example.com".

Bajo "Service", selecciona Tipo como “HTTP” e ingresa la URL que usas para acceder al Panel de Control de Home Assistant desde tu computadora.

Guarda el túnel. ¡La configuración del Conector del Túnel Cloudflare ha terminado!

  1. Probar el Túnel Cloudflare

Para probar tu nuevo túnel, toma un dispositivo que esté en otra red, por ejemplo, tu teléfono con conexión de datos móviles (4G/5G) y abre la dirección que ingresaste al configurar el nombre de host público, en nuestro caso “hass.example.com”.

“400: Bad Request”, no suena bien, ¿verdad? Bueno, sí y no… La respuesta que vemos (“400: Bad Request”) está viniendo de nuestra instancia de Home Assistant. ¡Por lo tanto, el túnel de Cloudflare está funcionando correctamente y nos está redirigiendo al Home Assistant que se ejecuta en nuestro Raspberry Pi!

  1. Permitir Conexiones del Túnel Cloudflare a Home Assistant

Estamos cerca, pero Home Assistant está bloqueando solicitudes que vienen de proxies/proxies inversos por defecto. Por lo tanto, necesitamos decirle a Home Assistant que permita solicitudes que vienen de nuestro Túnel Cloudflare. Esa es la razón por la que tomamos nota de la dirección IP local del Conector del Túnel Cloudflare antes (paso 6).

  1. Editar la Configuración de Home Assistant

Abramos la configuración de Home Assistant en nuestro Raspberry Pi. Con la conexión SSH a Raspberry Pi, escribe

cd ~/homeassistant

Y edita el archivo "configuration.yaml", agregando lo siguiente al principio del archivo:

http:
use_x_forwarded_for: true
trusted_proxies:
- 172.17.0.0/24

Asegúrate de reemplazar la dirección IP del Conector del Túnel Cloudflare que anotaste anteriormente. Si el último número en la dirección IP no es 0, cámbialo a 0. Por ejemplo, nuestra IP era "172.17.0.2", por lo tanto, ingresamos "172.17.0.0/24".

  1. Reiniciar Home Assistant

Para que los cambios se apliquen, necesitamos reiniciar Home Assistant. Podemos hacerlo a través de la interfaz web de Home Assistant. Abre la interfaz de Home Assistant en el navegador y ve a "Configuración" -> "Sistema".

Selecciona el ícono de encendido en la esquina superior derecha y haz clic en Reiniciar.

Tu instancia de Home Assistant se reiniciará y debería estar disponible nuevamente en unos minutos.

  1. Probar el Túnel Nuevamente

Una vez más, toma tu teléfono u otro dispositivo que esté conectado a una red diferente a la de tu hogar, abre el navegador y actualiza la página (en nuestro caso hass.example.com).

Puedes ahora acceder a Home Assistant desde fuera de nuestra red LAN a través del túnel de Cloudflare. ¡Felicidades! Pero aún no hemos terminado, necesitamos asegurar nuestro túnel.

Asegurando el túnel de Cloudflare (¡Importante!) #

Ya que estaremos accediendo a nuestra instancia de Home Assistant desde Internet, queremos asegurarnos de que el tráfico esté encriptado y esté usando el protocolo HTTPS. Lo bueno es que Cloudflare gestiona los certificados SSL para nuestros dominios automáticamente, por lo tanto, no tenemos que preocuparnos por HTTPS, ya que debería configurarse automáticamente, pero aún necesitamos aumentar la seguridad.

Además, hemos hecho que nuestra instancia del túnel de Cloudflare sea públicamente accesible. Con la gran cantidad de bots maliciosos y escáneres que funcionan en Internet, personas con malas intenciones podrían encontrar la dirección de tu sitio web. Aunque la interfaz web de Home Assistant esté protegida con una contraseña, los "malos" no deberían siquiera llegar a la instancia de Home Assistant.

Asegurando el Dominio #

Como se mencionó antes, debido a que hemos apuntado los servidores de nombres del dominio a Cloudflare, ellos gestionan los certificados SSL por nosotros por defecto, por lo tanto, ya deberías poder acceder a tu instancia de Home Assistant a través del túnel de Cloudflare con el protocolo HTTPS.

En el panel de control de Cloudflare, ve a "Websites" y selecciona tu dominio. Ve a "SSL/TLS" -> "Overview" y configura el "Encryption mode" a "Full (strict)", para que el tráfico esté completamente encriptado.

Nuestro acceso a Home Assistant está funcionando perfectamente con HTTPS ahora, pero también funciona con HTTP y queremos evitar eso. En el Panel de Control de Cloudflare, ve a "SSL/TLS" -> "Edge Certificates".

Lo primero que notarás es la lista de certificados SSL generados por Cloudflare, que incluso se encarga de crear el certificado de respaldo para nosotros. Además, puedes ver la fecha de expiración del certificado, pero no necesitas preocuparte por eso, porque Cloudflare los renovará automáticamente cuando sea el momento.

Desplázate un poco hacia abajo y habilita "Always Use HTTPS", esto asegurará que todas las solicitudes HTTP a nuestro Home Assistant se redirijan a HTTPS.

También asegúrate de que "Opportunistic Encryption", "TLS 1.3" y "Automatic HTTPS Rewrites" estén habilitados. Deberían estar habilitados por defecto, pero por favor verifica para asegurarte.

Asegurando el Túnel #

Actualmente, cualquier persona en Internet que conozca la dirección de tu sitio web puede acceder a tu instancia de Home Assistant. Con los escáneres y bots funcionando en Internet, alguien probablemente descubrirá la dirección tarde o temprano. Cuando eso suceda, no queremos que realmente accedan a la instancia de Home Assistant y bloquearlos antes de que siquiera lleguen a la página de inicio de sesión de Home Assistant.

Estamos de suerte porque Cloudfront proporciona las herramientas adecuadas que necesitamos para lograr esto. Vamos a implementar otra autenticación con SSO (Single-sign-on) antes de que Cloudfront intente acceder al túnel.

  1. Agregar Nuevo Método de Inicio de Sesión

En Cloudfront, bajo "Zero Trust", ve a "Settings" -> "Authentication" y bajo "Login methods", haz clic en "Add new".

Puedes elegir cualquier proveedor de identidad de la lista que prefieras, o incluso puedes agregar varios. En este tutorial, vamos a usar GitHub. Haz clic en "GitHub" y sigue las instrucciones proporcionadas. Necesitarás iniciar sesión en tu cuenta de GitHub y crear una nueva aplicación OAuth.

  1. Crear Aplicación y Políticas de Seguridad de Cloudflare Zero Trust

Cuando termines de configurar los proveedores de identidad, ve a "Access" -> "Applications" y agrega una nueva aplicación. Selecciona "Self-hosted" y haz clic en "Next". Ingresa el nombre de la aplicación de tu elección y proporciona el dominio de la aplicación que usas para acceder a Home Assistant a través del túnel de Cloudflare, en nuestro caso hass.example.com. Desplázate hacia abajo y bajo “Identity providers”, deselecciona “Accept all available identity providers” y selecciona solo “GitHub”.

A continuación, vamos a incluir la política de seguridad para nuestra aplicación. Ingresa el nombre de la política de tu elección y selecciona la Acción a "Allow". Más abajo, en la sección "Configure rules", podrías permitir o bloquear ciertas IPs, permitir tráfico solo de países específicos, etc. Eso podría ser muy útil, ya que deberías hacer la lista de quién puede acceder a tu instancia de Home Assistant lo más corta posible.

Como queremos poder acceder a nuestro hogar inteligente mientras viajamos, no podemos restringir la ubicación a nuestro hogar. Además, dado que nuestro operador de red 4G no proporciona una IP estática, cuando accedemos desde móvil, la IP siempre es diferente, por lo tanto, no podemos permitir la IP. Sin embargo, lo que podemos y debemos hacer es permitir solo a nosotros mismos con la autenticación de GitHub.

Bajo "Configure rules", crea una nueva regla de "Allow" - Selector "Login Methods" => solo "GitHub". Crea una nueva regla de "Require", Selector "Emails" => la dirección de correo electrónico de tu cuenta de GitHub.

  1. Probar las Políticas de Seguridad

Para probar nuestra nueva configuración de seguridad, simplemente abre tu Home Assistant en el navegador web (en nuestro caso hass.example.com). En lugar de la Página de Inicio de Sesión o el Panel de Control de Home Assistant que solías ver antes, ahora deberías ver la página de Acceso Zero Trust de Cloudflare con GitHub como opción de inicio de sesión.

Inicia sesión con tu cuenta de GitHub con el correo electrónico que proporcionaste en la política de seguridad. Ahora deberías ver el panel de Home Assistant como solías verlo antes de la configuración de seguridad.

Vale, así que hemos probado el escenario feliz para nosotros mismos. Pero aún no sabemos si otras personas no pueden acceder a nuestro Home Assistant después de iniciar sesión simplemente con GitHub. Para probar esto, abre una ventana privada en tu navegador. Ingresa la URL de tu Home Assistant y verás la página de acceso de Cloudflare nuevamente. Selecciona "GitHub" e inicia sesión con una cuenta de GitHub diferente. En caso de que no tengas una, tendrás que crearla para el propósito de esta prueba. Deberías obtener un error esta vez porque solo permitimos el acceso con una dirección de correo electrónico.

Monitoreo #

Aunque hayamos implementado políticas de seguridad, es importante ver si las políticas están funcionando en el mundo real. Cloudflare no nos decepciona nuevamente: proporciona un registro y análisis extensivo para la seguridad del sitio web. Aunque Cloudflare realmente proporciona aún más herramientas para el registro y análisis, vamos a ver dos de las más importantes para nuestro caso de la aplicación.

  1. Registros de Acceso al Dominio

En el Panel de Control de Cloudflare, ve a "Analytics & Logs" -> "Account Analytics". Aquí, puedes ver cuántas veces se visitó tu dominio, los países desde los que se accedió y más.

Como puedes ver, ha habido múltiples solicitudes para acceder a nuestro dominio desde diferentes países en los últimos 7 días. ¡Bueno, eso no es bueno! Podrían ser solo escáneres que funcionan en Internet, o bots, pero a largo plazo, parece que podríamos ser susceptibles a un ataque. Pero no hay razón para preocuparse todavía. Veamos otro registro en Cloudflare.

  1. Registros de Acceso Zero Trust

Ve a "Zero Trust" y selecciona "Logs" -> "Access". Aquí verás las solicitudes de autenticación a la aplicación de acceso de Cloudflare que creamos anteriormente (donde tenemos que iniciar sesión con GitHub).

Conclusión #

Finalmente, hemos configurado el Túnel Cloudflare para permitirnos "tunelizar" nuestro tráfico desde Internet a nuestra instancia de Home Assistant sin tocar la configuración de nuestro router, ya que no tenemos acceso a él. Hemos aprendido a configurar el Conector del Túnel Cloudflare y probado la conexión desde la red 4G.

Dado que hemos abierto nuestra interfaz web de Home Assistant a Internet, cualquier persona que conozca la URL podría acceder a ella. Para evitar esto, hemos implementado algunas políticas de seguridad para minimizar la lista de dispositivos que pueden acceder a la instancia de Home Assistant.

Además, el tráfico ahora fluye a través de Internet, en lugar de solo la LAN, y podría ser interceptado fácilmente. Para contrarrestar esto, aprovechamos la gestión automática de certificados SSL de Cloudflare y nos aseguramos de que todo el tráfico esté encriptado.

¡Gran trabajo asegurando tu Túnel Cloudflare y protegiendo tu Home Assistant de accesos no deseados! Si necesitas más ayuda o tienes otros proyectos en mente, no dudes en decírmelo. ¡Disfruta de tu sistema de hogar inteligente conectado y seguro!