Configuration Bind
Bind authentifie la machine cliente avec une clef DNSSEC générée par la commande suivante :
# dnssec-keygen -a HMAC-MD5 -b 512 -n USER hostname.domain.tld
Note :
HMAC-MD5 ne devrait plus être utilisé pour les nouvelles clefs, il est à remplacer par HMAC-SHA256 ou HMAC-SHA512.
La configuration de la zone :
key "hostname.domain.tld" {
algorithm hmac-md5;
secret "abcdefghijklmonpqrstuvwxyz==";
};
zone "domain.tld" {
type master;
file "/etc/bind/db.domain.tld";
allow-update { key hostname.domain.tld.; };
[...]
};
Script client
Ce script utilise la commande nsupdate
fournie sur Debian par le paquet dnsutils
.
#!/bin/sh
CURRENT_IP=`curl ifconfig.me`
DNS_IP=`dig +short hostname.domain.tld @ns.domain.tld | tail -n1 `
DNS_KEY="/home/user/non-world-readable-path/Khostname.domain.+XXX+12345.private"
TMP_FILE="/home/user/non-world-readable-path/info"
if [ "$DNS_IP" = "$CURRENT_IP" ]; then
exit 0
else
cat > $TMP_FILE << EOF
server ns.domain.tld.
update delete hostname.domain.tld. A
update add hostname.domain.tld. 180 A $CURRENT_IP
show
send
EOF
nsupdate -k $DNS_KEY -v $TMP_FILE
fi
Mise à jour manuelle
La mise à jour dynamique utilise un journal binaire qui est répercuté ponctuellement sur la version texte de la zone, il faut donc la verrouiller lors de modifications manuelles pour éviter les conflits.
# rndc freeze domain.tld
[Modification manuelle de la zone]
# rndc thaw domain.tld
# rndc reload domain.tld