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
- Objectifs
- Pourquoi encore un tuto accès https
- Principe
- 9 étapes simples et c’est plié
- Foire aux Questions
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, vu le nombre de posts du type « je ne parviens plus à accéder à HA en https »)
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é, 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) équivalent de LetsEncrypt qui gère aussi les certificats https [*]
- on garde le port 8123 au chaud en interne, il n’y a donc pas de redirection de port 8123 vers l’extérieur contrairement aux (trop) nombreux tutos qui proposent de n’utiliser que le module DuckDNS (sans le module NGINX)
- la redirection du port 443 n’est pas nécessairement vue comme 443 à l’extérieur, c’est plutôt bien si personne ne connaît votre numéro de port ouvert…
- il n’y a à aucun moment un autre port à ouvrir
Tuto en 9 étapes très simples avec 2 modules à installer
Je reprends ci-dessous le très bon (mais incomplet par rapport aux 9 étapes) tuto en vidéo de Raynox https://www.youtube.com/watch?v=dNfSp9BcywE qui vous permet de visualiser en partie les étapes ci-dessous, mais qui est incomplet :
- 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, p.ex. 16385 (en se connectant sur l’interface mafreebox.freebox.fr) que l’on redirige (début et fin = YYYYY) vers 443.
- étape OPTIONNELLE si vous aviez déjà configuré DuckDNS et déjà fait une redirection de port n°ZZZZZZ (ou 8123) 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.
- Si ce n’est pas déjà fait, 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
) - (b) copier/coller le token (qui est affiché quand vous vous connectez)
- et éventuellement (c) ajouter la ligne
algo: secp384r1
aprèsaccept_terms: true
(sans ça pour ma part ça ne marche pas)
- (a) copier/coller le nom de votre domaine sans le https (
- 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)- ssl key et certif sont à commenter si vous aviez déjà configuré duckDNS, sinon ignorer
- L’option ip_ban de la vidéo c’est en option si tout le reste fonctionne(mieux vaut s’assurer que le reste fonctionne d’abord), c’est une sécurité mais aussi un risque de vous auto-bannir.
http:
# ssl_certificate: /ssl/fullchain.pem
# ssl_key: /ssl/privkey.pem
use_x_forwarded_for: true
trusted_proxies:
- 172.30.33.0/24
- 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
)
- 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 à basculer automatiquement en connexion HTTP locale quand vous êtes sur votre wifi de la maison (et vraiment indépendant des problème de connexion 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), voir ce post de Sylvain_G (pas plus simple à mon avis).
- Et plein d’autres possibilités plus ou moins compliquées à trouver sur le forum.
FAQ
- J’ai suivi toutes les étapes et ça ne marche pas
En général on oublie de purger le cache de l’appli ou du navigateur, le plus simple pour tester sans rien en cache c’est de passer par un onglet de navigation privée dans le navigateur et de tester les 2 adresses http://homeassistant.local:8123 et
https://HeleneAstuce.duckdns.org:YYYYY
- J’ai suivi toutes les étapes et j’ai l’écran de connexion mais impossible de me connecter à Home Assistant
Déjà ça signifie que la connexion http ou https est fonctionnelle, donc c’est un autre problème que ce tuto. En général c’est soit un problème d’identifiant/mot de passe, soit un problème d’auto-bannissement de votre IP après de multiples tentatives avec un mauvais identifiant (pour être sûr une solution peut être de se connecter avec une autre IP, par ex. à partir d’un téléphone portable)
- ça ne marche pas depuis mon boulot
En général les connexions un peu sécurisées des entreprises n’autorisent pas la connexion d’IP avec des ports exotiques comme 16385, mais vous pouvez toujours contourner ces sécurités en utilisant un navigateur TOR (ou le navigateur brave avec un onglet de connexion privée TOR)