treedown’s Report

システム管理者に巻き起こる様々な事象を読者の貴方へ報告するブログです。会社でも家庭でも"システム"に携わるすべての方の共感を目指しています。

※https化しました。その影響でしばらくリンク切れなどがあるかもしれませんが徐々に修正していきます。 リンク切れなどのお気づきの点がございましたらコメントなどでご指摘いただけますと助かります。

移行作業-DNSを勘違いする

本日はDNSに関して失敗談がありますのでご報告します。
前回(移行作業-DNSを移行する - treedown’s Report)でDNSサーバを移行し、DNSのレコードを入力することで名前解決が処理できる状態にまでなりました。

プロバイダのレンタルサーバがサービス終了なので、いままで使っていたプロバイダのDNSをやめて、新規に用意したDNSサービスに切り替えました。
しばらく時間もたってキャッシュの浸透も妥当な期間を経たので、名前解決はこれでできるはず、というところからスタートです。


これまでレンタルサーバ用に参照していたDNSサーバのIPアドレスを新たに用意したDNSサーバのIPに次々書き換えていったところで、一つ不可解な点が発生しました。

名前解決できない?
hoge.co.jpのDNSサーバを切り替えたので、IPアドレスhoge.co.jpのNSレコードにあるDNSサーバのIPアドレスに変更、nslookupしてみると…
hoge.co.jpのゾーン内のホスト(例:www.hoge.co.jpなど)は名前解決できる⇒OK
hoge.co.jp外のゾーンのホスト名(例:www.google.co.jpなど)は名前解決ができない⇒NG

つまり同一ゾーン内の名前解決しかできない状態です。なぜだ?

さっそくDNSサービスのサポート連絡先に電話して聞いてみることにしました。
----------------------------------------------
Q:
DNSサービスで指定されたDNSサーバのIPをTCP/IPDNSサーバ設定値に設定したローカルイントラネットのPCからゾーン外のホストの名前解決ができない(名前解決ができない)のです。
ゾーン内(レコード情報を設定している)レコードの名前解決は出来るのですが、その他のドメインの名前解決は出来ないのです。

A:
弊社のDNSサービスでご提供するDNSサーバは権威サーバであって、キャッシュサーバではないからですね。
キャッシュサーバとしてクライアントからの名前解決要求を処理するDNSサーバはプロバイダ接続サービスで提供されているDNSサーバをご利用いただければ正常に処理されます。

Whoisでのhoge.co.jpの切替は既に完了しているので、どのキャッシュサーバを利用していたとしても、名前解決に支障が出ることはないように見受けられます。
----------------------------------------------
なるほど
従来通りのDNSサーバ指定でよい、ということです。
久々なので少々失敗してしまったようですね。

幸い実環境に影響はないので、設定したテストPCのDNS設定のうちキャッシュサーバを参照していた箇所はすべて元に戻します。
接続プロバイダ提供のキャッシュサーバにDNS指定を変更したら元通り名前は参照できることは確認できました。

そもそも躓いた原因は、DNSには権威サーバとキャッシュサーバの2種類が存在することをすっかり忘れてDNSサービスを同一視していたことです。

DNSサーバにBINDを使っているとこのあたりは同一視しがちなのですが、(昔使っていた)djbdnsなどはこのあたりがはっきりと分かれていてDNSサーバの仕組みを理解するための修行としてはかなりスキルアップ(苦労ともいう)に貢献してくれます。
djbdnsでは権威サーバ(コンテンツサーバともいいます。)とキャッシュサーバは別プロセスで動作するまったくの別プログラムであり、NICすら分離する必要があるほどの徹底ぶりです。
djbdnsでは…
eth0をバインドしてコンテンツサーバを起動したとしたら、キャッシュサーバはeth0が使えない(NICをバインドできないのでプログラムが起動できない)このためeth0:0を新設してプログラムにバインド、キャッシュサーバを起動する、という手順がひつようになるのです。つまりdjbdnsというDNSサーバは論理的に2NICを要し、2IPなければDNSサーバとして稼働できないのです。

話は戻って、各々二種のDNSサーバの各々の役割としては…
権威サーバ(コンテンツサーバ)はインターネットに公開するドメインの名前解決をするDNSサーバで、公開する各サーバの名前情報とIPアドレスの紐づけを管理することで、名前解決リクエストに対して回答を返す機能を提供してくれます。ここの話題ではhoge.co.jpです。
一方のキャッシュサーバは自ネットワーク内のクライアント(PCやイントラのサーバ)に対してインターネット上のホストの名前とIPをキャッシュして自ネットワーク内のクライアントに提供するための機能です。ここの話では私が間違ってPCのTCP/IP設定のDNSサーバ欄に権威サーバのIPを入れてしまったサーバがこのキャッシュサーバです。

通常、PCを使うときに指定する(DHCPで自動化されていることが多いですが)DNSサーバは、キャッシュサーバを指定します。
そいで、コンテンツサーバは自ドメインの範囲内の情報をデータベースとして保有(設定は手動で実施されている)していてその範囲(たとえばhoge.co.jpのホスト名)に対してのリクエストに回答(IPからホスト名を検索、ホスト名からIPを検索)を返します。

なので、権威サーバだけ分割してキャッシュサーバはそのままプロバイダの接続サービスで提供されるキャッシュサーバを使っておけばよい、ということです。
で、肝心のhoge.co.jpの名前解決は権威サーバをしっかりと設定しているので、プロバイダのキャッシュサーバはしっかりhoge.co.jpの名前解決情報をキャッシュしてくれています。
よくみたら接続プロバイダが提供してくれるキャッシュサーバと権威サーバはIPもホスト名も異なっています。
接続プロバイダで権威サーバは無料サービスで、かつレンタルサーバも包括して契約していたものですから、すっかり混同していました。

今回私の過ちはテスト段階で確認取れましたんで大事には至らなかったのですが、もし実際にハマっている方が居られましたらまずは権威サーバとキャッシュサーバを分けて考えることをお勧めします。