Accès Distant HTTPS (DuckDNS) + Local HTTP (NGINX) facile (avec les infos manquantes pour les freebox entre autres)
J’ouvre ce sujet pour ceux qui comme moi sont restés bloqués sur des tutos incomplets ou trop complexes, alors que la solution est finalement plutôt facile…
Pour ma part j’avais déjà configuré l’accès distant DuckDNS donc je reprends l’explication pour les 2 cas de figure, pour ceux qui avaient déjà l’accès HTTPS et pour ceux qui partent de zéro.
Prérequis
Un éditeur de fichier de configuration, par ex. le module File Editor
Objectifs
- Une solution gratuite
- Accès distant en sécurisé (HTTPS) pour piloter votre Home Assistant depuis l’extérieur
- MAIS conserver l’accès classique non sécurisé (HTTP) pour piloter votre Home Assistant depuis chez vous (surtout si le serveur distant ou si internet ne fonctionne plus il vaut mieux garder ça fonctionnel)
Pourquoi/pour qui ce complément aux tutos existants?
Il manque quelques explications claires sur
- comment configurer l’accès distant (DuckDNS) avec en plus l’accès simple HTTP ?
- comment gérer les redirections de port avec une freebox qui par exemple exige un port supérieur à 16384 ?
- comment passer de sa config (réalisée avec l’un des nombreux tutos existants, par exemple chez les alexiens) de DuckDNS seul (donc en tuant son accès local en http, plus d’accès HA en cas de panne internet) vers DuckDNS+NGINX ?
Principe
(j’ai refais le schéma incomplet que l’on trouve dans un autre tuto un peu trop compliqué à mon avis, inutile d’installer MariaDB en particulier)
on veut changer le truc par défaut
en ça (approximativement):
on le voit sur le schéma il suffit de 3 trucs : un serveur DNS (duckDNS.org ici) + NGINX qui gère la réception https + DUCKdns (module HA) pour gérer les certificats httsp [*]
Tuto sur la base d'un très bon autre tuto
Je reprends ici les étapes du très bon (mais incomplet) tuto en vidéo de Raynox
https://www.youtube.com/watch?v=dNfSp9BcywE
Et voici les étapes (avec mes ajouts & modifications) étape par étape:
- Adresse externe de votre box: https://www.whatsmyip.org/ qui vous donne donc
mon_NumeroIP_externe
(en IPv4 pour ma part) - Redirections de ports (comme sur mon schéma) on veut rediriger un port vers le 443 pour NGINX, si vous avez une freebox on choisit au pif un port TCP n°YYYYY supérieur à 16384 (en se connectant sur l’interface mafreebox.freebox.fr) que l’on redirige (début et fin = YYYYY) vers 443.
- OPTION si vous avez déjà configuré DuckDNS et déjà fait une redirection de port n°ZZZZZZ vers 8123 pour DuckDNS avant, vous la supprimerez à la fin (donc pas maintenant) quand tout fonctionne (sinon plus de connexion à HA… il suffirait alors de la remettre…). Mais du coup, utilisez un port n°YYYYY différent de n°ZZZZZ.
- Créer son accès DNS avec DuckDNS (gratuit): connectez-vous puis créez votre adresse DNS au nom que vous voulez (par ex
HeleneAstuce.duckdns.org
) en précisant bien l’adresse IP de votre box (mon_NumeroIP_externe
). - Dans
Home Assistant > Paramètre > Modules Complémentaires
installer le moduleDuckDNS
avec dans l’onglet configuration (avant de démarrer le module): (a) copier/coller le nom de votre domaine sans le https (HeleneAstuce.duckdns.org
) et (b) copier/coller le token (qui est affiché quand vous vous connectez) et éventuellement (c) ajouter la lignealgo: secp384r1
aprèsaccept_terms: true
(sans ça pour ma part ça ne marche pas) - Dans
Home Assistant > Paramètre > Modules Complémentaires
installer le moduleNGINX Home Assistant SSL Proxy
(dans le catalogue) avec dans l’onglet configuration (avant de démarrer le module): (a) copier/coller le nom de votre domaine sans le https (HeleneAstuce.duckdns.org
) et … C’est TOUT - Dans
File Editor
(ou tout autre editeur) ouvrirconfiguration.yaml
et ajoutez (et enregistrer)
http:
# ssl_certificate: /ssl/fullchain.pem
# ssl_key: /ssl/privkey.pem
use_x_forwarded_for: true
trusted_proxies:
- 172.30.33.0/24
(ssl key et certif sont à commenter si vous aviez déjà configuré duckDNS, sinon ignorer | Les 2 lignes du bas (pas dans la vidéo) sont peut-être dispensables (mais ça ne coûte rien) | L’option ip_ban de la vidéo c’est bonus en option si tout le reste fonctionne(mieux vaut s’assurer que le reste fonctionne d’abord))
- On redémarre Home Assistant et on vérifie que tous les accès fonctionnent: (a) purger avant les cookies du navigateur sur PC et le cache de l’application sur mobile, (b) on accède à l’accès local en HTTP (http://homeassistant.local:8123) et distant HTTPS avec (https://HeleneAstuce.duckdns.org:YYYYY), (c) et SI on avait déjà configuré DuckDNS (avant ça) alors l’accès distant HTTP est opérationnel (http://HeleneAstuce.duckdns.org:ZZZZZ) et on le désactive (car c’est ennuyeux d’avoir un accès ouvert non secure de l’extérieur) en supprimant la redirection de port ZZZZZ vers 8123, comme précisé en (3)
PS: pour accéder avec son appli mobile il faut bien sûr modifier dans les paramètres l’adresse du serveur externe avec le bon numéro de port externe (https://HeleneAstuce.duckdns.org:YYYYY
)
EDIT: pour être vraiment COMPLET (même si tout est fonctionnel avec ce qu’il y a au-dessus), on peut en plus…
- ajouter l’adresse externe (
https://HeleneAstuce.duckdns.org:YYYYY
) dansParamètres > Système > Réseau > URL de Home Assistant
- ajouter le wifi local Dans l’application mobile
Paramètres > Application Compagnon > Serveur "Maison" > SSID du réseau wifi domestique
> sélectionnez votre wifi (à condition d’être connecté en wifi) de façon à passer en HTTP local quand vous êtes sur votre wifi local (et vraiment indépendant d’internet du coup)
[*] Pour un autre DNS que duckdns il y a l’option d’utiliser le module Let's Encrypt
(cf. McFly).
Pour l’utilisation de NGINX seul (sans duckDNS ni Let’sEncrypt), c’est peut-être une possibilité (à confirmer sur les limitations, cf. aussi ce post de Sylvain_G que je n’ai pas testé jusqu’au bout).
Et il y a certainement encore d’autres possibilités