informatique:reseau:nsupdate

Nsupdate

  • 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
  • informatique/reseau/nsupdate.txt
  • Dernière modification : 2017/06/12 22:07
  • de bn8