NginX Proxi Manager perd la connexion dès que la Livebox reboot

Bonjour,

Je commence à cerner la source de mes pertes de liaisons en https.

A chaque fois que je perdais la connexion, je perdais (et perds toujours) la possibilité d’utiliser le nom de domaine créé sous Duckdns.
Seul l’accès en local me permet de me reconnecte. Il me faut alors recréer un nouveau nom de domaine, et reconfigurer celui-ci avec Nginx Proxi Manager pour me reconnecter à ma mon HA depuis l’extérieur.

Là j’avance, :face_with_head_bandage: … je viens de me rendre compte que ce problème intervient dès que ma Livebox (5) reboot.
Aucun de mes noms de domaine ne fonctionne. J’ai beau virer le Let’s encript et redémarer NPM, impossible de me reconnecter en appuyant sur la touche du nom de domaine de la colonne source dans le web UI.
Alors que cela fonctionne habituellement en HTTP only, en appuyant sur le nom de domaine (sans let’s Encrypt ) comme dans la video de présentation/aide de Nginx PM.

Dans la Livebox, l’IP est fixe, et les règles de redirection sont là ( 80 > 80 et 443 > 443).
Le système reste fonctionnel tant qu’aucune perte de connexion intervient.

Qu’est-ce qui plante ??

Le tutoriel d’origine

https://forum.hacf.fr/t/acces-de-l-exterieur-en-https-avec-nginx-proxy-manager/1761/

Ma configuration


[center]## System Health

version core-2021.3.3
installation_type Home Assistant OS
dev false
hassio true
docker true
virtualenv false
python_version 3.8.7
os_name Linux
os_version 5.4.83-v8
arch aarch64
timezone Europe/Paris
Home Assistant Community Store
GitHub API ok
Github API Calls Remaining 4950
Installed Version 1.11.3
Stage running
Available Repositories 775
Installed Repositories 8
Home Assistant Cloud
logged_in false
can_reach_cert_server ok
can_reach_cloud_auth ok
can_reach_cloud ok
Hass.io
host_os Home Assistant OS 5.12
update_channel stable
supervisor_version supervisor-2021.03.6
docker_version 19.03.13
disk_total 109.3 GB
disk_used 6.2 GB
healthy true
supported true
board rpi4-64
supervisor_api ok
version_api ok
installed_addons Samba share (9.3.1), File editor (5.2.0), Terminal & SSH (9.1.0), RPi Temp Monitor (0.4), MariaDB (2.2.2), Nginx Proxy Manager (0.10.1)
Lovelace
dashboards 2
resources 4
views 22
mode storage
[/center] Comment récupérer ma configuration : Dans votre HA, Menu latéral `Configuration` > `Info` > bouton copier > `Pour Github` ![image|648x167, 75%](upload://1ietIxFU6nXP1GFrJTzwc2mh0j2.png) ___

Bonjour,
Il serait intéressant de savoir pourquoi la Livebox reboote.
Que se passe-t-il quand elle rebotte, l’adresse IP publique est-elle différente?
Lorsque je passais par une Freebox, et que je lançais un reboot ( tous les 36 du mois), mon accés revenait directement accessible via Duckdns.

Ce qui peux arriver c’est que ton adresse ip INTERNET change à chaque démarrage de la livebox (ce qui est mon cas sur la livebox 4).

Et si DuckDNS n’est pas informé de ce changement d’adresse ip, il redirige toujours vers ton ancienne qui a été attribuée à quelqu’un d’autre.

Il faut vérifier dans le panneau de configuration de DuckDNS l’adresse IP en face de ton nom de domaine.

Ensuite, si c’est pas le bon, tu peux le changer à la main.

Tu utilises NPM (Nginx Proxy Manager) mais celui-ci n’informe pas DuckDNS.

Il te faut passer par l’intégration dédiée pour informer DuckDNS d’un changement d’IP :

Du coup, tu dois avoir dans ton fichier configuration les lignes suivantes (ex: l’accès se fait sur http(s)://forumhacf.duckdns.org) :

#Configuration.yaml

##Informe DuckDNS d'un changement d’adresse IP
duckdns:
  domain: forumhacf
  access_token: 00aa00a-00a0-00-aa00-00a00a
1 « J'aime »

Merci Fredarro

Les causes sont multiples. Micro coupure, fil arraché par mégarde par madame, et ce matin volontaire, car un PC ne retrouvait pas son accès.

Faudra que je regarde ce soir si l’ip publique a changé…

Ah oui merci Clemalex . J’écrivais pendant que tu repondais.
Vous semblez unanimes
Je vérifierai et ajouterai les lignes nécessaires dans le fichier config.

C’était bien cela !!

J’ai commencé par modifier manuellement mon adresse IPv4 sur un de mes nom de domaine sur le site Duckdns. J’ai aussitôt retrouvé l’accès en https.
J’ai volontairement laissé les anciennes adresses IPv4 des autres NDD avant de (ré)installer l’addon Duckdns dans mon HA. Puis déclaré dans la config de l’addon les noms de domaines que j’utilise (j’ai notemment un nom de domaine spécifique pour une carte frame LMS).
Lancement de l’addon et toc ! Je retrouve ma nouvelle adresse IP en face de chaque NDD sur le site Duckdns.
Tut est redevenu fonctionnel !! :partying_face: :partying_face: :partying_face:

Edit : Je n’ai rien inscrit dans mon fichier de config au regard de :

If you are running the Home Assistant DuckDNS add-on this integration is not required. The add-on will keep your IP updated with DuckDNS.

J’aurais tout de même du ??

Merci à tous deux pour votre aide précieuse.

Franck

En fait comme tu n’utilises pas l’add-on DuckDNS pour te fournir le certificat, je te conseille fortement d’utiliser l’intégration et non l’add-on, tu y gagneras en ressources consommées (car l’add-on est un container Docker là où l’intégration est une application).

Mais tu peux très bien rester comme tu est :wink:

Le principe me plait bien, je tente mais j’aimerais comprendre comment cela fonctionne.

Qu’est-ce qui permet de lancer le rafraichissement des adresses IP de Duckdns ?
C’est cyclique ? C’est un évènement ? (je crains que ce ne soit que le reboot de HA)

Pour l’écriture dans le dossier config.yaml, lorsque l’on a plusieurs noms de domaines, comment les écrire sans se faire jeter ?

J’ai tenté :

duckdns:
  domain: tata
  access_token: 00aa00a-00a0-00-aa00-00a00a
# çà fonctionne

duckdns:
  access_token: 00aa00a-00a0-00-aa00-00a00a
  domain: tata
# çà fonctionne 

duckdns:
  access_token: 00aa00a-00a0-00-aa00-00a00a
  domain:
    - tata
    - toto
# le système me jette

J’essaie de multiples façons d’écrire le code pour lui imposer plusieurs noms de domaine. Je n’obtiens pas de résultat positif. :roll_eyes:
Est-ce possible dans l’intégration ?

Non, peut être dans l’add-on il me semble.

Il y a plusieurs solutions pour le faire sans add-on, mais il faut faire quelques manipulations.

Tu veux utiliser l’add-on ou pas ?

Bah dans l’addon ça fonctionne avec plusieurs ndd, mais comme tu m’as dit que c’était mieux dans l’intégration, je m’obstine à le tenter…

Ce n’est pas mieux, mais différent… :innocent:

Et la preuve, l’add-on gère plusieurs nom de domaine, là où l’intégration non…

Je te montrerais comment faire ce soir (tard !) :+1:

1 « J'aime »

Peut-être un complément à ajouter à cet article ? dis-moi
https://hacf.fr/acceder-a-distance-a-home-assistant/

Comme je l’ai dis plus haut, l’intégration native de DuckDNS ne permet pas de donner plusieurs nom de domaine…

Voici 3 méthodes pour palier à ton problème :

1. Utiliser une seconde fois l’intégration DuckDNS

En fait, chaque intégration native est disponible en téléchargement depuis le GitHub officiel Home Assistant Core
Donc si on télécharge le zip du projet global :

animate

On a maintenant tous le nécessaire pour récupérer l’intégration DuckDNS qui nous intéresse.

On dois désarchiver le fichier téléchargé, naviguer dedans jusqu’à l’intégration DuckDNS et copier le dossier de l’intégration dans notre instance Home Assistant dans le dossier custom_components (si le dossier custom_components n’éxiste pas, il faut le créer dans le dossier /config) :

animate

On a donc le dossier duckdns dans notre dossier custom_components.
Si on laisse ainsi, l’intégration duckdns appelée dans le fichier configuration.yaml par les lignes :

#configuration.yaml
duckdns:
  domain: mon_domaine
  access_token: mon_soken

c’est maintenant le dossier présent dans custom_components qui est appelé car il est prioritaire (cela permet d’outrepasser n’importe quelle intégration native si on veut faire des modifications).

:warning: A la prochaine mise à jour de l’intégration (contenue dans une mise à jour de Home Assistant), l’intégration ne sera pas mise à jour car ce sera toujours le dossier présent dans custom_components qui sera appelé et qui n’aura pas été modifié à moins de récupérer la dernière version comme précédemment).

La demande initiale est de pouvoir mettre à jour plusieurs noms de domaine, donc il faut modifier l’intégration que nous venons de copier.

Le principe est le suivant : l’intégration incorporée va mettre à jour un nom de domaine et l’intégration que nous venons de placer dans le dossier custom_components mettra à jour un second nom de domaine (si un troisième nom de domaine, il faudra répéter les opérations).

Pour pourvoir utiliser 2 intégrations DuckDNS, il faut modifier celle que nous venons de placer, en la renommant duckdns_2 au lieu de duckdns :

animate

  • On renomme le dossier en duckdns_2
  • On renomme dans le fichier init.py : DOMAIN = "duckdns_2"
  • On renomme dans le fichier manifest.json : "domain": "duckdns_2",
  • On renomme dans le fichier services.yaml : set_txt_2:

On oublie pas de sauvegarder :wink:

On a maintenant une nouvelle intégration qui peut être appelée dans le fichier configuration.yaml :

#configuration.yaml
duckdns:
  domain: !secret duckdns_domain
  access_token: !secret duckdns_access_token
duckdns_2:
  domain: !secret duckdns_2_domain
  access_token: !secret duckdns_access_token

On redemmare.

C’est tout ! On a maintenant 2 nom de domaine mis à jour par Home Assistant.

:information_source: Il ne faut pas oublier que l’intégration duckdns2 ne se mettra jamais à jour si on ne récupère pas la dernière version de l’intégration duckdns à chaque mise à jour de Home Assistant.

Si on as un troisième nom de domaine, il faut créer de la même manière duckdns_3


2. Utiliser une requête RESTful (mise à jour du nom de domaine sans automatisation)
Si on gratte un peu le sujet, on trouve rapidement la requête qu’il faut envoyer pour mettre à jour l’adresse IP :

https://www.duckdns.org/update?domains=$DOMAINS&token=$TOKEN&ip=$NEWIP

Home assistant permet de lancer des requêtes et de conserver le résultat dans une entité : RESTful - Home Assistant

On va donc utiliser la plateforme rest.

Nous avons donc besoin pour construire la requête :

  • le nom de domaine : sois en dur dans le code, sois dans une entité input_text (mode Texte)
  • le token : sois en dur dans le code, sois dans une entité input_text (mode Password)
  • l’adresse IP extérieur : DNS IP - Home Assistant

Je vais détailler les deux choix (en dur dans le code ou par des entités paramétrables) :

En dur dans le code :

sensor:
  - platform: dnsip
    name: Home Assistant IP
rest:
  - resource_template: https://www.duckdns.org/update?domains=<DOMAINE>&token=<TOKEN>ip={{states('sensor.home_assistant_ip')}}
    scan_interval: 300
    sensor:
      - name: "Reponse de DuckDNS"

Par des entités paramétrables :

sensor:
  - platform: dnsip
    name: Home Assistant IP
rest:
  - resource_template: https://www.duckdns.org/update?domains={{states('input_text.nom_de_domaine')}}&token={{states('input_text.duckdns_token')}}&ip={{states('sensor.home_assistant_ip')}}
    scan_interval: 300
    sensor:
      - name: "Reponse de DuckDNS"

On redémarre.

Maintenant, si on est passé par les entités personnalisée, il faut les renseignées (dans une cartes entités par exemple).
A chaque changement d’adresse ip détecté par la plateforme dnsip, l’entité sensor.home_assistant_ip sera mise à jour.
Sa mise à jour entraîne l’envoie de la requête de mise à jour car l’entité mise à jour est présente dans le modèle de la requête.

C’est tout.
La différence avec la première solution et que nous ne sommes pas dépendant d’une intégration et de ses mises à jour.

3. Utiliser une commande RESTful (mise à jour du nom de domaine avec automatisation)

Cette méthode est quasiment identique à la précédente.

Au lieu d’utiliser la plateforme rest, on peut utiliser l’intégration RESTful Command : RESTful Command - Home Assistant

On a besoin des mêmes informations que la méthode précédente (adresse ip, nom de domaine et token) :

rest_command:
  update_duckdns: 
    url: https://www.duckdns.org/update?domains={{states('input_text.nom_de_domaine')}}&token={{states('input_text.duckdns_token')}}&ip={{states('sensor.home_assistant_ip')}}

On redémarre.

On a maintenant un nouveau service disponible du nom de rest_command.update_duckdns.

Il faut donc utiliser une automatisation qui détecte un changement d’adresse ip pour envoyer la requête de mise à jour (elle doit s’exécuter également au démarrage si jamais l’adresse ip externe change pendant un redémarrage ou l’initialisation de HA) :

alias: DuckDNS - Mise à jour <DOMAINE>
description: 'Mise à jour du nom de domaine sur changement d'adresse ip externe (et au démarrage)'
trigger:
  - platform: state
    entity_id: sensor.home_assistant_ip
  - platform: homeassistant
    event: start
condition: []
action:
  - service: rest_command.update_duckdns
mode: single

C’est fini pour mes explications.

1 « J'aime »

Ouahhh
Impressionnant !

Clairement, je ne pensais pas à des solutions telles que celles-ci. J’imaginais un début d’idée avec des variables (domain et token) modifiées en boucle dans le fichier config.
En première lecture, le boulot pour y arriver semble tellement risqué que je me suis dit, je vais laisser l’addon Duckdns installé et y écrire mes noms de domaine. Mais je me dis que tu as passé pas mal de temps et d’énergie jusque tard, pour présenter (et super bien !) plusieurs méthodes d’y arriver sans l’addon.
Alors je pense tester ta première solution. Elle me semble accessible. Les 2 et 3 me semblent vraiment trop complexes (pour moi), avec trop de fonctions et de manipulations dans des fichiers que je n’ai pas exploité ou ne comprends pas.
J’espère que les mises à jours ne casseront pas le dossier config avec les nouveaux fichiers integrations duckdns-x.

@Pozzi
Oui, je pense qu’un petit mot dans le tuto associé serait intéressant.
J’avais commencé à utiliser l’addon Duckdns et créé mes noms de domaines. Et tout se passait bien. C’est dès que j’ai basculé sur Nginx PM et supprimé l’addon Duckdns que le problème est arrivé.
Je pense qu’il faut avertir de la nécessité de l’ajout d’un moyen de rafraichir les IP publiques lorsqu’on passe par Nginx PM.
Du coup, c’est peut-être plutôt sur ton tuto d’installation d’Nginx proxi manager qu’il faudrait ajouter quelque chose ;).
https://forum.hacf.fr/t/acces-de-l-exterieur-en-https-avec-nginx-proxy-manager/1761

Franck

Bonjour,

Solution 1 testée et approuvée.
Création et modification des fichiers Duckdns ok
Suppression de l’addon Duckdns dans mes modules complémentaires.
Reboot du serveur et de la box avec attribution automatique d’une nouvelle IP publique.
Les nouvelles adresses IP sont immédiatement mises à jour sur le site de Duckdns.
L’accès s’effectue dans la foulée sans problème en https depuis l’extérieur.

Un grand GRAND merci Clemalex !!

1 « J'aime »

mais qu’est ce qui fait que NPM perd la connexion ? c’est pas normale perso je redémarre souvent mon lien chez moi et j’ai pas ce genre de problème …

Un changement de l’IP publique au redémarrage de la Livebox 5 d’Orange. Sans Duckdns d’installé dans HA, le site Duckdns ne rafraichit pas les redirections vers la nouvelle adresse IP publique.