Archives du mot-clé rhel6

dhcpd et ddns sont sur un bateau

Il est assez sympa que chaque machine ait un petit nom DNS qui permette de la joindre. On pourrait pour cela écrire un petit script à base de nsupdate qui mette à jour le DNS. Problème : cela nécessite que les clefs de votre DNS se baladent un peu sur tous les systèmes… l’enfer à sécuriser.

Pour éviter cette dispersion, on va utiliser le serveur DHCP (existant) qui fera tout ça à notre place. Vous trouverez sur plein de site comment faire cela, mais en gros, côté DHCP, ça ressemble à ça :

ddns-updates on;
ddns-update-style interim;
ddns-rev-domainname "in-addr.arpa.";
ddns-domainname "mondomaine.local.";
ignore client-updates;
update-conflict-detection false;
update-static-leases on;

zone mondomaine.local. {
    primary 127.0.0.1;
    key "rndckey";
}

subnet 192.168.0.0 netmask 255.255.255.0 {
    zone  0.168.192.in-addr.arpa. {
        primary 127.0.0.1;
        key "rndckey";
    }
}

Du coup y’a plus qu’à écrire des baux statiques à coup de :

host une-machine {
    hardware ethernet 01:23:45:67:89:AB;
    fixed-address 192.168.0.69;
    ddns-hostname une-machine;
}

Feignant par nature, je trouve qu’écrire deux fois le nom de la machine est très pénible (sans compter le risque de mettre à jour un champ en oubliant de mettre à jour l’autre). On cherche dans la doc, et on dirait qu’il y a un paramètre pour ça :

use-host-decl-names on;

Qui permet de n’avoir plus qu’à écrire alors :

host une-machine {
    hardware ethernet 01:23:45:67:89:AB;
    fixed-address 192.168.0.69;
}

On peut difficilement faire plus court.

Sauf que ça marche mal. Bien qu’on ait mis

ignore client-updates;

Les clients qui ont décidé de changer de nom voient ce nom remonter via leur client DHCP (comme Windows le fait), qui remonte alors directement au DNS.

Donc si un jour quelqu’un décide de renommer son poste en « puppet » par exemple, l’entrée DNS existante sera écrasée avec la mauvaise information.

Pour éviter cela, n’utilisez pas la ligne

use-host-decl-names on;

mais plutôt

ddns-hostname = host-decl-name;

qui n’est pas une directive de configuration, mais une évaluation conditionnelle (man 5 dhcp-eval) qui fait en sorte que par défaut, chaque déclaration host ait automatiquement une propriété ddns-hostname. Et du coup, les clients DHCP ne peuvent plus remonter leur hostname au DNS.

NB : Je ne suis pas fou, eux aussi ont le même problème.

Publicités