• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:DNSの勉強中です)

DNSの勉強中です

このQ&Aのポイント
  • BIND9を使ってDNSの勉強中です
  • LAN内の閉じた環境でBIND9を使ってDNSの勉強中です
  • 2台のマシンでのBIND9を使ったDNSの勉強中で、名前解決の問題につまづいています

質問者が選んだベストアンサー

  • ベストアンサー
  • maesen
  • ベストアンサー率81% (646/790)
回答No.5

ちょっと結果の整合性が取れていない感じもありますが、提示された情報だけでは判断が難しいですね。 前回から大きく結果が異なっていますので。 特にここと >【2台目での症状】 >dig @相手DNSアドレス  www.example > REFUSEDとなる。(異常)  ここの結果が相反します。 >dig @127.0.0.1またはlocalhost www.example > www.exampleのアドレスが返る。(正常) キャッシュの影響があるかもしれません。 REFUSEDが出ているということですが、これはクエリが拒否されているので allow-query とかの設定をしているのであれば、全て許可する状態にして検証を実施していくほうがいいでしょう。 BIND側のアクセス制御をすべて許可した状態で正常ならばアクセス制御の問題ですし、そうでなければ原因は違うところにあることになります。 既に実施していたら申し訳ないです。

freeradical
質問者

お礼

何度もご返信いただきましてありがとうございました。

freeradical
質問者

補足

ご助言いただいたとおり、 allow-queryの設定を見直してみました。 以下の通り設定したところ、 すべて問い合わせパターンで正常に応答が返るようになりました。 allow-query { any; }; allow-query-cache { localnets; localhost; }; allow-recursion { localnets; localhost; };

その他の回答 (4)

  • maesen
  • ベストアンサー率81% (646/790)
回答No.4

>ただ、PINGが通らないことが気になっていたので、別にマシンを2台用意して、第3オクテットを合わせたIPアドレスを設定してました。ついでにWindowsではなくCentOSにしました。 httpが通信出来て、pingが通らないのならばほぼファイアウォールの設定のように思いますが、別の機器に変えたのならば今さらですね。 # ここでいうファイアウォールは総称です。 # 質問者さんの環境でファイアウォール機器やルータを使用しているのか、OS標準のファイアウォールを使用しているのかサードパーティ製のファイアウォールがインストールされているのかは判らないので、パケットを制限するもの全てを意味して書いています。 >逆に、2台目から1台目に向かって dig www.example を実行しても、結果は変わらずでした。 dig @1台目のIPアドレス www.example とか dig www.example +trace などの結果から問題点を絞っていく必要があると思います。 1台目から2台目のDNSパケットは正常に通信出来ているということですので、ファイアウォール(CentOSなのでiptablesでしょうか)かnamed.confの設定、又はルートヒントの変更内容が確認すべきものになるでしょうか。

freeradical
質問者

お礼

ご回答ありがとうございました。

freeradical
質問者

補足

返信が遅くなりまして申し訳ありません。 Pingが通らなかった原因が、 ご指摘のとおり、ファイアウォールのフィルタ設定であったことが判明し、 さらにその設定がDNSの接続にも影響を与えていたことが判明しました。 お騒がせしておりましたが、 Windows環境でも、なんとかDNSが通り始めました。 CentOSのマシンと同じ症状になったところで、 CentOS側はお役御免です。 現在の症状としては以下のとおりです。 【1台目での症状】 dig @相手DNSアドレス www.example  www.exampleのアドレスが返る。(正常)  dig @相手DNSアドレス  www.sub.example  www.sub.exampleのアドレスが返る。(正常) dig @自信のアドレス www.example  REFUSEDとなる。 (異常) dig @自信のアドレス  www.sub.example  REFUSEDとなる。(異常) dig @127.0.0.1またはlocalhost www.example  www.exampleのアドレスが返る。(正常)  dig @127.0.0.1またはlocalhost  www.sub.example  ns.sub.example.のアドレスが返る。(異常) 【2台目での症状】 dig @相手DNSアドレス  www.example  REFUSEDとなる。(異常)  dig @相手DNSアドレス  www.sub.example   REFUSEDとなる。(異常) dig @自信のアドレス www.example  REFUSEDとなる。(異常) dig @自信のアドレス  www.sub.example  REFUSEDとなる。(異常) dig @127.0.0.1またはlocalhost www.example  www.exampleのアドレスが返る。(正常)  dig @127.0.0.1またはlocalhost  www.sub.example   www.sub.exampleのアドレスが返る。(正常) 【まとめ】 1台目も2台目も、 互いに相手をサーバとしたdigでは正常にアドレスを返す。 どちらも自分自身をサーバとしたdigではREFUSEDとなる。 ただし、ローカルホストを用いると正常にアドレスを返す場合があり、 1台目と2台目では症状が異なる。 1台目からのローカルホストを用いたdigは、 自分自身が管理するサーバのアドレスは返すが、 2台目が管理するサーバについてはネームサーバのアドレスのみが返る。 2台目からのローカルホストを用いたdigは、 どちらのサーバも正常にアドレスを返す。 ややこしく、わかりにくくて申し訳ありませんが、 お気づきの点があれば教えていただければと思います。

  • maesen
  • ベストアンサー率81% (646/790)
回答No.3

>ネットワーク上にネームサーバを見つけられないようですが、そこで停滞しています。 これは考えにくいです。 >C:\dns\bin>dig @172.16.10.37 www.sub.example このコマンドでDNSサーバを直接IPアドレスで指定していますので。 >どうやら、ファイアウォール以前に、問合わせしているマシンからDNSパケットが出ていかないか この可能性も全く否定するものではありませんが、Windowsファイアウォールはデフォルトでアウトバウンドを制限していないしIPアドレス直接指定なので可能性は高くないと考えます。 digコマンドの問題というのもあるかと思いますので念のためWindows標準コマンドでチェックしてはいかがでしょうか。 nslookup www.sub.example 172.16.10.37 これでも応答が返らなければ、BINDの設定以前にWindowsのネットワーク設定に問題があるように思います。 pingコマンドによる疎通テストから始めて原因を特定していくなどのトラブルシューティングをしていく必要がありそうです。 ちょっと気になる点として >;; SERVER: 172.16.11.72#53(172.16.11.72) >;; SERVER: 172.16.10.37#53(172.16.10.37) サブネットマスクがどのような設定かわからないのでなんともいえませんが、 1台目と2台目で第3オクテットが異なっています。 単純にルーティングの問題とか、サブネットマスクやIPアドレスの設定ミスなんてことはありませんよね。

freeradical
質問者

お礼

ありがとうございました。

freeradical
質問者

補足

第3オクテットが異なることについて、サブネットマスクが255.255.0.0なので問題ないと思っておりました。 また、HTTPであればアドレス直接指定で、2台目から1台目を見ることができたのでルーティングは問題ないと考えておりました。 ただ、PINGが通らないことが気になっていたので、別にマシンを2台用意して、第3オクテットを合わせたIPアドレスを設定してました。ついでにWindowsではなくCentOSにしました。 結果、1台目で dig wwww.sub.example を実行したところ、正しく結果が返ってきました。 # dig www.sub.example ; <<>> DiG 9.3.6-P1-RedHat-9.3.6-20.P1.el5_8.6 <<>> www.sub.example ;; global options: printcmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 37322 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1 ;; QUESTION SECTION: ;www.sub.example. IN A ;; ANSWER SECTION: www.sub.example. 2034 IN A 172.16.13.195 ;; AUTHORITY SECTION: sub.example. 2034 IN NS ns.sub.example. ;; ADDITIONAL SECTION: ns.sub.example. 2034 IN A 172.16.13.195 ;; Query time: 2 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) ;; WHEN: Thu Mar 14 14:15:34 2013 ;; MSG SIZE rcvd: 82 逆に、2台目から1台目に向かって dig www.example を実行しても、結果は変わらずでした。 # dig www.example ; <<>> DiG 9.3.6-P1-RedHat-9.3.6-20.P1.el5_8.6 <<>> www.example ;; global options: printcmd ;; connection timed out; no servers could be reached

  • maesen
  • ベストアンサー率81% (646/790)
回答No.2

>SERVFAILとなりました。 再帰を有効にする前の結果では再帰すべきサーバの情報が見えていましたので、 再帰先のDNSサーバ(2台目)から応答が受信できなかった可能性が高いと思います。 DNSサーバが自分以外からのクエリを受けられるように設定されていますか? たとえば、1台目から以下のコマンドで2台目のDNSにクエリを出して応答が返りますでしょうか? dig @172.16.10.37 www.sub.example クエリが返らなければ、BINDの設定やファイアウォールの設定などを確認してください。 逆もしかりです。 >ルートヒントをどのように書き換えたらよいか、 なんのためにこれを行うか理解していないと意味が無いですよ。 理解すれば自ずと答えが見えてくると思います。 もちろん通常はルートヒントを書き換えるなんてことはしないです。 複数のルートサーバは必要は無いので、 ・A.ROOT-SERVERS.NET. 以外の記載を全て削除する ・A.ROOT-SERVERS.NET. のIPアドレスを172.16.11.72(1台目)に変更する こんな感じでしょうか。

freeradical
質問者

お礼

ご回答ありがとうございました。

freeradical
質問者

補足

1台目から2台目へのDNSにクエリですが、 以下のとおりとなりました。 C:\dns\bin>dig @172.16.10.37 www.sub.example ; <<>> DiG 9.9.2-P1 <<>> @172.16.10.37 www.sub.example ; (1 server found) ;; global options: +cmd ;; connection timed out; no servers could be reached また、ルートヒントの書き換えにつきましては、ご指導ありがとうございます。 書き換え後に行った2台目のサーバにつきましても、1台目と同様の結果となりました。 C:\dns\bin>dig www.example ; <<>> DiG 9.9.2-P1 <<>> www.example ;; global options: +cmd ;; connection timed out; no servers could be reached ご指摘のありました、ファイアウォールの設定につきましては、LAN内なので普通は支障なく通るのですが、マシンがWindows2008サーバなので、Windowsファイアウォールに対して、UDPの53番ポートを開けてあります。 Windowsファイアウォールのログを見たところ、同じマシンの中でのDNS問合わせは「ALLOW」で通過するのですが、1台目から2代目、または2代目から1台目に対するDNS問い合わせは、「ALLOW」どころか「DROP」さえ出ていません。 どうやら、ファイアウォール以前に、問合わせしているマシンからDNSパケットが出ていかないか、ネットワーク上にネームサーバを見つけられないようですが、そこで停滞しています。 何かお気づきの点があれば、また教えていただければと思います。よろしくお願いします。

  • maesen
  • ベストアンサー率81% (646/790)
回答No.1

>1台目のマシンからのwww.sub.example(親から子に向かって)の名前解決と、 >;; WARNING: recursion requested but not available 再帰問い合わせが許可されていないようです。 >2台目のマシンからのwww.example(子から親に向かって)の名前解決ができません。 >. 10800 IN SOA a.root-servers.net. nstld.verisign-grs.com. 201 2台目のDNSが管理しているゾーン以外のクエリなのでルートヒントに探しに行っています。 勉強用ということでルートヒントを書き換えるか、 フォワーダなどで管理ゾーン以外を1台目に向けるかでしょうか。

freeradical
質問者

お礼

ご回答ありがとうございました。

freeradical
質問者

補足

一台目について、 recursion yes; にしたところ、 WARNING: recursion requested but not available は出なくなったのですが、 SERVFAILとなりました。 2台目につきましては、 ルートヒントをどのように書き換えたらよいか、 教えていただければ幸いです。 【1台目のマシンでのdigの結果】 C:\dns\bin>dig www.sub.example ; <<>> DiG 9.9.2-P1 <<>> www.sub.example ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 1777 ;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: ;www.sub.example. IN A ;; Query time: 0 msec ;; SERVER: 172.16.11.72#53(172.16.11.72) ;; WHEN: Wed Mar 13 08:42:04 2013 ;; MSG SIZE rcvd: 44 C:\dns\bin>