====== Nsupdate ====== ===== Mise en place ===== * Sur le client : * Générer la clé : cd /etc/bind dnssec-keygen -a hmac-md5 -b 256 -n HOST host.domain.tld * Récupérer la clé en base64 dans le fichier //Khost.domain.tld.*.key// : host.domain.tld. IN KEY 512 3 157 Fpf5MnfMUWfQ1f/QW/NsCi7TtyKCpm/2DupR2bTWsRI= * Installer le script de mise à jour : * Installer le paquet //dnsutils// contenant la commande //nsupdate// : apt-get install dnsutils * Créer le script ///usr/local/sbin/update_ip// : #!/bin/bash DOMAIN="domain.tld" HOSTNAME="host.${DOMAIN}." NS_SRV=ns0.domain.tld KEY="/etc/bind/Khost.domain.tld.+XXXXX.private" LOG='/var/log/update_ip.log' DEBUG=0 [ "$1" == "-d" ] && DEBUG=1 FORCE=0 [ "$1" == "-f" ] && DEBUG=1 && FORCE=1 cur=$( host $HOSTNAME $NS_SRV|tail -n 1|awk '{print $4}' ) [ $DEBUG -eq 1 ] && echo "Current in DNS : $cur" new=$( wget -q -O - http://ip.zionetrix.net ) if [ $( echo $new|egrep -c '^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$' ) -ne 1 ] then echo "$( date ) - Fail to get IP (output : $new)"|tee -a $LOG exit 1 fi [ $DEBUG -eq 1 ] && echo "Current in real : $new" if [ "$cur" != "$new" -o $FORCE -eq 1 ] then echo "$( date ) - IP Change : $cur => $new"|tee -a $LOG echo "$cur => $new" echo "$( date ) - Update IP :"|tee -a $LOG tmp=$( mktemp ) cat > $tmp << EOF server $NS_SRV zone $DOMAIN update delete $HOSTNAME A update add $HOSTNAME 180 A $new show send EOF echo -e "$( date ) - Generated script to change IP via nsupdate :\n\n$(cat $tmp )\n"|tee -a $LOG echo -e "$( date ) - Run nsupdate :"|tee -a $LOG nsupdate -k "$KEY" -v $tmp|tee -a $LOG fi * Sur le serveur hébergeant la zone : * dans le même fichier de configuration de bind déclarant la zone master : * ajouter la clé : key "host.domain.tld." { algorithm hmac-md5; secret "Fpf5MnfMUWfQ1f/QW/NsCi7TtyKCpm/2DupR2bTWsRI="; }; * dans la déclaration de la zone, autoriser les mises à jour de celle-ci par la clé : allow-update { key host.domain.tld.; }; * recharger la configuration de bind : rndc reload