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.
<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.