Salut à tous,
En commençant ce message je ne savais pas trop exactement ou j’allais… En fin de compte, ça se termine en un genre de tuto… qui ne marche pas
Mais je compte bien sur votre aide pour faire marcher mon affaire !!
Etant abonné free, j’ai essayé (c’est peut-être là mon erreur) de tirer au maximum parti des possibilités qui me sont offertes, et donc de me passer de duckdns par exemple.
Bon alors voilà à ce que j’ai fait.
Pre-requis
-
Faire une demande de mondomaine.freeboxos.fr
-
Créer sur le routeur freebox un bail DHCP statique pour home assistant (pour avoir une IP fixe sur le reseau local)
-
Rediriger le port 80 (toutes IP entrantes) vers le port 80 (IP de home assistant)
-
Installer l’add-on Let’s Encrypt, et le configurer pour mondomaine.freeboxos.fr avec challenge
HTTP
-
Demarrer Let’s Encrypt pour obtenir et installer les certificats SSL (l’add-on doit s’arreter tout seul, et devient inutile à partir de là: ne pas activer le démarrage automatique)
-
Désactiver la redirection du port 80 (ne pas totalement effacer: il faudra réactiver périodiquement, voir remarques)
Option #1: sans proxy inverse
-
Rediriger le port 443 (toutes IP entrantes) vers le port 8123 (IP de home assistant)
-
Configurer les certificats SSL dans
configuration.yaml
:
http:
# Let's Encrypt certificates
ssl_certificate: /ssl/fullchain.pem
ssl_key: /ssl/privkey.pem
-
Configurer
https://mondomaine.freeboxos.fr
comme URL externe de home assistant -
Redemarrer home-assistant
Notes:
-
l’acces à http://homeassistant.local:8123 est perdu (c’est attendu)
-
l’acces à https://192.168.x.x:8123 devrait fonctionnner mais sans etre sécurisé (car le certificat SSL ne couvre que le nom de domaine)
-
l’acces à https://mondomaine.freebox.fr devrait aussi fonctionnner (c’est le but !)
Option #2: avec proxy inverse
-
Rediriger le port 443 (toutes IP entrantes) vers le port 443 (IP de home assistant)
-
Installer l’add-on NGINX Home Assistant SSL proxy, et le configurer avec mondomaine.freeboxos.fr
-
Démarrer NGINX à la main et vérifier dans les log que tout va bien, activer aussi le démarrage automatique
-
Configurer le serveur proxy dans
configuration.yaml
:
http:
# NGINX
use_x_forwarded_for: true
trusted_proxies:
- 172.30.33.0/24
-
Configurer
https://mondomaine.freeboxos.fr
comme URL externe de home assistant -
Redémarrer home-assistant
Notes:
-
l’accès à http://homeassistant.local:8123 est conservé (c’est le gros avantage)
-
l’accès à https://192.168.x.x:8123 ne fonctionne pas (c’est attendu, car le proxy inverse ne connait évidemment pas cette IP)
-
l’accès à https://mondomaine.freebox.fr devrait fonctionnner (c’est le but !)
Remarques
-
Les deux options sont mutuellement exclusives. On peut s’amuser à jongler entre les deux, mais il faut désactiver l’une avant d’activer l’autre (par example désactiver les redirections de ports, commenter cetaines lignes dans
configuration.yaml
, etc…) -
Pour l’option 1 comme pour l’option 2, on peut choisir d’ouvrir un autre port que le port 443 (port
HTTPS
part default). En clair on redirige XYZ vers 8123 pour l’option 1 ou bien XYZ vers 443 pour l’option 2. Du coup, l’accès sécurisé se fait par https://mondomaine.freebox.fr:XYZ ce qui cache un peu plus notre affaire… -
Il faut périodiquement mettre à jour les certificats SSL qui ne sont valides que pour 90 jours. Il suffit de rouvrir le port 80 (le temps du challenge HTTP), de démarrer l’add-on Let’s Encrypt, et de refermer le port. La mise à jour des certificats peut etre automatisée (voir Blueprint for automatic renewal of a Let’s Encrypt certificate) mais pas l’ouverture/fermeture des ports (autant que je sache…)
Ce qui ne marche pas… encore ?
Pour commencer, j’ai vraiment cru que tout fonctionnait parfaitement. Je pouvais accéder à https://mondomaine.freebox.fr comme espéré.
Sauf que ce n’est pas vraiment le cas. Ça ne fonctionne que depuis une machine qui est sur mon réseau local, par example un smartphone ou un PC connecté en Wifi ou en Ethernet. Tout semble indiquer que l’accès est bien externe (les signaux sortent, puis re-rentrent): si je ferme le port 443, alors l’accès à https://mondomaine.freebox.fr est perdu (comme on peut s’y attendre : ça sort mais ça ne rentre plus)
Par contre sur une machine vraiment externe, depuis un smartphone sans Wifi par example… ça ne marche pas Ou est-ce que je me plante ?
La clef du mystère
Pour que ca marche, il faut s’assurer que l’accès extérieur se fasse en IPv4 et pas en IPv6
Plusieurs options (au choix):
- désactiver IPv6 sur son smartphone ( How to disable IPv6 on Android? )
- prendre un vrai nom de domaine (pas
*.freeboxos.fr
) et générer les certificats SSL avec l’add-on Let’s Encrypt. - prendre un sous-domaine
mondomaine.duckdns.org
: en partant de l’option #2, il suffit de pas grand chose pour tout faire marcher. On remplacemondomaine.freeboxos.fr
avecmondomaine.duckdns.org
à quelques endroits clefs (configuration de NGINX, configuration de l’URL d’acces à HA) et le tour est joué ! Cerise sur le gateau (j’ai mis longtemps à comprendre): l’add-on (pas le service DuckDNS en tant que soi) communique automatiquement l’IP de la freebox à DuckDNS (en cas de changement) et prend aussi en charge la génération et la mise à jour automatique des certificats SSL (et cela sans jamais ouvrir le port 80 !), donc pas besoin de d’inquiéter de ça. L’add-on Let’s Encrypt devient inutile…
En conclusion:
Bah oui… c’était bien là l’erreur
Références