Accès Distant HTTPS (DuckDNS) + Local HTTP (NGINX) facile (avec les infos manquantes pour les freebox entre autres)

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

  1. Une solution gratuite
  2. Accès distant en sécurisé (HTTPS) pour piloter votre Home Assistant depuis l’extérieur
  3. 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:

  1. Adresse externe de votre box: https://www.whatsmyip.org/ qui vous donne donc mon_NumeroIP_externe (en IPv4 pour ma part)
  2. 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.
  3. 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.
  4. 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).
  5. Dans Home Assistant > Paramètre > Modules Complémentaires installer le module DuckDNS 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 ligne algo: secp384r1 après accept_terms: true (sans ça pour ma part ça ne marche pas)
  6. Dans Home Assistant > Paramètre > Modules Complémentaires installer le module NGINX 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
  7. Dans File Editor (ou tout autre editeur) ouvrir configuration.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))

  1. 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) dans Paramè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

6 « J'aime »

Félicitations pour ce tuto, complet mais aussi explicatif du principe par l’intermédiaire des 2 schémas (pour des non experts en réseaux c’est important de mettre des schémas)

1 « J'aime »

Cool d’avoir pris le temps de faire un tuto pour ça.
Tjrs sympa de penser aux autres.

Ce qui est cool avec NGINX, c’est qu’on peut donner un accès à différentes machines via des sous-domaines sans pour autant ouvrir d’autres ports sur la box. Perso j’adore.

1 « J'aime »

J’utilise une configuration HA core (docker) avec NPM (Nginx Proxy Manager) bien entendu je n’ai nullement besoin d’installer DuckDNS car NPM intègre la fonction.

Je me posais la question de l’intérêt d’installer DuckDNS dans la config que vous proposez ?

Quelqu’un chez Proximus utilise ce système, j’ai bel et bein l’impression que la Box de proximus nous empêche de mettre cette méthode

Bonjour
Très intéressant.
J’avoue que je ne me rappel même plus pourquoi j’avais décidé de faire un connexion https entre NPM et HA … Il n’y a pas des services auxquels ca pose problème d’atterrir en http sur HA?
Sinon sur le schéma on vois que rentrer l’IP local de HA depuis le PC envoi vers nginx mais avec le port 8123 c’est pas possible, si ?

Bon déjà on pourra dire qu’on a là une version sans MariaDB utilisé dans un autre tuto, mais si on peut simplifier encore plus pourquoi pas…

J’avoue que je ne suis pas sûr de la nécessité d’utiliser l’extension duckdns… Peut-être pour mettre à jour et faire le lien entre ton IP et celle de duckdns.org? En tout cas pour ma part je n’ai pas HA en installation docker, mais pas sûr que ce soit un paramètre important.

un spécialiste réseau pourrait nous dire ça ? Je suis curieux d’avoir une explication complètement limpide…

1 « J'aime »

En fait l’installation par défaut de HA est en http et en local uniquement… donc je suis curieux de savoir ce que ça impliquerait comme problème…

Oui bien sûr, et c’est tout l’intérêt de la manip, sinon le module DuckDNS seul ne permet qu’un accès en passant par l’extérieur pour revenir en local…

Pour les services qui pourrait poser problème je pensais aux assistants vocaux et autres accès a l’API HA par l’extérieur par des services qui réclamerait du https de bout en bout.
Mais ca ne semble pas poser de problème et tant mieux.
Ce que je ne comprends pas sur le schéma c’est que 8123 c’est un port d’écoute de HA pas de nginx. Qu’une requête en local sur 8123 transit d’abord sur nginx m’échappe mais ça doit venir du fait qu’il sont sur la même machine avec la même IP.

En tout ça me paraît tellement simple et efficace que je pense le rajouter entre NPM et HA pour pouvoir virer les restrictions en local.
Tout fonctionne bien chez moi mais si panne d’internet je vais perdre les API HA alors que tout est en local

Effectivement pour l’update de l’IP publique en cas d’adresse dynamique.

1 « J'aime »

Non car si c’était le cas ces services ne fonctionneraient pas avec HA.

En fait les services vont voir HA en HTTPS avec le le proxy peu importe que derrière le proxy on soit en HTTP.

C’est une coquille sur le schéma, la requête sur le port 8123 ne passera pas par NGINX mais ira directement sur HA.

1 « J'aime »

Merci pour les éclaircissements. Je vais installer ça ce weekend et rebasculer tout ce qui peux l’être sur l’ip local.

Malheureusement ca ne fonctionne pas chez moi. J’ai une erreur 502.
Peut être un rapport avec algo: secp384r1 que je n’ai pas mis car pas duckdns. Il doit y avoir un équivalent mais je ne sais même pas si il serait a mettre au niveau d’OVH ou de NPM

peut-être avec le module Let’s Encrypt (je n’ai pas testé)