• 締切済み

【初心者】linuxの名前解決について

Ubuntu12にPHP用の開発環境を構築しているのですが、phpMyAdmin(Webブラウザ上でDB操作するツール)のログインページを開くのに1分程待たされてしまい困っています。 TOPコマンドで調べたところCPUやメモリの問題では無さそうなのですが、 以下の記事(↓)のNo4さんの回答のように http://q.hatena.ne.jp/1161056201 arp -a を実行するとしばらく応答が無く、 arp -anを実行したところ、 arp -an ? (192.168.1.1) at <不完全> on eth1 ? (10.0.2.2) at xx:xx:xx:xx:xx:xx [ether] on eth0 ? (192.168.56.1) at xx:xx:xx:xx:xx:xx [ether] on eth1 という結果が来たので、何やら「 (192.168.1.1) at <不完全>」の部分が怪しいようだ、という所までは理解できました。 これを解決するにはどうすれば良いのでしょうか? とりあえずhostsに以下のように追記し、networkを再起動してみましたが、状況は変わりませんでした。 有識者の方いらっしゃいましたら、ご教授よろしくお願いします。 hosts----- 127.0.0.1 localhost 127.0.1.1 fujii-VirtualBox 192.168.1.1 inetgw # The following lines are desirable for IPv6 capable hosts ::1 ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters

みんなの回答

回答No.1

参照先のDNSサーバが、プライベートIP空間の逆引きを適切に処理するように設定できていないことが 根本的な原因だと思います。 正確に言うとちょっと違う部分もあるのですが、 簡単に言えば、参照先として設定しているDNSサーバの設定に問題があり 1.クライアントは、192.168.1.1をDNSサーバに問い合わせ 2.DNSサーバは、ゾーン持っていないので、ルートDNSサーバ、あるいは、fowarder指定先に   問い合わせに聞く 3.最終的にそんな情報は。どこにもないのでタイムアウト(時間が掛かる) 4.二回目からは、キャッシュされて、すぐ返すということはありません。 「情報がないことがキャッシュ」されては、情報が作られても 「情報がない」ことを返してしまうため、情報がないときであっても 二回目以降も問い合わせに行き、タイムアウトになります。 となっているためだと思います。不正アクセス対策的な意味もあります。 DNSサーバは自分が持っていない情報を上位に聞きにいきますので、プライベートIP 空間のゾーンを適切に設定していないと上のようなことが起きます。 例えば、DNSサーバがプライベート空間のゾーンをダミーとして意図的に持たせるなどの 考慮が必要です。 DNS管理が適切でなく、【プライベートIP空間だし、逆引きの登録はなしでいいや」などと 管理者が間違った設定をしてしまうと、DNSサーバは見つからないゾーンを上位に問い合わせ にいくため、かえって時間が掛かってしまうことになります。 根本的には、DNSサーバ側の問題なのですが、クライアント側としての回避方法としては、 DNSより、/etc/hostsのほうを優先させれる方法があります。その際、 /etc/nsswitch.conf の hosts: で優先順位を指定   files と dns の位置を確認してください。 /etc/host.confで「order hosts,bind」とする 等が必要になります。 ただし、これは、/etc/hosts に全ての通信の可能性があるIPを書いておく 必要があるため、一時的な回避策として、DNSサーバ側に対策を考えた方が 良いと思います。 例えば、ホスト自身をDNSキャッシュサーバに設定して、168.192.in-addr.arpa. 等のプライベート空間の逆引きゾーンを空のゾーン(SOAだけのゾーン)として持たせ、 それ以外は、本来のDNSサーバへforwardさせるようにDNSサーバを設定することで、 プライベートIP空間の結果は自身がすぐ返し、それ以外は、本来のDNSサーバに 問い合わせるようにできます。 OSプラットフォームによっては、あらかじめ、DNSサーバの設定に、この設定が されている、あるいは、簡単にゾーン生成できるスクリプトがついていることもあります。

HYSTER
質問者

補足

私の場合、特にDNS関連のインストール・設定は行っていないので、 とりあえず現在の状況を確認してみました。 # cat /etc/resolv.conf nameserver 127.0.0.1 #cat /etc/nsswitch.conf hosts: files mdns4_minimal [NOTFOUND=return] dns mdns4 #cat /etc/host.conf order hosts,bind multi on # ip route show 192.168.1.1 dev eth1 proto static scope link これはDNSよりhostsを優先する設定になっている、という事でしょうか? だとするとhostsで192.168.1.1が逆引き解決できれば良し。という事だと思うので #vim /etc/hosts 192.168.1.1 inetgw を追記して再度arp -aを実行してみました。 #arp -a inetgw (192.168.1.1) at <不完全> on eth1 この結果は、192.168.1.1を逆引きでinetgwだと認識できたが、「<不完全>」と表示される、という状況なのでしょうか? ちなみに、192.168.1.1が何者なのか解っていないのですが、恐らくポケットWi-Fiでは無いかと思っています。 そこで名前は何を付けてよいか解らないので、適当に「inetgw」としています。 尚、こんな記事(http://blog.livedoor.jp/techbiz/archives/503983.html)を見つけたので 試して見ましたがやはり状況は変わりませんでした。 linux超初心者なので、間違った事を書いているかもしれませんが、 ご指摘のほどよろしくお願いします。

関連するQ&A