Accéder à Home Assistant à distance

licence

Cet article à pour but de présenter des solutions pour vous permettre d’accéder à votre serveur Home Assistance à distance, depuis votre mobile par exemple ou un PC connecté à une borne Wifi publique ou ailleurs. Il n’est pas détaillé la mise en oeuvre de ces solutions, des articles annexes sont ou seront publiés à cet effet.

Note : un article similaire a été publié par @golfvert, nous fusionnerons les deux articles afin de ne garder qu’une source d’information.

Niveau

  • Débutant / Intermédiaire / Avancé

Prérequis

  • Notion de réseau informatique (DNS, IP, Parefeu, …)

Challenges

Pour vous connecter sur votre serveur Home Assistant (HA) à distance, vous allez être confrontés à plusieurs challenges qui vous amèneront à un choix d’architecture :

  • Connaître l’IP publique de votre Box internet qui dans la majorité des cas peut changer régulièrement (volonté des FAIs - Fournisseur d’Accès à Internet - pour diverses raisons)
  • Modifier les paramètres réseaux de votre Box internet donc savoir accéder et connaître l’interface d’administration
  • Gérer un enregistrement DNS, soit avec un nom de domaine (NDD) propre soit avec un service de DNS dynamique (DynDNS, DuckDNS, etc)
  • Gérer un certifcats SSL pour sécuriser les données votre client (le navigateur ou l’application mobile que vous allez utiliser pour vous connecter) et votre serveur Home Assistant
  • Configurer HA pour un accès externe ET interne en utilisant le même NDD (pour vous simplifier la vie)
  • Et enfin votre appétence à l’informatique et ses technologies

Solutions

Face à ces challenges, différentes solutions sont possibles et toutes ne sont pas égales en terme de sécurité, de mise en oeuvre ou d’accessibilité. Ces solutions sont :

  • un accès direct à Home Assistant;
  • via un proxy inversé (reverse proxy);
  • via le service de Nabu Casa (concepteurs de Home Assistant);
  • via un prestataire tier de services réseaux;
  • via un VPN.

En compléments :

  • Des services externes comme DuckDNS ou Cloudflare
  • Une Box qui permet le ‹ Loopback › ou un service DNS local

Passons en revue ces différentes solutions …

AVANT TOUTE CHOSE : Vous devez considérer les accès vers votre réseau avec des communications chiffrées, donc nous parlerons ici uniquement d’accès via HTTPS et non HTTP !

1. Accès direct

L’accès direct est le plus simple en terme d’architecture mais pas forcément le plus souple et le plus sécurisé.

Principe :

Le principe est tout simplement de rediriger les requêtes de votre client (app mobile/navigateur) qui arrivent sur votre Box (vous avez définit votre nom de domaine - ndd.tld - avec votre IP publique) vers l’ip interne (du style 192.x.x.x:8123) de votre serveur Home Assistant.

Topology-Direct

Avantage(s) :

  • Peu d’élements à configurer : la Box et HA

Inconvénient(s) :

  • Peu sécurisé : HA est directement exposé via un NAT de votre Box et cette dernière n’a pas de fonction de Parefeu trés développée
  • Configuration via des fichiers en Yaml (ce format n’est pas ‹ user friendly › donc destiné déjà à des utilisateurs avertis)
  • Association exclusive d’un port de l’IP publique de votre Box à HA (vous pourriez évidemment utiliser d’autres ports pour d’autres services)

Les tutos associés :

2. Via un proxy inversé

La mise en place d’un proxy inversé complexifie un peu l’architecture mais peut la rendre plus abordable (suivant la solution de proxy inversé utilisée) et surtout la sécuriser un peu mieux que la solution précédente.

Principe :

Le principe ici est de mettre ce proxy inversé entre votre Box et votre serveur Home Assistant. De ce fait c’est votre proxy inversé qui prend en charge la connexion sécurisée avec votre client. Le reste de la communication vers votre serveur Home Assistant peut rester non chiffrée (HTTP).

Avantage(s) :

  • Sécurité accrue avec l’ajout d’un service intermédiaire
  • Possibilité d’exposer d’autres services que HA sur l’extérieur (Grafana, Synology, etc) sur le même port que HA
  • Configuration SSL plus souple suivant le produit de proxy inversé

Inconvénient(s) :

  • Complexification : configuration d’un service intermédiaire et sa compréhension dans l’architecture

Tutos associés :

3. Via Nabu Casa

Nabu Casa est la société créée par les fondateurs Home ASsistant. Bien que HA soit et devrait rester totalement Open Source, elle propose néanmoins des services dont un service d’accès à distance à votre environnement nommé Home Assistant Cloud.

Principe :

Le principe est assez simple puisqu’il fournit un accès depuis leur portail vers votre serveur HA, vous avez uniquement besoin de configurer votre HA avec ce service.

Topology-NabuCasa

Avantage(s) :

  • Rien à configurer sur votre Box (pas de NAT)
  • Pas de nom de domaine à gérer
  • Une simple configuration dans HA
  • Sécurité d’accès à votre réseau (Nabucasa fait le relais)
  • Un essai de 31 jours

Inconvénient(s) :

  • Un abonnement mensuel
  • Accès uniquement à HA (tout comme l’accès direct)

4. Via un opérateur tier de services réseaux (autre que Nabu Casa)

Cette solution fait appel à un opérateur tier pour se connecter à son réseau, tout comme la solution Nabu Casa. Sauf que ce n’est pas natif Home Assistant et qu’il vous faudra ajouter un service supplémentaire dans votre réseau.

Principe :

Ceci est UN schéma possible, tout dépend des services fournit par l’opérateur (VPN, DynDNS, Proxy inverse, certificat SSL, etc). Dans l’exemple ci-après, l’opérateur fournit un service de proxy inverse et un certificat valide dans son domaine.

Avantage(s) :

  • Accès via un tier de confiance qui gère une partie de la sécurité

Inconvénient(s) :

  • Ne vous affranchi pas de gérer un certificat pour la communication entre l’opérateur et votre réseau (sauf si service VPN)
  • Beaucoup de ‹ services › à gérer (complexité)

5. Via un VPN

Cette solution est à but informative, dans le sens où c’est une possibilité, mais la mise en oeuvre technique est bien plus ardue … et si vous êtes intéressé c’est que vous devriez avoir les compétences nécessaires (ou être suffisamment averti) pour mettre en pratique !

Principe :

Le schéma présente de façon très simplifiée le principe. Via un client VPN installé sur votre mobile ou PC distant, vous aurez un accès à votre réseau local directement (moyennant quelques contraintes dépendantes de routage).

Topology-VPN

Nota : Une offre (gratuite à ce jour) de la société ZeroTier permet de créer un VPN sans avoir besoin de toucher à sa Box internet, un plus indéniable d’autant qu’un add-on Home Assistant existe !

Avantage(s) :

  • Accès directe à tout votre réseau (pas seulement Home Assistant et pas seulement en HTTPS)
  • Accès sécurisé

Inconvénient(s) :

  • Etre un utilisateur très avertis :slight_smile:
  • Client VPN à installer sur son mobile ou PC distant

6. Services complémentaires

Des services complémentaires peuvent être utiles pour simplifier et automatiser certaines parties de ces solutions :

  • Service de gestion de votre DNS avec votre IP dynamique (ex DuckDNS, DynDNS, Cloudflare, …)
  • Service DNS local (ex dnsMasq) pour déclarer le même nom internet en local sans faire de loopback

Une question, un problème

Besoin d'aide ? Cliquez ici !

Ressources

Tutos :

Suivi des modifications

  • 10/02/2021 : Modifications mineures suivant des retours de Homies
  • 06/02/2021 : Ajout des solutions évoquées (VPN et ZeroTier) dans l’article de @golfvert
  • 02/02/2021 : Création @Pozzi
9 « J'aime »

Bonsoir,

Tout d’abord merci pour ce topic bien complet.

J’aurais juste besoin d’une petite précision à propos de l’adresse IP publique fournit par nos FAIs :

Jusqu’à maintenant la question ne se posait pas puisque ma Bbox a une adresse IP publique fixe. Même lorsque je la reboote , je retrouve la même adresse IP publique.

Mais en faite, je compte potentiellement changer d’opérateur et donc de box, et j’ai bien peur que l’adresse IP publique de la nouvelle box ne soit plus fixe et change d’un redémarrage à un autre de la box.

Du coup, est-ce que cela est géré par duckdns automatiquement ou faut-il à chaque redémarrage de la box, ré associer la nouvelle adresse IP publique à son Nom De Domaine Duck DNS ? Dans quel cas ça serait vraiment pas pratique…

Cette petite note dans la doc duckdns de Home Assistant a l’air de dire que c’est pris en charge :

Pouvez-vous me le confirmer ?

Tu as liké le bon tutoriel ( → Mise à jour de plusieurs noms de domaine (sans add-on)) si tu ne comptes pas utiliser l’add-on DuckDNS qui permet de configurer l’@IP en cas de changement.

De toute façon, je te conseille de le mettre en place maintenant.

Tu vas ensuite sur ton compte DuckDNS, tu mets une @IP bidon et tu exécutes une automatisation (présente dans le post liké :wink: ) pour vérifier que tout roule.

Cela permet de ne pas se soucier de l’opérateur

Hello Clemalex,

En faite justement j’utilise d’ores et déjà l’addon Duck DNS.

Si j’ai bien compris, 2 solutions s’offrent à moi (reprend moi si je me trompe) :

  • Soit j’utilise l’addon Duck DNS qui me permet de configurer une nouvelle @IP associé à mon Nom De Domaine. Mais cela se fait manuellement depuis le site de Duck DNS. Donc à chaque changement d’@IP publique, cela nécessitera une reconfiguration manuelle sur le site Duck DNS.

  • Soit j’utilise une automatisation (présente dans le post que j’ai liké plus tôt) pour automatiser l’association de mon @IP publique sur le site Duck DNS. Donc à chaque changement d’@IP publique, l’automatisation réassocie la nouvelle @IP à mon Nom De Domaine directement sur le site Duck DNS. Et l’accès HA depuis l’extérieur est toujours possible quelque soit l’@IP publique

L’add-on DuckDNS permet déjà de mettre à jour l’@IP (c’est sa fonction)

Tu n’as donc rien à faire de plus.

Tu fais comme je t’ai dis :

  1. Tu te note l’@IP renseigné dans l’interface de DuckDNS (sur le site web)
  2. Tu la changes et tu valides la mise à jour (sur le site web)
  3. Tu redémarre l’add-on
  4. Tu actualises le site web
  5. L’add-on aura envoyé l’@IP publique de ton équipement. (celle que tu as noté)
1 « J'aime »

Top merci pour la précision !!!

Je viens de faire le test et tu as tout fait raison l’addon fait bien son job : Mettre à jour l’@IP publique utilisé par mon équipement directement sur le site DUCK DNS.

Donc en faite, je peux changer d’opérateur, de box, d’adresse IP publique sans crainte puisque l’addon DUCKDNS fera toujours la mise à jour pour faire pointer l’@IP publique vers mon NDD c’est bien ça ? :sweat_smile:

je dormirais moins bête ce soir merci bcp man

1 « J'aime »

Les plus anciens parmi nous se souviendront de « C’est étudié pour » (Fernand Raynaud "C'est étudié pour" | INA).
Donc, oui.

1 « J'aime »

Bonjour,

une solution différente encore pourrait faciliter l’accès à HA depuis l’extérieur mais elle dépend de l’architecture interne de HA, que je ne connais pas suffisamment pour me prononcer. Je vous expose mon idée, dites-moi si elle vous semble compatible avec HA.

HA fourni plusieurs services à la fois, mais que l’on peut regrouper en 2 catégories je pense :

  1. un serveur de domotique interagissant principalement en réseau IP, mais aussi l’USB, le bluetooth, etc. Il sert à agréger, des informations venues de capteurs, envoyer des commandes à des actionneurs et gérer des automatisations entre eux. On a la plupart du temps besoin d’un matériel local se connectant aux différents composants de notre domotique (USB, bluetooth, PIN, NFC…).
  2. un serveur web fournissant une interface conviviale permettant d’interagir avec le système.

Le service « domotique » (1) peut tourner dans un environnement sans interface graphique (webapp/appli smartphone).
Le service « webapp » (2) peut tourner sur une machine différente du premier (appli smartphone).

Mes questions sont les suivantes :

  • Est-il possible de configurer HA pour ne faire tourner que le service webapp (client graphique) afin de déporter cette charge sur un second serveur ?
  • Si oui, peut-on envisager de faire tourner ce service directement sur un hébergement OVH mutualisé par exemple ?
  • Si non, existe-t-il un client web qui permettrait de faire un « pont » mais uniquement coté client (iframe ou autre technique html/JS qui permettrait d’embarquer la page web ?
  • A-t-on un moyen dans HA d’établir une connexion vers un client (comme la « connexion permanente » dans l’appli smartphone mais coté serveur) ? Cela permettrait de ne pas exposer notre serveur HA, mais de lui demander de se connecter à une liste établie de client et donc finalement d’accéder à HA à distance

Je ne doute pas que ma solution ne soit pas réalisable en l’état actuel des choses mais si la solution vous plaît, il y a peut-être des évolutions à pousser coté HA…

Tu as un article ici qui explique l’architecture de HA : Architecture et concepts Home Assistant
Je connais HA, mais je ne connais pas du tout la sauce interne. Et je pense qu’il y a très peu de monde sur ce forum qui la connaisse :crazy_face:
On va utiliser le jargon de HA, je pense que ton service « domotique » (1) correspond à HA Core et le service « webapp » (2) au frontend. Et on va rajouter l’appli smartphone qui correspond à HA Companion.

A ce jour, sans grosses bidouilles, non.

J’ai envie de te répondre Firefox/Chrome/etc. :crazy_face: mais je ne dois pas comprendre ta question.

Tu peux éventuellement utiliser l’API : REST API | Home Assistant Developer Docs. Mais il faut refaire toute la partie web…
De ce que je comprend, tu veux séparer le frontend, pour éviter d’exposer HA Core. Techniquement, ça doit être possible de les séparer. Mais il n’y a aucun intérêt car il faudra toujours exposer HA Core, pour que le Frontend puisse communiquer avec. Donc il faudra protéger 2 éléments au lieu de 1.

Je ne suis pas sûr de saisir ton approche, mais quoiqu’il est en soit, ce n’est pas sur ce forum que tu vas faire changer/évoluer HA. Pour ça, il faut aller sur le github : Home Assistant · GitHub

Merci pour ta réponse.

En effet, je ne parle pas du navigateur mais bien d’un frontend comme les appli smartphone ou le client « Desktop » mais qui pourrait tourner sur un serveur web directement.

C’est exactement mon but. En effet, il faudra sécuriser les 2 serveurs mais avec la connaissance mutuelle des 2 instances, ça me parait plus simple (cle api ou autre).
Pour expliquer un peu plus ma problématique, je fais tourner mon HA à la maison qui est derrière un modem 4G. Je ne peux donc pas l’attaquer en direct.
La solution NabuCasa fonctionne parfaitement, mais je la trouve trop chère pour le service rendu.
La solution ZeroTier fonctionne mais est un peu pénible car sur Android, je ne peux pas utiliser à la fois ZeroTier et NetGuard/TrackerControl.
Par ailleurs, j’ai un hébergement mutualiser OVH, je pensais donc faire tourner un frontend dessus, directement accessible sur internet et créer l’interaction entre le serveur local et le frontend. Mais je me rends compte en lisant un peu plus que cela parait un peu plus compliqué que je n’aurais cru, et je me demande si la solution ne viendrait pas de faire tourner un HA complet sur un serveur accessible (un RPI chez un copain) et d’avoir lien entre les 2 serveurs HA (Master HA instance with multiple slaves - #7 by jazzyisj - Configuration - Home Assistant Community)

Créer un nouveau sujet. On va éviter de polluer celui-ci.

1 « J'aime »

Bonjour,
Mon HA (VM Proxmox) utilise Nabu Casa et je veux créer une autre instance de HA (pour les invités) sur une autre VM.

Je ne souhaite pas prendre un second abonnement Nabu Casa pour une utilisation épisodique mais utilisant maintenant un routeur Unifi (la Freebox étant en mode bridge), je me demande si l’option de connexion avec la redirection des ports est assez sécurisée (le routeur disposant d’un pare-feu) ?

Bonjour,
Je viens d’installer homme Assistant dans docker et suis venu sur ce forum pour apprendre comment fonctionne HA. Mais je peux partager une solution que j’ai testé et qui fonctionne pour moi avec une connexion a distance pour les utilisateurs de la Freebox Révolution en me servant du vpn intégré en mode routé de la box, je parviens a me connecter .

Salut @lagirardiere,
Tu parles de cette solution : Accès à home assistant depuis l'extérieur avec un vpn gratuit et opensource ?

oui pour moi je me suis servi de openvpn routé fournie dans l’interface de configuration de ma freebox révolution et openVPN for android sur mon pixel 6 .