DNS(ゾーンとレコード)

 各ノードでは、自分のドメインに関する名前解決の情報であるDNSゾーンと呼ばれるデータを管理しています。

 ゾーンに含まれるデータの単位を「レコード」と呼び下表のような種類があります。レコードは、ホスト名とIPアドレスの対応だけの情報だけでなく、ホスト名のエイリアス(別名)など様々な情報を扱います。

ゾーン情報は下のように指定します。

ゾーン情報
$TTL  86400
@    IN    SOA    dns.company.co.jp.  postmaster.company.co.jp.  (
     20091218001   ;  Serial
     10800         ;  Refresh
     3600          ;  Retry
     604800        ;  Expire
     3600 )        ;  Negative cache TTL
             IN    NS         dns.company.co.jp.
             IN    NS         dns2.company.co.jp.
             IN    MX   10    dns.company.co.jp.
             IN    MX   20    mail.company.co.jp.
localhost    IN    A          127.0.0.1
dns          IN    A          192.168.1.1
dns2         IN    A          192.168.1.2
mail         IN    A          192.168.1.3
sv01         IN    CNAME      dns
sv02         IN    CNAME      dns2
sv03         IN    CNAME      mail
レコード種別

レコードの種別は以下の通りです。

レコード種別定義例 / 意味
SOA例)
@ IN SOA dns.company.co.jp. postmaster.company.co.jp. (
20091218001 ; Serial
10800 ; Refresh
3600 ; Retry
604800 ; Expire
3600 ) ; Negative cache TTL

●@
ORIGINと全く同じドメイン名は「@」で記載する。
ORIGINの値は$ORIGINで始まる行で指定する。$ORIGINを明示的に設定していない場合は「 named.conf」 で設定されたゾーン名が使われる。

●MNAME(dns.company.co.jp.)
ドメインを管理するDNSサーバ名を表します。

●RNAME(postmaster.company.co.jp.)
ドメイン管理者のメールアドレス
ドメイン管理者の電子メールアドレスを表します。電子メールは「@」の代わりに「.」を表現します。

●SERIAL(シリアル番号)
ゾーンファイルのバージョンを表す数字。この数字が大きいほど新しいバージョンであることを意味します。通常、YYYYMMDDnn という10けたの数字で表現します。

●REFRESH(更新間隔)
ゾーン情報をリフレッシュするまでの時間を秒で指定する。

●RETRY(転送再試行時間)
REFRESHでゾーン情報の更新ができなかった場合に、再試行を試みる周期を秒で指定する。

●EXPIRE(レコード有効時間)
ゾーン情報のリフレッシュができない状態が続いた場合のゾーン情報の有効時間を秒で指定する。

●MINIMUM(Negative cache TTL)(キャッシュ有効時間)
存在しない情報をキャッシュする有効時間を秒で指定する。
NS例)(ドメイン名) IN NS dns.example.com.

ドメインのDNSサーバ名を指定する。ドメイン名が空白である場合には、直前のレコードの名前が適用される。上の例では直前のレコードのSOAレコード。
A例)www IN A 192.168.1.10

ホストのIPアドレス
PTR例)192.168.1.10 IN PTR www.company.co.jp.

IPアドレスに対するホスト名
CNAME例)www IN CNAME www1.company.co.jp.

ホスト名のエイリアス(別名)
MX例)(ドメイン名) IN MX 10 mail.company.com.
ドメインのメールサーバ名
HINFO例)www IN HINFO HP DL320 G6 Linux

ホストの情報。ホストのハードウェア、OS情報などをを記述する。
WKS例)www IN WKS tcp http ftp smtp

ホストで実行されているサービス情報を記述する。
TXT例)www IN TXT "This is company server"

ホストへのテキスト情報を記述する。
レコード種別

 ゾーンは省略して記述することができます。省略ルールの基本は、「明示的に記述しない場合は直前の記述内容が設定される」 ということです。

省略のルールに則ってゾーンを記述することで簡潔にゾーンを定義することができます。

DNS探索の仕組み(正引き)

DNSを使って、ドメイン名からIPアドレスを引くことを正引きといいます。

「DNSのドメインツリー」で説明したように、DNSの名前解決は、ドメインツリーに沿って行われます。

 例えば「www.sales.company.co.jp」というホスト名からIPアドレスを求めるには、トップレベルドメイン(TLD:Top Level Domain)の上位に存在するルートネームサーバから問い合わせを行います。

 「jp」の上には一見、何もなさそうに思えますが、実際には更に上に階層があり、「ルート」や「.(ドット)」で表現されるルートドメインが存在します。

問合せの流れは、下のようになります。

 「ルートネームサーバ」→「jpドメインのDNSサーバ」→「co.jpドメインのDNSサーバ」→「company.co.jpドメインのDNSサーバ」→「sales.company.co.jpサブドメインのDNSサーバ」

 このようにルートネームサーバから必要とするレコードまで下位の層にたどることで、目的のレコードまでたどり着けるようになっています。

DNS探索(リゾルバとリカーシブ)

 「DNSの逆引き」とは、DNSを使ってIPアドレスからドメイン名を求める行為を指します。「DNSの正引き」のドメイン名からIPアドレスを求める行為は必要性を感じると思いますが、「DNSの逆引き」の必要性に疑問を持つかもしれません。

 逆引きは、サーバなどのログ解析などで役に立ちます。ログにアクセス元のIPアドレスしか分からなかったらどうでしょうか?

 IPアドレスだけでは、単なる数字の羅列で、どのコンピュータからアクセスしてきたのか、どのサイトからアクセスしてきたのかを分析する際に便利が悪いです。

 どのサイトからアクセスしてきたのか、どのサーバやクライアントからアクセスしてきたのかが分かれば、分析やトラブルシューティングを行う時にスムーズに行うことができます。

 また、「traceroute」コマンドなどでも逆引きが可能なドメイン名が表示されます。ドメイン名が表示されるとデバッグをする際にも便利です。

 「DNSの逆引き」は、DNSの逆引きを行って認証を行ったり、迷惑メールのブロックにも活用されています。このようにDNSの逆引きも正引きと同様に重要な仕組みと言えます。

このように、DNSでは、ドメイン名からIPアドレスを求めることも、また、その逆も行えるようになっています。

 IPアドレスは、「192.168.1.10」のように、1オクテットごとに「.」(ピリオド)で区切って表現します。そこで、「DNSの逆引き」では、1オクテットごとにDNSにおける1つのサブドメイン名を対応させています。

 IPアドレスとは反対の順番に並べた「10.1.168.192」に逆引きのゾーンを表すサブドメイン名の「in-addr.arpa」を付けて「10.1.168.192.in-addr.arpa」と表記するようになっています。

下の図は、DNSの正引きと逆引きの探索の流れを図にしています。

 このように逆引きは、表記を見ると反対に並んでいるように見えますが、DNSツリー的には上から順番にたどることで、正引きと同様に名前解決することができます。

正引きの場合は、Aレコードを探索しましたが、逆引きの場合は、PTRレコードを検索します。