Avis/conseils sur l'accès à Home Assistant depuis l'extérieur

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 :poop: 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.

  1. 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…)

  2. 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.

  3. 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 :frowning: 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 :wink:
    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.
  1. 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.

  2. 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.

3 « J'aime »

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)

https://github.com/thomseddon/traefik-forward-auth

https://github.com/authelia/authelia

https://www.smarthomebeginner.com/google-oauth-with-traefik-2-docker/

Même si la solution 3.1 n’est pas la plus facile à mettre en place, je la privilégierai par rapport à la sécurité https

Perso j’ai du 3.1 + 3.2

Hello,

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.

C’est un peu barbu mais ça fonctionne :wink:

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 :stuck_out_tongue_winking_eye:

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 :slight_smile:

Là, j’ai essayé de simplifier! L’article de @Pozzi plus didactique que le mien va aider.

Effectivement, pas barbu, carrément velu ! :smiley:
Plus sérieusement c’est sacrément pointu, mais claire qu’avec tant d’expérience réseau fallait bien ça.

Il y a les barbus et ceux pour qui c’est le métier :wink: (oups j’ai les deux :rofl: )

1 « J'aime »

Merci pour ces explications je vais suivre tes conseils

Va voir Accéder à Home Assistant à distance
Les infos sont plus détaillées que ce que j’ai écrit. Et en plus, on est d’accord avec @pozzi !

Bonsoir je ne saisit pas ce passage Routage des ports (NAT)

  • vers le port 80 de votre hôte de Home Assistant. il faut écrire quoi ?
  • vers le port 443 de votre hôte de Home Assistant

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.

Sinon tu peux aussi consulter l’article Accéder à Home Assistant à distance qui t’apportera peut-être d’autres éclaircissements !

Bonjour à tous !

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 :stuck_out_tongue:

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é ?

Rien, on dirait.
Tu dois sous-estimer tes connaissances ! :slight_smile:

Ahah peut être alors :smiley:

Par contre, dans ton explication du 1er post, tu parles de :

  • mise en place d’un firewall
  • d’une boîte supplémentaire avec 2 ports réseaux.

Là tu m’as perdu :stuck_out_tongue: Pourquoi une boîte supplémentaire ? Le firewall ou ça ?

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.

Super Tuto,

Effectivement il faut avoir une solution à la problématique du 3.1

Concernat le point 3.2 « 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.

==>> Je n’utilise pas le NGIX Proxy manager mais l’addon "NGINX HA SSL Proxy " (
addons/nginx_proxy at master · home-assistant/addons · GitHub ) pour faire du https en distant avec le nom de domaine et http en local avec l’IP

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.

2 « J'aime »

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 ?