Auto Hébergement et IP Dynamique

Auto Hébergement et IP Dynamique

  • Partie 1 : Vérification et Correction automatique de l’ip de mon nom de domaine
  • Partie 2 : Vérification de mes services
  • Partie 3 : Pour aller plus loin

J’imagine, petit bidouilleur, que si tu as atterris sur cette page c’est que tu auto-héberges des outils/services chez toi. Dans ce cas, tu dois être confronté à un problème d’adressage IP quand celle-ci change (merci le fournisseur).

J’ai un nom de domaine chez OVH qui me permet de faire pointer plusieurs services sur l’url de base reupireup.fr

Mon fournisseur d’accès Internet change l’IP de mon routeur environ 1 fois par mois. Cela m’oblige à refaire pointer reupireup.fr sur l’IP du routeur manuellement. Concrètement, cela revient à trouver l’IP du routeur (https://www.whatsmyip.org/) et mettre à jour l’ancienne IP des sous-domaines avec la nouvelle. C’est assez pénible à faire chaque mois et cela nécessite d’être sur mon réseau.

Dans un premier temps, j’ai donc décidé de faire un script sh qui s’occuperait de vérifier que l’ip du routeur est la même que celle rendue par les serveurs DNS. Pour cela, j’ai inscrit dans crontab le lancement d’un batch qui vérifie et ajuste -si nécessaire- l’ip rendue par les DNS. J’ai programmé son lancement toutes les 6 heures, je ne voulais pas que le raspberry génère toutes ces requêtes plus souvent.

J’ai réutilisé un code trouvé sur internet pour l’adapter à mes besoins:

Tous mes services étant des sous domaines de reupireup.fr, j’ai dû générer des certificats SSL par certbot pour y accéder de manière sécurisée. La configuration par défaut de letsencrypt laisse des fichiers permettant le renouvèlement automatique des certificats avant échéance. Sur mon raspberry ces fichiers sont sous /etc/letsencrypt/renewal et sont stockés sous la forme url.conf.

L’adaptation du script permet de parcourir tous les fichiers de configuration du répertoire et de vérifier que toutes les url trouvées pointent bien vers l’ip de mon serveur.

De cette manière je n’ai plus à me soucier de l’adaptation du script si j’ajoute ou si je supprime un service. Pratique non 😉 ?

Voici le fichier sh utilisé (remplacer XXXX etYYYY par vos login et mdp d’OVH):

#!/usr/bin/env bash

# Account configuration
LOGIN=XXXXXXXXXX
PASSWORD=YYYYYYYYYYYYYY

PATH_LOG=/var/log/dynhostovh.log
CURRENT_DATETIME=$(date -R)


checkDNS_IP()
{
  HOST=$1
  HOST_IP=$(dig +short $HOST A)
  CURRENT_IP=$(curl -m 5 -4 ifconfig.co 2>/dev/null)
  if [ -z $CURRENT_IP ]
  then
    CURRENT_IP=$(dig +short myip.opendns.com @resolver1.opendns.com)
  fi

  # Update dynamic IPv4, if needed
  if [ -z $CURRENT_IP ] || [ -z $HOST_IP ]
  then
    echo "$HOST No IP retrieved" >> $PATH_LOG
  else
    if [ "$HOST_IP" != "$CURRENT_IP" ]
    then
      echo "$HOST: ip DNS : [$HOST_IP] , ip réelle [$CURRENT_IP]">> $PATH_LOG
      RES=$(curl -m 5 -L --location-trusted --user "$LOGIN:$PASSWORD" "https://www.ovh.com/nic/update?system=dyndns&hostname=$HOST&myip=$CURRENT_IP")
      echo "$HOST: traitement $RES" >> $PATH_LOG
    else
      echo "$HOST OK" >> $PATH_LOG
    fi
  fi
}

echo "-------------------------------------------------">> $PATH_LOG
echo "[$CURRENT_DATETIME]: vérification">> $PATH_LOG

for file in /etc/letsencrypt/renewal/*.conf; do
    [ -e "$file" ] || continue
    filename=$(basename $file)
    url="${filename//.conf/}"
    checkDNS_IP $url
done

Si tu possèdes un nom de domaine chez un autre fournisseur, la logique reste la même, il suffira de trouver l’url permettant de mettre à jour l’ip de ton nom de domaine.

Après avoir mis en place l’exécution programmée du batch, j’étais assuré d’avoir mon nom de domaine qui pointe bien sur l’ip de mon routeur et j’étais assez satisfait.

Peut-on aller plus loin ? La vérification décrite plus haut ne concerne que l’ip derrière mon nom de domaine, je ne vérifie pas que le service qui tourne derrière l’url soit bien accessible, mais ça sera pour la deuxième partie.

  • Partie 2 : Vérification de mes services
  • Il existe beaucoup de solutions pour vérifier la présence d’un service. Dans le rayon des solutions complètes et gratuites (pour du matériel de particulier on s’entend), NEMS fait office de référence. Cela se présente comme un OS à installer sur un raspberry, un petit linux optimisé pour faire de la surveillance. On peut faire confiance au sérieux de ce système car il est édité par Nagios, solution robuste très présente dans le monde professionnel. Après avoir installé l’os sur un raspberry qui dormait dans un coin, me voila parti à la découverte du paysage … et quel paysage !! C’est très complet mais c’est aussi très compliqué ! Pour paramétrer un simple ping, il faut définir un groupe de machine, changer le profil du groupe, ajouter des services, compiler les règles et j’en passe !! Nems n’était pas une bonne idée pour mon besoin, il fait trop de choses dont je n’ai pas besoin et se configure comme on fait décoller une fusée …

    <digression>

    Je consulte régulièrement le canal reddit r/selfhosted/ pour me donner des idées de service à héberger à la maison. Au détour d’une conversation j’y découvre un lien très intéressant https://github.com/awesome-selfhosted/awesome-selfhosted, un inventaire à la Prévert de tout ce qu’on peut héberger chez soi. C’est ainsi que je découvre que j’ai pris du retard sur Docker. Tout, ou presque, est disponible sous forme de container Docker, permettant de faire abstraction de l’environnement du serveur. Je m’essaye à installer quelques containers, et lire quelques beaucoup de tutos.

    Au bout d’un certain temps, j’ai fini d’installer/paramétrer docker + portainer sur un raspberry pour me lancer dans de nouvelles aventures !

    </digression>

    suite au prochain épisode.

     

    Laisser un commentaire

    Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

    $('.js-tilt').tilt({ scale: 1.2 })