自宅の引越しからほぼ1ヶ月が過ぎて、ようやく自宅内のネットワークを復活させる元気と時間ができたのでやってみた。が、なぜか localで上げていたDNSが外の名前を全然引けない。引越し前までは全く問題なく動いていたというのに、である。ログを見ると、
May 7 05:00:35 turkey named[26766]: Lame server on '' (in ''?): [128.63.2.53].\53 'H.ROOT-SERVERS.NET': learnt (A=".",NS=".")
とか書いてある…。ん〜、なにが悪いのだろうか…。 root-server が lameってなんだよ…。
とりあえずこのメッセージがどういうことなのか、念のため Googleで検索してみた。簡単に言うと、 authoritative answerを返してくれるべきサーバがnon-authoritative answer を返してきてる、ということらしい。ということは、 root-servers.net の情報が古い、ということなのだろうか?まずはその線を疑って、 named.root が最新のものかどうかの確認をしてみた。が、これに関しては全く問題なしである。
とすると、 named.confの中で何かおかしなことをしてるのだろうか…。と思って、あれこれといじってみた。本当にあれこれといじってみた。あれこれといじりすぎて、具体的に何をしたのか覚えていないほどだ。しかし問題は解決しない。
次に tcpdumpをとってみた。見た目には、ちゃんと ?.root-servers.net と通信しているように見える。じゃあ何が悪いんだよ!?
今度は、無意味だと思いながらも bindを 9に上げてみた。が、予想通り撃沈…。
と、散々悩んだあげく、いまさらという感じであるが、 nslookup でいろいろ と試してみた。
% nslookup Default Server: localhost Address: 127.0.0.1 > server 128.63.2.53 Default Server: h.root-servers.net Address: 128.63.2.53 > set querytype=ns > . Server: h.root-servers.net Address: 128.63.2.53 Non-authoritative answer: (root) nameserver = H.ROOT-SERVERS.NET (root) nameserver = C.ROOT-SERVERS.NET (root) nameserver = G.ROOT-SERVERS.NET (root) nameserver = F.ROOT-SERVERS.NET (root) nameserver = B.ROOT-SERVERS.NET (root) nameserver = J.ROOT-SERVERS.NET (root) nameserver = K.ROOT-SERVERS.NET (root) nameserver = L.ROOT-SERVERS.NET (root) nameserver = M.ROOT-SERVERS.NET (root) nameserver = I.ROOT-SERVERS.NET (root) nameserver = E.ROOT-SERVERS.NET (root) nameserver = D.ROOT-SERVERS.NET (root) nameserver = A.ROOT-SERVERS.NET H.ROOT-SERVERS.NET internet address = 128.63.2.53 C.ROOT-SERVERS.NET internet address = 192.33.4.12 G.ROOT-SERVERS.NET internet address = 192.112.36.4 F.ROOT-SERVERS.NET internet address = 192.5.5.241 B.ROOT-SERVERS.NET internet address = 192.228.79.201 J.ROOT-SERVERS.NET internet address = 192.58.128.30 K.ROOT-SERVERS.NET internet address = 193.0.14.129 L.ROOT-SERVERS.NET internet address = 198.32.64.12 M.ROOT-SERVERS.NET internet address = 202.12.27.33 I.ROOT-SERVERS.NET internet address = 192.36.148.17 E.ROOT-SERVERS.NET internet address = 192.203.230.10 D.ROOT-SERVERS.NET internet address = 128.8.10.90 A.ROOT-SERVERS.NET internet address = 198.41.0.4 >
なんで root-servers.net が . の nsを返すのに non-authoritative な んだよ!!??!? と、問題の根源が root-servers.netにあったことに気づい た……、ってそんなわけはないので、別のネットワーク上のホストから同じこ とをしてみたところ、やはり ?.root-servers.net は、ちゃんと authoritative な回答をよこしてくれた。
とすると……、 プロバイダが何かしてる、という ことなのだろう、という結論に達した。というより、そういうことにした。だ とすると、我が家の DNS の運用はどうするべきか。
- 光接続を提供しているプロバイダの言うことを素直に聞いて、ルータを forwarder に設定して、 forward only にする。実はこれで問題はないのだが、 多くの時間を費やしたあげくにこれをやるときわめて敗北感が強い。
- DNSトラフィックだけは、 IP電話を使うために確保してある ADSL 回線に 回す。この ADSLで接続しているプロバイダは、 引越し前に光接続で使っていて DNSに関しても特に問題がなかったので、こう いう設定ができればそれが最善のような気がする。
結局、我が 家のブロードバンド・ルータの設定をあれこれと検討して、「ポリシールー ティング」をちゃんと設定すれば、 53番ポートあての全てのパケットだけを ADSL 回線に回すことが可能であることが分かった。ということで、そんな風 にしてみた。やれやれである。
ちなみに、この設定をしてから、それまで感じていたネットワークの遅さがなくなったような気がする。それまでは、たとえばあるサイトを IEで表示しようとすると、ページの読み込みが始まるまでの時間がやたらと長かったのだ。読み込みが始まった後は特に遅い感じはしないのだが、とにかくリンクをクリックしてからページがロードされるまでに数秒以上かかる、ということがしょっちゅうあったのである。 DNSか Webの cacheの問題だと思ってはいたが、どうも DNSが怪しいような気がしてきている。もっとも、このプロバイダが proxyを動かしているという話は聞かないのだが、DNSでこんなことが起こっているということを考えれば、別に proxyがあっても全く驚かない。
それにしても、だ。僕はそもそも改選とサービスがセットになったインターネットサービスが嫌いである。いいサービスを提供しているプロバイダが常にいい回線を提供しているとは限らないし、逆のこともいえるだろう。また、仮にいい回線といいサービスの組み合わせを提供しているプロバイダがあったとしても、それよりいいサービスがいつ出てくるか分からない。改選は維持してサービスは換えたい、あるいはサービスはそのままのものを利用して回線だけを換えたい、などということは、この競争の世の中、比較的よくあることなのではないか。我が家のケースは、回線は既設のものを使いたいが、プロバイダは引越し前から使っていたところを、という要求はかなえられない。いまさら IP 電話も使えないプロバイダを無理やり使わされるのはごめんである。そして、今回の DNSの件でこのプロバイダに対する不信感、というか嫌悪感というかはさらに増大した。しかし、速度的なことを考えると、普通の通信にはこの回線、すなわちこのプロバイダを使うのが妥当であるのも確かなのだ。
ともかく、この「root serverが lameで DNSが引けない問題」は、どうやらプロバイダによる DNSトラフィック軽減のための努力のたまものらしい、というのが僕の中での結論である。