ビュー間で共有されるBIND動的ゾーンへの更新が遅れる


8

ここですばやく簡単に説明します。ビュー間で共有される動的ゾーンを持つBIND9で、nsupdateを実行し、nsupdateを実行したのと同じビューに該当するクライアントからそのレコードをクエリすると、レコードの更新/作成/削除が正常に機能します。から。

nsupdateで使用したビューとは異なるビューからクエリを実行すると、NXDOMAINがスローされるか(新しいレコードを追加する場合)、変更/更新が発生した場合に、任意の時間まで古いレコード情報が表示されます(たとえば15分)パス、または私は強制的に行います$ rndc freeze && rndc thaw$ rndc sync問題を解決するために何もしないようです-ジャーナルのフラッシュは約15分でフラッシュするように文書化されているので、それが単なるジャーナルファイルであることを望んでいました。

それが明確でない場合は、開始するための擬似コードを次に示します。

BINDビュー

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";
};

コマンドラインの例

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 ]

その他、nsupdateと同じビューに陥るホスト

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

他の場所では、ホストは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 ]

この時点で、我慢すれば問題は最終的には解決するでしょう(たぶん15分ほど)が、私には忍耐の余裕がないことが多いので$ rndc freeze && rndc thaw、ネームサーバーで強制的に問題を修正せざるを得ません。

裏側

完全に逆に言えば、「cdn-redir」ビューに該当するアドレスからサーバーに対してnsupdateを実行すると、問題は元に戻ります。"cdn-redir"に一致するクライアントからの後続のクエリは、nsupdateの直後に "rndc freeze / thaw"をいじることなく正しいレコードを取得します、 "cdn-redir"のビューの外にあるアドレスからのクエリにはdelay / rndcの問題があります。

私の究極の質問

42と単純であれば、両手を広げて...

DHCPサーバーからの動的更新を見逃すことを恐れて、「rndcフリーズ&& rndc解凍」する必要を避けたいのですが。更新されたレコードをビュー間でより効果的/効率的に同期させる方法を知っている人はいますか?

編集:BIND 9.9.5 / Ubuntu 14.04ですが、UbuntuとBINDの両方の以前のバージョンで発生していました。

皆さんありがとう!

アンドリューBからのリクエストに応じて、編集された(そして部分的に)ゾーンは次のとおりです。

$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"

dynamic-zone.dbのコンテンツの共有について話してもらえますか?必要に応じてドメインを難読化しますが、ゾーンオプションを確認します。
アンドリューB

あなたが要求したように...
enragedSquirrel 14年

実際には、ゾーンファイルの内容ではなく、インクルードファイルが必要でした。zone私の考えがホーカンのものと同様の方向に進んでいたので、私は宣言を見たいと思いました。
アンドリューB

以下について:user @ ns:〜$ nsupdate -k rndc.key> server localhost> zone example.com。> foohost.example.comを追加して更新します。600 A 10.5.6.7 serverではなくを使用local external-ip-addressすると、ゾーンのMNAME(ゾーンのSOA内)を参照し、別のネームサーバーに移動してDNSを更新する可能性があることに注意する必要があります(特に、hidden-master / public-slaveがある場合)またはステルスマスターネットワークトポロジ)。
ジョングリーン

回答:


7

異なるビューは個別に動作します。これは本質的に、namedの個別のインスタンスを実行するよりも便利です。異なるビューに同じ名前のゾーンがある場合、これは単なる偶然であり、それらは完全に別個のゾーンであり、他のどのゾーンよりも関連がありません。

複数の別々のゾーンが同じゾーンファイルを使用するようにしても、バインドがゾーンのコンテンツを独自に更新している状況(スレーブゾーン、動的更新のあるゾーンなど)では機能しません。ゾーンファイル自体を破損するリスクさえあるかどうかはわかりません。

一方のビューのゾーンをもう一方のビューの同じ名前のゾーンのスレーブにすることで、やりたいことのようなものを設定できる場合があります。これは明らかにやや複雑な構成になりますが、マッチクライアントにTSIGキーを使用するだけでなく、通知/転送も実行できるはずです。

編集:ISCはこのシナリオのKB記事を公開しています。動的ゾーンを複数のビュー間で共有するにどうすればよいですか?、上記と同じ種類の構成を提案します。

これは、多少改善されたフォーマットを使用した設定例です:

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 { ... };
    };
};

これに続いて、あなたが参照するISCのKB記事と、前述のKB記事のリンク(登録が必要です)を介して9.9より新しいバージョンに固有の別の記事が私を導きました。HåkanLindqvist、ありがとう!
enragedSquirrel 2014年

transfer-source 10.0.1.1;bind 9.9.5 では(中括弧なしで)使用する必要がありました。
Calimo

1

ビューに同様の問題があるため、ビューを削除し、代わりに承認をゾーンに移動することにしました。

質問のビューを両方のゾーンファイルの単純なインクルードで置き換え、現在共有されているゾーンをそのままにして、次のように「dynamic-zone.db」定義にallow-query {}を追加できます。

    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 { .... };
    };

これにより、特定のネットワークからのみdynamic.zoneにアクセスできるようにし、他のゾーンを公開するという想定された目標を達成します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.