Smart-proxy-dns

De wiki.nexiat.fr
Aller à la navigation Aller à la recherche
Fiche express
Type Module smart proxy Foreman
Rôle Création/suppression dynamique d'enregistrements DNS pilotée par Foreman
Backend BIND (via clé TSIG et nsupdate)
Voir aussi Smart proxies · Smart-proxy-dhcp · Smart-proxy-tftp

Le module DNS d'un smart proxy Foreman permet à Foreman de créer et supprimer dynamiquement des enregistrements DNS (A, PTR...) lors du provisioning d'hôtes. Il s'appuie sur un serveur DNS BIND préconfiguré pour accepter les mises à jour dynamiques (dynamic DNS / nsupdate), authentifiées par une clé TSIG.

Prérequis

Un serveur DNS BIND doit être disponible et autoriser les mises à jour dynamiques via une clé de signature (TSIG). Le smart proxy ne fait qu'exécuter des requêtes nsupdate signées avec cette clé.

Configuration du smart proxy

vi /etc/foreman-proxy/settings.yml
:dns: true
:dns_key: /home/proxy/keys/Kdns-update-key.+157+00000.private
:dns_server: dns1.example.com

Génération de la clé TSIG

ddns-confgen -k foreman -a hmac-md5
vi /etc/rndc.key
key "foreman" {
        algorithm hmac-md5;
        secret "REMPLACER_PAR_LA_CLE_GENEREE";
};

Configuration BIND (named.conf)

vi /etc/named.conf
options {
        directory "/var/named";
        // Redirige vers le résolveur amont ce que ce serveur ne peut résoudre
        forwarders { 192.168.0.1; };

        statistics-file "/var/named/data/named_stats.txt";
        dump-file "/var/named/data/cache_dump.db";
};

controls { inet 127.0.0.1 allow { localhost; } keys { foreman; }; };
include "/etc/rndc.key";

# ----------------------------------
# Zone directe
# ----------------------------------
zone "example.com" IN {
        type master;
        file "example.com.zone";
        allow-update { key "foreman"; };
};

# ----------------------------------
# Zone inverse
# ----------------------------------
zone "0.168.192.in-addr.arpa" IN {
        type master;
        file "0.168.192.in-addr-arpa.zone";
        allow-update { key "foreman"; };
};

logging {
  category update { update_log; };
  channel update_log {
    file "/var/named/logs/dns-update.log" versions 2 size 20m;
    print-time yes;
    print-category yes;
    print-severity yes;
    severity info;
  };
};

(à vérifier selon la version de BIND — la syntaxe logging peut nécessiter des ajustements)

Fichiers de zone

Zone directe

vi /var/named/example.com.zone
$ORIGIN example.com.
$TTL 86400

@ IN SOA ns1.example.com. hostmaster.example.com. (
        2026072501   ; serial (yyyymmddNN)
        3H           ; refresh
        15M          ; retry
        1W           ; expiry
        1D           ; minimum
)

                                IN NS   ns1.example.com.
localhost                      IN A    127.0.0.1

; Enregistrements A gérés dynamiquement par le smart proxy
host1                           IN A    192.168.0.10
host2                           IN A    192.168.0.11

Zone inverse

vi /var/named/0.168.192.in-addr-arpa.zone
$TTL 2d
$ORIGIN 0.168.192.IN-ADDR.ARPA.

@       IN      SOA     ns1.example.com. hostmaster.example.com. (
        10              ; serial
        86400           ; refresh
        7200            ; retry
        3600000         ; expire
        86400           ; minimum
)

        IN      NS      ns1.example.com.

10      IN      PTR     host1.example.com.

Autorisation des mises à jour dynamiques

Dans l'instruction zone de chaque zone à mettre à jour dynamiquement, une clause update-policy accorde le droit d'update à la clé TSIG :

update-policy {
        grant foreman zonesub ANY;
};

Test manuel d'une mise à jour signée par la clé :

nsupdate -k /etc/rndc.key

Voir aussi