Adresse IP dynamique et auto-hébergement

Rédigé par Alexandre le 2019-05-17

#bash #auto-hébergement

Oui, encore en 2019, certains fournisseurs d'accès à internet trouvent un intérêt aux IP dynamiques. Ne me demandez pas lequel, je ne sais pas. Ce que je sais, c'est qu'étant chez Sosh, j'ai ce problème. Problème, non, pas tant qu'on a pas besoin d'accéder à un service qu'on héberge chez soi. En effet, certains services nécessite un accès distant, que ce soit via une adresse IP ou un sous-domaine. Malheureusement, si l'IP change lorsque le modem (la box) redémarre, les deux méthodes d'accès ne fonctionnent plus.

Heureusement, des services comme DynDNS et NoIP proposent de mettre automatiquement à jour un enregistrement DNS avec l'IP externe de votre domicile. Le problème de ces deux outils, sur lesquels vous êtes forcément tombé en cherchant une solution, c'est qu'ils ne sont pas gratuits à vie. Au lieu de payer pour ce genre de service, j'ai opté pour un nom de domaine chez OVH. C'est également payant, mais aussi bien plus souple, en plus d'être français.

Dans la suite de cette article, j'explique la méthode que j'utilise pour mettre à jour un sous-domaine OVH en fonction de l'IP externe de mon modem via l'outil ddclient.

Chez OVH, le service permettant de mettre à jour une IP associé à un enregistrement s'appelle DynHost :

  1. Se connecter à votre Espaceent
  2. Déplier le menu Domaine
  3. Sélectionner votre domaine
  4. Accéder à l'onglet DynHost
  5. Ajouter un DynHost
  6. Appuyer sur Créer un identifiant
  7. Remplir tous les champs, puis Valider
  8. Cliquer à nouveau sur Ajouter un DynHost
  9. Remplir les champs, l'adresse IP n'a que peu d'importance, puis Valider
  10. Vérifier que l'entrée est bien créée

<img src="/articles/adresse-ip-dynamique-et-auto-hebergement/adresse_ip_dynamique_01.png" alt="Console DNS d'OVH"> <img src="/articles/adresse-ip-dynamique-et-auto-hebergement/adresse_ip_dynamique_02.png" alt="Créer un DynHost - Étape 6)"> <img src="/articles/adresse-ip-dynamique-et-auto-hebergement/adresse_ip_dynamique_03.png" alt="Créer un DynHost - Étape 7"> <img src="/articles/adresse-ip-dynamique-et-auto-hebergement/adresse_ip_dynamique_04.png" alt="Créer un DynHost - Étape 9"> <img src="/articles/adresse-ip-dynamique-et-auto-hebergement/adresse_ip_dynamique_05.png" alt="Constat du DynHost">

Une fois que l'enregistrement existe, installer et configurer ddclient :

apt install ddclient libio-socket-ssl-perl curl

Lors de l'installation, la configuration pose plusieurs questions :

  1. Fournisseur de service DNS dynamique : Autre
  2. Serveur de DNS dynamique : www.ovh.com
  3. Protocole de mise à jour du DNS dynamique : dyndns2
  4. Identifiant pour le service de DNS dynamique : l'identifiant que vous avez saisi
  5. Mot de passe pour le service de DNS dynamique : vous seul le connaissez
  6. Confirmation du mot de passe : même chose
  7. Interface réseau utilisée par le service de DNS dynamique : laisser vide
  8. Noms de domaine de DNS dynamique (complètement qualifiés) : le nom de domaine que l'on souhaite mettre à jour

Lors de l'écriture de cet article, je n'ai pas réussi à obtenir une adresse IP avec la configuration par défaut. Qu'à cela ne tienne, je préfère utiliser un service dans lequel j'ai un peu confiance pour récupérer mon adresse IP publique. Modifier le fichier de configuration :

nano /etc/ddclient.conf

Au début du fichier, ajouter les éléments suivants :

# Global
syslog=yes
mail-failure=root
ssl=yes
use=cmd, cmd='/usr/bin/curl --silent --ipv4 https://ipv4v6.lafibre.info/ip.php'
  • syslog=yes : permet d'avoir des journaux, en cas de soucis
  • mail-failure=root : l'utilisateur root recevra un courriel en cas d'échec uniquement
  • ssl=yes : permet la prise en charge du https
  • use=cmd : permet de spécifier la méthode pour déterminer l'IP externe ; ici il s'agit de la commande curl

Lancer une première fois ddclient en mode verbeux :

ddclient -v

J'ai anonymisé les IP, mais vous devriez obtenir quelque chose dans ce genre :

INFO:     setting IP address to 90.46.xxx.xxx for maison.ykn.fr
UPDATE:   updating maison.ykn.fr
CONNECT:  www.ovh.com
CONNECTED:  using SSL
SENDING:  GET /nic/update?system=dyndns&hostname=maison.ykn.fr&myip=90.46.xxx.xxx HTTP/1.0
SENDING:   Host: www.ovh.com
SENDING:   Authorization: Basic xxxxxxxxxxxxxxxxxxxxxx
SENDING:   User-Agent: ddclient/3.8.3
SENDING:   Connection: close
SENDING:
RECEIVE:  HTTP/1.1 200 OK
RECEIVE:  Date: Thu, 28 Mar 2019 08:50:35 GMT
RECEIVE:  Content-Type: text/plain; charset=UTF-8
RECEIVE:  Cache-Control: max-age=60
RECEIVE:  Expires: Thu, 28 Mar 2019 08:51:35 GMT
RECEIVE:  Vary: Accept-Encoding
RECEIVE:  Content-Language: fr
RECEIVE:  X-IPLB-Instance: xxxxx
RECEIVE:  X-CDN-Pop: rbx1
RECEIVE:  X-CDN-Pop-IP: 51.254.xxx.xxx/xx
RECEIVE:  X-Request-ID: xxxxxxxxxx
RECEIVE:  X-Cacheable: Not cacheable: no cache
RECEIVE:  Accept-Ranges: bytes
RECEIVE:  Connection: close
RECEIVE:
RECEIVE:  good 90.46.xxx.xxx
SUCCESS:  updating maison.ykn.fr: good: IP address set to 90.46.xxx.xxx

Afin que l'enregistrement se mette à jour lors du changemen d'adresse IP externe, il convient de planifier l'exécution de ddclient. Pour cela, éditer la liste des tâches planifiées :

crontab -e

Ajouter les lignes ci-dessous afin que ddclient s'exécute toutes les 30 minutes.

# Mettre à jour l'enregistrement DNS
*/30 * * * * /usr/sbin/ddclient

Le défaut de cette méthode, est qu'il faut attendre jusqu'à 30 minutes après un changement d'IP pour que le service soit à nouveau disponible via son enregistrement DNS. Nous pourrions évidemment changer la planification pour que ddclient se lance plus régulièrement, mais je crois avoir remarqué que l'API d'OVH pour le DynHost ne permet pas d'appels trop fréquents.

Si le service ne supporte pas une coupure aussi longue, je vous oriente vers un des nombreux Chatons qui proposent un accès VPN.