DNSサーバーの設定をBindで行ったとき、
- ルートヒントも設定も複数DNSサーバー指定できますし
- フォワーダーの設定も複数DNSサーバー指定できます
例えば、ルートヒントの障害時の挙動を確認することは難しいですが、
複数フォワーダーDNSサーバーを設定した時に、Bindはどのような冗長挙動をするのでしょうか?
検証して試してみました。
環境・前提条件
DNSサーバーとして
- CentOS Linux 7.3.1611
- bind 9.9.4-37
で検証をしました。
結論、障害がわからないレベルで冗長化されていました
本当はbindのソースを読めるのがベストですけど、検証にて挙動を確かめました。
検証した限りの結果としては、Bindでforwardersを複数設定された場合
一台のDNSサーバーが障害が起きた時と、少しぬめっと遅くなるクエリが発生するとこはありましたが(1秒くらい)、その後は安定してレスポンスが返ってきました。
なので、結果的にはforwardersを複数設定している場合は、複数サーバーの一台が障害を起こしてもほとんど気づかないレベルだと思います。
予想されるBind 複数forwardersロジック
上記のような検証を行った結果、
DNSサーバーAには以下のようなクエリログが発生していました。
この結果、
- 代表のフォワーダーDNSサーバーに問い合わせた結果クエリが遅ければ(ミリ秒レベル程度)
- 全部のフォワーダーDNSサーバーにクエリを投げる
- そして次回からの代表のフォワーダーDNSサーバーを変更する
というBindロジックだと思われます。
代表のフォワーダーDNSサーバーがレスポンス良い限り、一台の代表フォワーダーDNSサーバーのみを利用して名前解決をしていると思われます。