Parmi les sujets évoqués sur le site, celui de l’accès à Home Assistant depuis l’extérieur revient assez régulièrement.
Il y a effectivement plein de solutions différentes avec chacune des avantages, des inconvénients, des limitations qui ne sont pas toujours facile d’appréhender quand on a une expérience limitée en réseau.
Je vous propose donc ici une liste (non exhaustive) avec un avis personnel sur les diverses solutions.
Il faut savoir que la plupart d’entre nous (en France) ont accès à Internet via une de box fournie par Orange/SFR/Free/… Ces box sont conçues pour le triple play (Internet, TV, téléphone) et « on branche, ça marche » (le plus souvent, mais, là n’est pas le propos). Par contre, dès que l’on veut faire un truc hors des clous et accéder à sa domotique depuis l’extérieur, c’est le cas, et bien, il faut faire avec les limitations/contraintes des dites box.
Il faut également savoir que Home Assistant en tant qu’appli ne sait pas faire du HTTP ET du HTTPS. C’est une autre limitation à avoir en tête avant de se lancer.
Je vais également faire l’hypothèse que l’on a une installation à base de Home Assistant OS ou Home Assistant Supervised et que les addon sont là pour simplifier les choses.
Ceci étant dit, voici quelques une des options.
Passer par Nabu Casa (https://www.nabucasa.com/)
C’est un service payant proposé par les fondateurs de HA qui permet pour 5$ par mois de soutenir le projet et d’avoir un accès sécurisé à son instance Home Assistant.
Facilité de mise en oeuvre: +++
Sécurité: ++ (on dépend de la sécurité de Nabu Casa…)
Ouvrir l’accès en HTTP à Home Assistant
Sur la box, ouvrir une règle de NAT pour permettre la connexion vers HA et le port 8123 (il y a un tuto pour Livebox sur le site)
Facilité de mise en oeuvre: ++
Sécurité: ---------------- (beaucoup de moins).
C’est certes simple, mais, c’est à éviter absolument. Votre mot de passe HA sera véhiculé en clair sur Internet lors des connexions.
Ouvrir l’accès à Home Assistant en HTTPS
3.1: Passer HA en HTTPS nativement
Typiquement en s’appuyant sur les addon duckdns (pour avoir un nom toto.duckdns.org) et let’s encrypt pour créer et gérer le certificat
Facilité de mise en oeuvre: -
Sécurité: ++
Le principal inconvénient de cette solution est de rendre plus compliqué (!) l’accès en local, quand vous êtes à la maison.
Quand vous êtes à l’extérieur (je suppose que tout va bien, les addon installés, le certificat à jour, duckdns en forme…) accéder à HA se fait avec https://toto.duckdns.org:8123 (port 8123 ouvert sur la box). Quand vous êtes chez vous idéalement https://toto.duckdns.org:8123 devrait marcher. Et c’est là que les ennuis commencent Pour cela il faut que votre box gère le « hair pinning » (cf. https://fr.wikipedia.org/wiki/Hairpinning et là de ce que j’ai pu lire ici et là, la livebox n’a pas l’air de faire (ou alors mal) et les autres, c’est pas clair. Et donc ça ne marche pas.
Il faut donc faire à la place https://192.168.1.xx:8123 et là, catastrophe, le certificat n’est pas valide (il est pour toto.duckdns.org et pas l’adresse IP) et c’est le navigateur qui couine ou pire l’appli android HA qui ne veut pas se connecter.
Il existe des astuces pour que ça marche à base de DNS menteur type PiHole mais en facilité de mise en oeuvre on rajoute quelques -----
Ca nous amène à:
3.2 Garder HA en HTTP et rajouter un proxy
En plus du duckdns et let’s encrypt, il faut rajouter un addon comme NGIX Proxy Manager (https://github.com/hassio-addons/addon-nginx-proxy-manager) qui, pour une raison qui m’échappe à aussi besoin de l’addon mariadb.
On a donc plus d’outils divers et variés et le RPi3 commence à tirer la langue
Facilité de mise en oeuvre: –
Sécurité: ++
Cette solution là permet de garder HA en HTTP, d’avoir l’appli HA utilisable. On a par contre deux URL différentes https://toto.duckdns.com et http://192.168.1.X:8123 suivant l’accès distant ou local.
Utiliser zerotier
Là aussi un addon pour ça!! Voir https://github.com/hassio-addons/addon-zerotier
Techniquement (je simplifie à l’extrême) c’est assez proche de ce que propose Nabu Casa, il n’y a pas besoin d’ouvrir de port en entrée sur la box. On créé un genre de point de rendez-vous dans le cloud (chez Zerotier) et le PC et HA peuvent discuter de manière cryptée et sûre. Inconvenient, il faut avoir un client zerotier sur son PC/Mac quand on veut se connecter chez soi.
Facilité de mise en oeuvre: ++ (la doc de zerotier est assez opaque mais la mise en oeuvre est simple)
Sécurité: ++
Cette solution là permet de garder HA en HTTP, d’avoir l’appli HA utilisable. On a par contre deux URL différentes http://192.168.X.Y:8123 et http://192.168.1.X:8123 suivant l’accès distant ou local.
L’accès extérieur se fait aussi en HTTP mais le cryptage est pris en charge par le client zerotier.
Mettre en place un VPN (et un firewall chez soi)
Je mentionne cette solution car même si elle est compliquée (voire très compliquée) elle est quand même intéressante car on évite de s’appuyer sur la box pour sa sécurité et on protège son réseau. Une solution comme opnsense opensource et gratuite permet de faire plein de chose et notamment de créer un serveur VPN sur lequel on peut se connecter depuis l’extérieur.
On garde HA en HTTP, pas besoin d’addon. Mais, il faut une boîte supplémentaire avec deux ports réseaux.
Facilité de mise en oeuvre: -------------
Sécurité: +++ (si on fait « comme il faut »)
Une nouvelle fois, tout ceci n’est que mon avis. J’espère ne pas avoir écrit de bêtise grossière. J’ai essayé de simplifier sans trop dénaturer.
Si vous ne voulez pas payer (solution Nabu Casa), je pense que le meilleure rapport complexité/fonctionnalité/usage c’est la solution 3.2.
Bonjour, tu peux utiliser Traefik en reverse proxy, avec un module pour utiliser la double authentification de Google ou Authelia, ( Si on veut utiliser du libre, au lieu d’un des G.A.F.A)
Perso, faisant tourner Home Assistant sur une machine virtuelle Qemu sur un serveur personnel, j’ai mis en place un serveur proxy nginx sur la machine hôte qui redirige vers HomeAssistant.
Comme ça j’accède de l’extérieur en HTTPS en utilisant le proxy qui est ouvert (NAT) et en local je passe en http.
Même si je ne suis pas barbu, c’est (à peu près) ce que j’ai. En fait, j’ai « pire ».
Comme je dois faire du HTTPS sur HA (j’ai inclus mon visiophone en webrtc et ça oblige à faire du HTTPS), j’ai un proxy NGINX sur un container LXC qui fait de HTTPS > HTTP pour certains services HTTP > HTTPS pour d’autres. Le tout avec un DNS menteur à base de PiHole
Et c’est derrière un firewall Opnsense, ou j’ai un VPN avec TOTP pour me connecter.
Mais, bon, j’ai 30+ années de réseaux derrière moi
Là, j’ai essayé de simplifier! L’article de @Pozzi plus didactique que le mien va aider.
Bonsoir @Ricou, tu peux inclures une citations de l’article dans ta réponse ce qui permettra de préciser le contexte.
Pour ce faire, quand que crée une réponse tu peux remonter dans l’article, sélectionner le texte auquel tu veux faire référence et utiliser l’option « Citer » qui apparait juste à gauche de la sélection.
Heureux de tomber sur ce fil de discussion ainsi que sur le tuto de Pozzi.
Malhreuseument, il m’inquiète plus qu’il ne me rassure
J’ai chez moi (entre autre) une box Orange, un NAS QNAP et Home Assistant sur un Raspberry PI3.
Par mesure de sécurité, j’ai désactivé l’accès à mon NAS QNAP via le dns de QNAP et désactiver les règles NAT qui permettaient d’accéder à mon NAS. Dommage car c’était tout de meme sympa.
Depuis, j’ai mis en place Home Assistant sur le RPi et j’ai découvert le VPN.
Alors voici ce que j’ai fais :
Installation de DuckDNS pour la gestion d’un DNS avec certificat lets encrypt.
Installation de l’add-on WireGuard sur RPi pour gérer le VPN
Autorisation que des mes smartphone pour l’accès sur le VPN avec l’application WireGuard.
ajout d’une seule regle NAT pour la redirection du port VPN sur ma livebox.
Résultat : j’ai accès à Home Assistant et à mon NAS quand j’utilise le VPN de l’extérieur.
Ce qui m’inquiète, c’est que ca ne m’a pas paru complexe à faire contrairement à ce que vous prétendez. Donc qu’ai-je oublié ?
Ma confiance dans les box des opérateurs étant très proche de zéro, l’idée est de ne rien leur faire faire, ou le moins possible, et de gérer la sécurité sur un boitier dédié connecté sur la box. Tout le reste de mon réseau est derrière le firewall (opnsense dans mon cas).
Ca donne une solution comme ça
Box <-> Firewall <-> LAN (filaire et wifi)
Et le VPN est donc sur le firewall et pas sur HA. Pour moi, HA ne devrait faire que la partie domotique et le reste c’est sur une autre boîte, ou une autre VM si tu es virtualisé.
Après, c’est un choix perso. En fonction de ce que l’on veut faire et sait faire.
Ah ok ! Je comprend mieux.
Opnsense tourne sur un RPi ?
J’imagine qu’un bon routeur du commerce pourrait également faire l’affaire ? (je ne m’y connais pas du tout en router ^^)
Il faut une boîte avec deux ports Ethernet. Donc, un Rpi non (sauf à utiliser un adaptateur USB, ce qui ne me tente pas…).
Sur aliexpress par exemple, chercher « qotom » sinon, un boitier firewall tout fait comme ubiquiti.
Après, un routeur netgear (par exemple) peut aussi faire l’affaire. Mais, un routeur ce n’est pas un vrai firewall.
L’addon que tu utilises semble bien moins intéressant que NPM (Nginx Proxy Manager). Ce dernier évite d’utiliser la config yaml et prend en charge directement let’s encrypt.
Je ne connaissais pas NPM. J’ai l’impression qu’il ne gère pas de VPN. WireGuard met en place un VPN et ouvre ainsi un canal vers les autres interface du réseau (et dont home assistant) qui me paraît plus sécurisé. Non ?