DNSサーバーの記事一覧

DNSサーバーの種類(キャッシュサーバーとコンテンツサーバー)

DNSサーバーには、大きく分けてキャッシュサーバーとコンテンツサーバーの2つの種類があります。

種類 説明
キャッシュサーバー DNSクライアント(リゾルバ)から送られる再帰(Recursive)問い合わせを受け、名前解決が完了するまで、それぞれの名前について他のDNSサーバーに反復(Iterative)問い合わせを行なう。その結果をDNSクライアントに返答する。また、その結果をキャッシュする。
コンテンツサーバー ドメイン名とIPアドレスの対応表を「ゾーン」という単位で管理し、自分が管理しているゾーンに対する問い合わせだけに回答する。

ここで、DNSの名前解決方法には「再帰問い合わせ」と「反復問い合わせ」の2種類があったことを思い出してください。(詳細は「DNSの仕組み」参照。)

再帰問い合わせ リゾルバからの問い合わせを受けたDNSサーバが、他のDNSサーバに問い合わせを行いその最終的な結果をリゾルバに応答する問い合わせのこと。
反復問い合わせ リゾルバから再帰問い合わせを受けたDNSサーバーが、再帰問い合わせの結果を返すために、答えを得られるまで繰り返し他のDNSサーバへ行う問い合わせのこと。

前述のとおり、再帰問い合わせを受けて、他のDNSサーバーに反復問い合わせを行なうのがキャッシュサーバーです。例えば、下図に出てくる「社内DNSサーバー」はキャッシュサーバーになり、「ルートDNSサーバー」「.comのDNSサーバー」「example.comのDNSサーバー」はコンテンツサーバーになります。
DNSの名前解決方法

DNSフォワーダ

前回までの記事で構築してきたDNSサーバーは自身が管理する「webtest01.com.」というゾーンに対する問い合わせには回答しますが、それ以外の問い合わせについては自信は管理していないので応えられません。そこで反復問い合わせを行い答えを見つけようとしていたかどうかと言えば、していません。

ただ、「webtest01.com.」以外のドメインに対する名前解決も出来ていました。では、なぜ名前解決を行えたのでしょうか。それはフォワーダ機能を使用していたからです。

named.confのoptionsステートメントで「forwarders」を指定したことを思い出してください。

# cat /etc/named.conf
options {
    directory    "/var/named";
    dump-file    "/var/named/data/cache_dump.db";
    statistics-file "/var/named/data/named_stats.txt";
    memstatistics-file "/var/named/data/named_mem_stats.txt";
    allow-query     { 127.0.0.1;
                      172.16.0.0/24;
     };
    forwarders{
            172.16.0.254;
    };

};
  ~ 省略 ~

フォワーダ機能を使用すると、自身のDNSで解決できない問い合わせをフォワーダに指定したDNSサーバーに転送することができます。上記の設定では自身が解決できない問い合わせを受けた場合、IPアドレス「172.16.0.254」に問い合わせを転送することになります。そして、転送された側で、最終的に反復問い合わせを行い、答えを返してくれます。当方の環境ではまずルータに転送され、さらにプロバイダのDNSサーバー(キャッシュサーバー)に転送されます。

DNSサーバーで取得したDNS問い合わせに対するパケットキャプチャーを見てみましょう。下記は、「172.16.0.2」のPCから当サイトのFQDNである「cos.linux-dvr.biz」に対する名前解決を行った際のパケットキャプチャーです。
DNSフォワーダパケットキャプチャ

PC(172.16.0.2)からの名前解決要求を、DNSサーバー(172.16.0.10)はルータ(172.16.0.254)へ転送し、ルータからDNSサーバーに結果が返され、DNSサーバーはその結果をPCへ返している様子が見て取れます。

キャッシュサーバーとしての設定

では、今回構築したDNSサーバーをキャッシュサーバーとして動作させるための設定を行なってみます。そのためにはnamed.confを編集します。

# vi /etc/named.conf
options {
        directory       "/var/named";
        dump-file       "/var/named/data/cache_dump.db";
        statistics-file "/var/named/data/named_stats.txt";
        memstatistics-file "/var/named/data/named_mem_stats.txt";
        allow-query     { 127.0.0.1;
                          172.16.0.0/24;
        };
        recursion yes;
        allow-recursion{
                127.0.0.1;
                172.16.0.0/24;
        };
//        forwarders{
//                172.16.0.254;
//        };

};

キャッシュサーバーとして動作させるためには、再帰問い合わせを許可してやる必要があります。

設定項目 概要
recursion 再帰問い合わせ(リカージョン)の可否を指定。
allow-recursion 再帰問い合わせを許可するホストもしくはネットワークを指定。
forwarders 自身で解決できない問い合わせを転送するフォワーダーを指定。

「recursion」をyesにして再帰問い合わせを許可します。これにより、再帰問い合わせを受けたら、その結果を返すために、反復問い合わせを行うようになります。また、「forwarders」の指定は不要となるので、コメントアウトします。

編集が完了したら、BINDを再起動させ、設定を反映させます。

# service named restart

これで設定は完了です。では、この設定で取得したDNS問い合わせに対するパケットキャプチャーを見てみましょう。下記は、「172.16.0.2」のPCから当サイトのFQDNである「cos.linux-dvr.biz」に対する名前解決を行った際のパケットキャプチャーです。
DNS反復問い合わせパケットキャプチャ

PC(172.16.0.2)からの名前解決要求を受けたDNSサーバー(172.16.0.10)は、まず「198.41.0.4」に対して問い合わせを行っていることが確認できます。「198.41.0.4」が何者かというと、その正体はルートDNSサーバーです。ルートDNSサーバーから回答を得たあと、再度別のDNSサーバーに対して要求を出し、その回答を得たらまた別のDNSサーバーに要求を出す、という動作を繰り返していることが確認できます。そして、最後にDNSサーバー(172.16.0.10)からPC(172.16.0.2)へ回答しています。

注意点

今回はサンプルのため個人で構築したDNSサーバーをキャッシュサーバーとして動作させましたが、実はこの行為、よくありません。

個人や中小企業などが家庭LAN、社内LAN用に構築したDNSサーバーの場合、プロバイダーのDNSサーバーをフォワーダとして指定することが推奨されます。その主な理由は、DNS問い合わせトラフィックを減少させるためです。

反復問い合わせを行う場合、まず、ルートDNSサーバーに問い合わせが行きます。それはつまり、ルートDNSサーバーは世界中からものすごい数のリクエストが届いているということです。

ただ、DNSサーバー(キャッシュサーバー)は一度得た回答をキャッシュしておくことができます。プロバイダのDNSサーバーはある程度まとまった数のリクエストを受けるため、反復問い合わせをしなくてもキャッシュしてある結果を返すことができます。

例えば、YahooやGoogleといった大手サイトは必ず誰かが見ています。2番目以降に問い合わせてきたクライアントに対しては全てキャッシュした結果を返してやればいいため、トラフィックが大幅に減少します。実際、通常のDNS問い合わせとその回答はほとんどがキャッシュサーバーからの回答です。

さらに、キャッシュサーバーとした場合、セキュリティの面でも好ましくありません。再帰問い合わせを許可した場合、やりようによっては悪意を持ったユーザーがでたらめなキャッシュを勝手に登録できてしまいます。それはつまり、様々な悪用ができてしまうということが容易に想像できると思います。ですので、キャッシュサーバーとして動作させる場合は、きちんとセキュリティ対策がされている必要があるということです。

2016年01月09日(土)|BIND DNSサーバー構築

DNSサーバー動作確認(digコマンド)

前回までの記事でDNSサーバーとして設定はひととおり完了しました。今回はDNSサーバーが正しく動作しているかどうかを確認する方法について見ていきます。

digコマンド

DNSサーバーの動作を確認するためにはdigコマンドを使用します。digコマンドはDNSサーバーに対して様々な要求を出すことが出来ます。また、digコマンドが表示する結果はこれまでに設定してきたゾーンファイルと同じフォーマットとなるため、正しく設定できているかどうかの確認がしやすいことが特徴です。

DNSサーバーの動作確認で使用するコマンドとしてnslookupコマンドがあります。Windowsでも同名のコマンドがあるため、nslookupコマンドの方が認知度は高いと思いますが、LinuxでDNSサーバーのトラブルシューティングを行う際にはdigコマンドを使うことが推奨されます。

nslookupコマンドは応答を加工して表示したり、実際に行いたい問い合わせ以外の問い合わせも行うので、場合によっては意図しない結果に見えることがあるなど、トラブルシューティングには向かない部分があるからです。

ホスト名からIPアドレスを確認する

では、早速digコマンドを使用してホスト名からIPアドレスを検索してみましょう。オプションなしで使用するとAレコードを検索します。

# dig pc01.webtest01.com

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.17.rc1.el6_4.6 <<>> pc01.webtest01.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 58998
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1

;; QUESTION SECTION:
;pc01.webtest01.com.            IN      A

;; ANSWER SECTION:
pc01.webtest01.com.     86400   IN      A       172.16.0.1

;; AUTHORITY SECTION:
webtest01.com.          86400   IN      NS      ns.webtest01.com.

;; ADDITIONAL SECTION:
ns.webtest01.com.       86400   IN      A       172.16.0.10

;; Query time: 2 msec
;; SERVER: 172.16.0.10#53(172.16.0.10)
;; WHEN: Sat Jan  2 01:18:24 2016
;; MSG SIZE  rcvd: 85

「ANSWER SECTION」を確認すると、「pc01.webtest01.com.」に対応するIPアドレスが「172.16.0.1」であることが確認できます。

digコマンドの出力では応答メッセージのヘッダ情報から、各セクションの応答内容がしっかりと分かれて表示されているのが分かります。また、「Query time」欄には問い合わせにかかった時間も表示されます。

IPアドレスからホスト名を確認する

続いて、IPアドレスからホスト名を検索します。-xオプションをつけるとPTRレコードを検索します。

# dig -x 172.16.0.1

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.17.rc1.el6_4.6 <<>> -x 172.16.0.1
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 9642
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1

;; QUESTION SECTION:
;1.0.16.172.in-addr.arpa.       IN      PTR

;; ANSWER SECTION:
1.0.16.172.in-addr.arpa. 86400  IN      PTR     pc01.webtest01.com.

;; AUTHORITY SECTION:
0.16.172.in-addr.arpa.  86400   IN      NS      ns.webtest01.com.

;; ADDITIONAL SECTION:
ns.webtest01.com.       86400   IN      A       172.16.0.10

;; Query time: 0 msec
;; SERVER: 172.16.0.10#53(172.16.0.10)
;; WHEN: Sat Jan  2 01:35:53 2016
;; MSG SIZE  rcvd: 106

「ANSWER SECTION」を確認すると、IPアドレス「172.16.0.1」に対応するホスト名が「pc01.webtest01.com.」であることが確認できます。

外部との接続を確認する

自身が管理するゾーン以外のホスト名に対しても名前解決ができるかどうか確認します。

# dig www.google.co.jp

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.17.rc1.el6_4.6 <<>> www.google.co.jp.
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 16288
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 4, ADDITIONAL: 4

;; QUESTION SECTION:
;www.google.co.jp.              IN      A

;; ANSWER SECTION:
www.google.co.jp.       300     IN      A       216.58.196.227

;; AUTHORITY SECTION:
google.co.jp.           86400   IN      NS      ns2.google.com.
google.co.jp.           86400   IN      NS      ns4.google.com.
google.co.jp.           86400   IN      NS      ns1.google.com.
google.co.jp.           86400   IN      NS      ns3.google.com.

;; ADDITIONAL SECTION:
ns4.google.com.         172130  IN      A       216.239.38.10
ns2.google.com.         172130  IN      A       216.239.34.10
ns1.google.com.         172130  IN      A       216.239.32.10
ns3.google.com.         172130  IN      A       216.239.36.10

;; Query time: 56 msec
;; SERVER: 172.16.0.10#53(172.16.0.10)
;; WHEN: Sat Jan  2 01:38:35 2016
;; MSG SIZE  rcvd: 196

無事に名前解決できていることが確認できます。

2016年01月08日(金)|BIND DNSサーバー構築

サイト内検索

カテゴリー

  • Apache2.2構築
  • BIND DNSサーバー構築
  • Linux基礎知識
  • NTPサーバー構築
  • vsftpd FTPサーバー構築

サイト情報

  • 当サイトについて
  • 免責
  • お問い合わせフォーム
  1. CentOSサーバー構築入門
  2. DNSサーバーの記事一覧

CentOSサーバー構築入門

CentOSによるサーバー構築方法をわかりやすく解説しています。
  • 特定商取引法に基づく表示
  • 運営者情報
  • お問い合わせ
  • サイトマップ
  • twitter
  • facebook
  • Google +1
  • RSS
Copyright ©2025 CentOSサーバー構築入門 All Rights Reserved.

[↑]このページの先頭へ