DNSは冗長化の夢を見るか

1. dhcpでDNSを二つ配ってみた

ここ最近、ネットワーク周りの再構築を進めている。それに当たってDNSサーバを二重化してみた。
DNSサーバは結構冗長構成が簡単な感じで、マスタースレーブの構成をデフォルトの状態でコンフィグを書くだけで実現できる。
さて、だいたいどんなDNSクライアントホストでもDNSは二つぐらいは指定出来る。(たぶんFreeBSDだと三つ以上いけるぽ)
今までは特に気にすることなく二つ指定したりしてきたけれど、実際にDNSサーバが落ちるとどうなるのか調べてみた。

2. まずはWindows

さて、windowsの場合だと、ネットワークアダプタのプロパティ、TCP/IPv4のプロパティからDNSを二つまで指定することが出来る。
でも今回はDHCPサーバを新調したのでDHCP側でDNSサーバのアドレスを二つ割り振ってみた。

DHCPサーバからDNSのサーバアドレスを二つ割り振ってもらったところ
DHCPサーバからDNSのサーバアドレスを二つ割り振ってもらったところ

ちゃんと二つ割り振られてる。
さて、ここでnslookupの試験をしてみる。
まずはこのDNSが二つ振られた状態でcmd.exeからnslookupを開いたところ

Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation. All rights reserved.

C:\Users\hogetan>nslookup google.com
サーバー: dns1.l2tp.org
Address: 192.168.1.1

権限のない回答:
名前: google.com
Addresses: 74.125.31.103
74.125.31.104
74.125.31.105
74.125.31.106
74.125.31.147
74.125.31.99

もちろん、何の問題もなく動いてる。

さてここで一つ目のDNSサーバのnamedを落としてみた上で再度試してみる。

C:\Users\hogetan>nslookup google.com
サーバー: UnKnown
Address: 192.168.1.1

*** UnKnown が google.com を見つけられません: No response from server

ダメだ・・、全然名前解決できない。
nslookupだけではなく、ブラウザなども全く名前解決できなかった。
windowsだとDNSを二つ指定してもダメということか。
ちなみにDNSサーバのみを手動で設定しても同じ結果だった。残念。

3. FreeBSDの場合

さて、Windowsだとちょっと予想していたのと違う結果で残念だったけど、FreeBSDの場合だとどうだろう。
FreeBSDは手元にマシンがなく、DHCPでnameserverを取得させるとミスったときに面倒なことになるので手動設定で試してみる。
resolv.confでdnsサーバを二つに書き換えてみる。

shell> more /etc/resolv.conf
search example.com
nameserver 192.168.1.1
nameserver 192.168.1.2

さて、nameserverの項目は横に連ねて書くのではなく、同じ名前の項目を縦に並べて書くのがresolv.confの書き方らしい。
ホスト名を引くときに自動で付与されるドメインプリフィックスのsearchの項目は、スペースで区切って横に並べて書く。二つの書き方が混在しててちょっと紛らわしいね。

さて、この状態で試験してみる。

shell> nslookup google.com
Server:         192.168.1.1
Address:        192.168.1.1#53

Non-authoritative answer:
Name:   google.com
Address: 74.125.31.147
...(略)...

まずは普通に名前解決。Server:の項目がresolv.confのnameserverで上に設定したアドレスになってる。

ここで先ほど聞きに行ったDNSサーバのnamedを落としてみる。

shell> nslookup google.com
Server:         192.168.1.2
Address:        192.168.1.2#53

Non-authoritative answer:
Name:   google.com
Address: 72.14.203.99
...(略)...

ちゃんと返答が帰ってきた!
ただ、nslookupのコマンドを発行してから結果が帰るまでの間に多少のタイムラグがある。おおよその目測で2秒弱。
でもこれ早いね。
以前にnameserverで指定されるdnsが死んでて、sshdがdnsの逆引きで返答待ちになって、クライアント側が先にタイムアウトしちゃう問題、ってのがあったのを思い出した。

4. まとめ

  • DNSサーバって二つ以上設定できるね
  • 設定してもWindowsだと効果がないっぽいよ
  • FreeBSDだと結構早く切り替わってくれるね

コメントを残す