Hello les copains 🙂

Bon je suis loin d’ĂȘtre douĂ© pour le codage, le script-age et autre alors je me tourne vers vos idĂ©es voir si mon truc tiens la route et s'il peut ĂȘtre amĂ©liorĂ©...

Je pose la base : il m'arrive d'avoir des machines qui ne peuvent avoir d'ip fixe soit parce que personne n'a idée de qui contacter pour la fixer chez le FAI, la flemme, etc mais bon faut que je fasse avec...
Donc actuellement j'ai une petite infra posĂ© chez un client et son ip change toute les 24h ( un jour la fibre ils auront un jour ) mais il me faut pouvoir y accĂ©der depuis l’extĂ©rieur sans forcĂ©ment les appeler :
"Hello ! vous avez 5 mn pour taper sur google : monip et me la communiquer ?"

J'ai donc fouiné un peut partout et j'ai dégoté ça :

#!/bin/bash

emplacement="/home/mathieu/scripts/verif_ip"
date_act=`date`
echo "Execution le : $date_act" >> $emplacement/log

ip_old=`cat $emplacement/ip`
ip_act=`curl ipinfo.io/ip 2>/dev/null`

if [ "$ip_act" != "$ip_old" ]
then
/home/mathieu/scripts/dynip/dynip.sh >> $emplacement/dynup
echo "Changement IP : $ip_act" >> $emplacement/log
echo $ip_act > $emplacement/ip
echo "FROM:mathieu@nomdedomaine.com" > $emplacement/mail
echo "TO:bor@nomdedomaine.com" >> $emplacement/mail
echo "Subject: Changement IP" >>$emplacement/mail
date >> $emplacement/mail
echo "" >>  $emplacement/mail
echo "ANCIENNE IP :" >> $emplacement/mail
echo $ip_old >> $emplacement/mail
echo "" >> $emplacement/mail
echo "NOUVELLE IP :" >> $emplacement/mail
echo $ip_act >> $emplacement/mail
echo "LOG DNS :" < $emplacement/dynup
/usr/sbin/sendmail -f "mathieu@nomdedomaine.com" -t "bor@nomdedomaine.com" < $emplacement/mail
else
echo "Pas de Changement IP" >> $emplacement/log
fi

Donc pour l'instant ça, ça fonctionne bien : toutes les heures le script tourne en cron pour vĂ©rifier l’état de l'ip et si changement j'ai un mail qui arrive... DĂ©jĂ  je peut me passer de les appeler ! Youpi !

Maintenant la plus compliqué ( bah voui faut bien se compliquer la vie des fois :p )
J'ai une belle ip qui arrive dans la mailbox mais si pour faire propre ca donnée : hostnamedynamic.nomdedomaine.com ??
J'ai un serveur dns pour mon domaine autant l'utiliser...

Donc un petit tour de GIYBF ( Google is you best friend... ou pas) je trouve un truc dans le genre...
générer une clé DNSSEC pour autoriser la machine dynamique à mettre à jour la zone qui lui correspond.

#!/bin/bash
# -----------------------------------------------------------
# update the dynamic dns for home system
#
# usage: do-nsupdate
# -----------------------------------------------------------

IP=$(wget -qO- http://ifconfig.me/ip)
ACTUALIP=$(/usr/bin/dig +short hostnamedynamic.nomdedomaine.com @ns.nomdedomaine.com | /usr/bin/tail -n1)
KEY="/home/mathieu/scripts/dynip/Kdyn.nomdedomaine.com.private"

if test "$ACTUALIP" = "$IP"
then exit 0
else

cat > /home/mathieu/scripts/dynip/majdnsclient.txt << EOF
server ns.nomdedomaine.com
zone nomdedomaine.com
update delete hostnamedynamic.nomdedomaine.com. A
update add hostnamedynamic.nomdedomaine.com. 180 A $IP
show
send
EOF

nsupdate -k "$KEY" -v /home/mathieu/scripts/dynip/majdnsclient.txt
fi

Voila du coup avec un cron toutes les 2 heures si ça change ça met Ă  jour... ça marche c'est presque beau : je peut accĂ©der Ă  coup de hostname.ndd.com 🙂

Et si on intégrer le tout dans un seul appel cron ? Si le script qui détecte le changement ip fait appel au script dynip si changement il y a ?
J'ai donc placé dans le script de l'ip :

if [ "$ip_act" != "$ip_old" ]
then
/home/mathieu/scripts/dynip/dynip.sh >> $emplacement/dynup
echo "Changement IP : $ip_act" >> $emplacement/log

Pour moi ca me parait cohérent mais peut etre que je me trompe ?
J'attend de voir a la prochaine MaJ de l'ip si tout se dĂ©roule correctement 🙂
Et lĂ  oĂč je sĂšche : je veut pouvoir rĂ©activer la signature DNSSEC sur le fichier de zone DNS pour ĂȘtre dans les clous mais je voit pas comment faire avec cette histoire de dynDNS homemade...

Alors les lumiÚres s'il vous plait ? un avis ? une idée ? une critique ? apprenez moi !!!

Merci de m'avoir lu jusqu'ici 🙂

Mathieu

4 jours plus tard

Bonjour,
j'espÚre que ma réponse ne sera pas trop à cÎté de la plaque, mais ce ne serait pas possible d'utiliser un domaine OVH ou n'importe quel autre qui propose DynHost afin de gérer automatiquement sa mise à jour via ddclient ?
Ensuite, pour la partie DNS maison, faire un CNAME vers le domaine dynamique.

Ainsi, la partie DNS ne bouge plus jamais, et la partie changement d'IP est automatiquement gérée par ddclient (qui fonctionne trÚs bien).

    Ca fait trÚs longtemps que j'ai pas fait ça (10ans...) mais ça marchait bien à l'époque :
    tu héberge un bind quelque part pour ton domaine, sauf qu'il n'y a pas de fichier de zone, mais une base de données (avec l'extension dlz). Du coup, quand tu détectes un changement dans ton ip publique, tu mets à jour cette db, et c'est pris en compte immédiatement dans ton dns. Un exemple ici : http://bind-dlz.sourceforge.net/postgresql_driver.html

    Peut-ĂȘtre un peu touchy Ă  mettre en oeuvre, et un gros dĂ©tour pour accomplir ta quĂȘte principale, mais un sacrĂ© gain de xp si tu y arrives 🙂

    Aeryax J'aime bien le concept et je me servais de ce genre de magouille auparavant, mais j'aimerais pouvoir m'affranchir du service dynhost... globalement mon script tourne au poil, la clé generé permet de mettre à jour la zone maitre le fichier de zone est legerement different de ce que j'avais fait mais il est cohérent et fonctionne. Il ne me reste plus qu'a trouver comment faire re-signer la zone sur le serveur DNS ( et là du coup j'ai trouvé !!!).

    Donc merci @Hardware, parce qu'en lisant l'article sur le serveur DNS et DNSSEC du sus-nommĂ©, je me suis attardĂ© sur la partie "docker" que je dĂ©couvre avec joie 😃 et d'une section :

    Do not forget to add a cron task to increment the serial and sign your zone periodically to avoid the expiration of RRSIG RR records! et tout un bout de script pour l'incrementation de la ligne de code necessaire a la re-signature 🙂

    Donc une fois mes 3 nuits de travail terminĂ© je m'attaque a basculer bind vers le container nsd-dnssec de Hardware et bricoler le tout proprement 🙂

    J'y voit plus clair, merci de votre précieux conseil qui m'ont fait réfléchir et d'avoir une vision plus large.

    Question subsidiaire : peut on attribuer une ip supplémentaire a un seul container ?
    J'achÚte un lot d'ip et dans le lot je veut qu'une ip soit attribué a un container spécifique ?

    Merci @Aeryax et @Merrick

    RĂ©pondre