Mises à jour d'une zone dynamique BIND partagée entre des vues retardées


8

Voici le rapide et le sale: sur BIND9 avec une zone dynamique partagée entre les vues , faire une mise à jour, la mise à jour / création / suppression d'un enregistrement fonctionnera bien si je demande cet enregistrement à un client qui tombe dans la même vue que j'ai fait la nsupdate de.

L'interrogation à partir d'une vue qui n'est pas la même que celle que j'ai utilisée pour nsupdate lancera NXDOMAIN (si vous ajoutez un nouvel enregistrement) ou affichera les anciennes informations d'enregistrement en cas de changement / mise à jour jusqu'à une durée arbitraire (disons 15 minutes) passe, ou je le fais de force $ rndc freeze && rndc thaw. $ rndc syncne semble rien faire du tout pour résoudre le problème - j'espérais que ce n'était qu'un problème de fichier journal car les vidages de journal sont documentés pour vider environ 15 minutes.

Si ce n'est pas clair, voici un pseudo-code pour commencer:

Lier les vues

view "cdn-redir" {
   match-clients { 10.1.1.0/24; 10.1.2.0/24; };
   include "cdn-zone.db";
   include "dynamic-zone.db";
};

view "default" {
   match-clients { any; };
   include "dynamic-zone.db";
};

Exemple de ligne de commande

user@ns:~$ nsupdate -k rndc.key
> server localhost
> zone example.com.
> update add foohost.example.com. 600 A 10.5.6.7
> send
> quit

user@ns:~$ dig foohost.example.com (resolv.conf points to 127.0.0.1)
  [ responds with correct answer 10.5.6.7 ]

Ailleurs, un hôte tombant dans la même vue que le nsupdate

user@10.11.12.50:~$ foohost.example.com (resolv.conf points to above nameserver)
  [ responds with correct answer 10.5.6.7 ]

Ailleurs, l'hôte tombe dans une vue différente en tant que nsupdate

user@10.1.1.50:~$ dig foohost.example.com (resolv.conf points to above nameserver)
  [ responds with NXDOMAIN even though I'm asking the same server ]

À ce stade, si je suis patient, le problème finira par se résoudre lui-même (peut-être 15 minutes), mais je n'ai souvent pas le luxe de la patience, donc je suis obligé de $ rndc freeze && rndc thawsur le serveur de noms pour résoudre le problème de force.

D'un autre côté

Du côté parfaitement inversé des choses, si je fais la mise à jour contre le serveur à partir d'une adresse qui tombe dans la vue "cdn-redir", le problème s'inverse. Les requêtes ultérieures des clients correspondant à "cdn-redir" obtiennent l'enregistrement correct immédiatement après nsupdate sans jouer avec "rndc freeze / thaw", mais les requêtes provenant d'adresses qui ne sont pas dans la vue de "cdn-redir" ont désormais la silliness delay / rndc.

Ma question ultime

Si c'était aussi simple que 42, je le prendrais à bras ouverts ...

Je voudrais éviter d'avoir à "geler rndc & & décongeler rndc" de peur de manquer une mise à jour dynamique du serveur DHCP. Quelqu'un sait-il comment synchroniser les enregistrements mis à jour entre les vues de manière plus efficace / efficiente, ou peut-il éclairer où je peux me tromper?

Edit: BIND 9.9.5 / Ubuntu 14.04 mais cela s'est produit sur les versions précédentes d'Ubuntu et de BIND.

Merci a tous!

Comme l'a demandé Andrew B , voici la zone expurgée (et partielle):

$ORIGIN .
$TTL 3600
example.com     IN SOA ns1.example.com. HOSTMASTER.example.com. (
                       2009025039 ; serial
                       900 ; refresh 15
                       600 ; retry 10
                       86400 ; expire 1 day
                       900 ; minimum 15 min
                )
                NS     ns1.example.com.
$ORIGIN example.com.
$TTL 30
AEGIS           A   10.2.1.60
                TXT "31bdb9b3dec929e051f778dda5abd0dfc7"
$TTL 86400
ts-router       A 10.1.1.1 
                A 10.1.2.1
                A 10.1.3.1
                A 10.1.4.1
                A 10.1.5.1
                A 10.1.6.1
                A 10.1.7.1
                A 10.1.8.1
                A 10.2.1.1
                A 10.2.2.1
                A 10.2.3.1
ts-server       A 10.2.1.20
ts-squid0       A 10.2.2.20
ts-squid1       A 10.2.2.21
$TTL 600
tssw4           A 10.2.3.4
tssw5           A 10.2.3.5
tssw6           A 10.2.3.6
tssw7           A 10.2.3.7
; wash rinse repeat for more hosts
$TTL 30
wintermute      A     10.2.1.61
                TXT   "003f141e5bcd3fc86954ac559e8a55700"

Pourriez-vous être amené à partager le contenu de dynamic-zone.db? Obscurcissez les domaines si vous le devez, mais j'aimerais voir les options de zone.
Andrew B

Comme vous l'avez demandé ...
enragedSquirrel

En fait, je voulais le fichier include, pas le contenu du fichier de zone. Je voulais voir la zonedéclaration parce que mes pensées allaient dans une direction similaire à celle de Håkan.
Andrew B

En ce qui concerne: user @ ns: ~ $ nsupdate -k rndc.key> serveur localhost> zone example.com. > mettre à jour ajouter foohost.example.com. 600 A 10.5.6.7 Vous voudrez peut-être savoir que l'utilisation de serverau lieu de local external-ip-addressconsulterait le MNAME de la zone (dans le SOA de la zone) et pourrait vous emmener ailleurs vers un autre serveur de noms pour faire votre mise à jour DNS (en particulier si vous êtes caché-maître / public-esclave ou topologie de réseau maître furtif).
John Greene

Réponses:


7

Différentes vues agissent séparément, c'est essentiellement une commodité par rapport à l'exécution d'instances distinctes de named. S'il y a des zones portant le même nom dans des vues différentes, ce n'est qu'une coïncidence, ce sont toujours des zones entièrement distinctes, pas plus liées que les autres zones.

Le fait d'avoir plusieurs zones distinctes utilisant le même fichier de zone ne fonctionne pas dans les situations où la liaison met à jour le contenu de la zone par elle-même (zones esclaves, zones avec mises à jour dynamiques, etc.). Je ne sais pas s'il existe même un risque de corrompre le fichier de zone lui-même.

Vous pouvez être en mesure de définir quelque chose comme ce que vous voulez faire en ayant la zone dans une vue être un esclave pour la zone avec le même nom dans l'autre vue. Ce sera clairement une configuration quelque peu compliquée, mais en utilisant les clés TSIG pour les clients de correspondance ainsi que la notification / le transfert, je pense que cela devrait être faisable.

Modifier: ISC a publié un article de la base de connaissances pour ce scénario, comment partager une zone dynamique entre plusieurs vues? , suggérant le même type de configuration mentionné ci-dessus.

Voici leur exemple de configuration avec un formatage quelque peu amélioré:

key "external" {
    algorithm hmac-md5;
    secret "xxxxxxxx";
};

key "mykey" {
    algorithm hmac-md5;
    secret "yyyyyyyy";
};

view "internal" {
    match-clients { !key external; 10.0.1/24; };

    server 10.0.1.1 {
        /* Deliver notify messages to external view. */
        keys { external; };
    };

    zone "example.com" {
        type master;
        file "internal/example.db";
        allow-update { key mykey; };
        also-notify { 10.0.1.1; };
    };
};

view "external" {
    match-clients { key external; any; };

    zone "example.com" {
        type slave;
        file "external/example.db";
        masters { 10.0.1.1; };
        transfer-source { 10.0.1.1; };
        // allow-update-forwarding { any; };
        // allow-notify { ... };
    };
};

Après cela, l'article KB de l'ISC auquel vous faites référence, et un autre spécifique aux versions plus récentes que 9.9 via le lien de l' article KB mentionné ci-dessus (inscription requise), m'ont permis de continuer. Merci Håkan Lindqvist!
enragedSquirrel

J'ai dû utiliser transfer-source 10.0.1.1;(sans les accolades) avec bind 9.9.5.
Calimo

1

Ayant des problèmes similaires avec les vues, j'ai décidé de m'en débarrasser et de déplacer l'autorisation dans les zones à la place.

Vous pouvez remplacer les vues des questions par de simples inclusions des deux fichiers de zone, laisser les zones actuellement partagées intactes et ajouter allow-query {} à la définition de "dynamic-zone.db" comme:

    zone "dynamic.zone" {
            allow-query { 10.1.1.0/24; 10.1.2.0/24; };
            type master;
            file "/etc/bind/zones/master/dynamic.zone";
            update-policy { .... };
    };

vous atteignez ainsi votre objectif présumé de rendre dynamic.zone accessible à partir de réseaux spécifiés uniquement et de rendre d'autres zones publiques.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.