2022/06/17

DNS

 DNSは世界中のDNSサーバが相互に連携して運用される分散協調型データベースの特徴を持つ。ドメインは階層構造でドメインツリーと呼ばれる。個々のホストはツリー上のリーフにあたる。ドメインごとのDNSサーバが、ドメイン内のホスト名とIPアドレスの対応付けを管理する。個々のDNSサーバが権限をもって管理する範囲(サブドメインの委譲した領域を除く)をゾーンと呼ぶ。

ルートDNSサーバは、「IP Anycast」技術を用いて冗長化されている。つまり、同一のIPアドレスが複数のホストに割り当てられているが、クライアントがやり取りする相手は1台のホストだけとなる。また、インターネット上のダイナミックルーティングプロトコル(BGP)の仕組みにより、クライアントから見てネットワーク的に最も近い1台のホストにだけパケットが到達する。

ドメイン名の書式

ホスト名.ホストが設置されているサイトのドメイン名.SLD.TLD.
ドメイン名は、ドメインツリーのルートからリーフに至るパスを、ピリオド区切りで右から左に記述する。最右端のピリオドはルートを示し、DNSサーバの設定以外では省略するのが一般的。ドメイン名の右から1番目TLD(Top Level Domain)には、gTLD(generic TLD)とccTLD(country code TLD)の2種類がある。また、ホストのドメインツリーを完全に記述したドメイン名をFQDN(Fully Qualified Domain Name=完全修飾ドメイン名)と呼ぶ。

正引きの仕組み

正引きは、ドメイン名からIPアドレスを問い合わせること。
通常のDNS問い合わせはUDPポート53番を使用するが、問い合わせに失敗するとTCPポート53番を使用してリトライする仕様となっている。ファイアウォールを超えてDNS問合せを行うには、UDPとTCPのポート53番を通す必要がある。

名前解決の仕組み(正引き)

クライアントから登録されているDNSサーバへの問合せを再帰的問合せという。クライアント上で動作し、名前解決の問合せを行うプログラムのことをスタブリゾルバ(stub resolver)という。単にリゾルバと呼ぶことが多い。
一方、登録されているDNSサーバからほかのDNSサーバへの問合せを反復的問合せという。スタブリゾルバから再帰的問合せを受けるDNSサーバをフルサービスリゾルバ(full-service resolver)という。
さらに、フルサービスリゾルバから反復的問合せを受けるDNSサーバをコンテンツサーバという。コンテンツサーバは権限に応じて二種類の動作をする。自分が権限を有すればホストのIPアドレスを返す。権限を委譲している場合は、委譲先のDNSサーバのIPアドレスを返す。
フルサービスリゾルバは、名前解決の過程で得た情報をすぐ破棄せずにキャッシュする。キャッシュの有効期間は、ほかのDNSサーバへの問合せを省略する。フルサービスリゾルバのことをキャッシュサーバと呼ぶことが多い。

逆引きの仕組み

逆引きは、IPアドレスからドメイン名を問い合わせること。
基本的な仕組みは正引きと同じだが、ドメインツリーは別もの。
4オクテット目.3オクテット目.2オクテット目.1オクテット目.in-addr.arpa
SLD.TLDは「.in-addr.arpa」であり、第3レベルドメインがIPアドレスの1オクテット目、第4レベルドメインが2オクテット目、第5レベルドメインが3オクテット目に対応する。第5レベルドメインのDNSサーバが、逆引きの情報を管理しており、ホスト名は第4オクテット目に対応する

フォワーダ

外部ドメイン情報を問い合わせる場合、あらかじめ登録された別のDNSサーバに再帰的問合せを実行することができる。再帰的問合せを依頼されたDNSサーバをフォワーダという。フォワーダを指定したDNSサーバは回送用DNSサーバという。

通常のDNSサーバとフォワーダの動作の違い

ブロードバンドルータの多くはフォワーダ機能を備えており、プロバイダのDNSサーバがフォワーダとして設定される。内部のクライアントからは、ルータがDNSサーバとして機能しているように見える。DNSサーバを運用管理する手間が省け、WAN回線のトラフィックを軽減できる利点がある。

ゾーン情報

DNSサーバはゾーンごとにゾーンファイルを設定する。ゾーン情報はレコード単位に以下の書式で記述する。
[名前] [TTL] [クラス] レコード種別 パラメタ

名前 検索対象となっている情報の名前
TTL レコードの有効期間。通常、ゾーン全体のTTLを指定し、個々のレコードのTTLは省略する
クラス 現在、IN(Internetを意味する)が利用されている
レコード種別 SOA、NS、A、CNAME、PTRなど。詳細は下表

レコード
種別
意味
SOA ゾーン全体に関する情報を記載する。ゾーンにつき1レコード存在する。「名前」フィールドにゾーンのドメイン名を登録する。「パラメタ」フィールドには下記内容を登録する
「ドメイン名」 IN SOA 「DNSサーバ名」 「管理者のメールアドレス」(
「シリアル番号(serial)」
「リフレッシュ間隔(refresh)」
「転送再試行時間(retry)」
「レコード有効時間(expire)」
「ネガティブキャッシュ有効時間(TTL)」
)
シリアル番号 ゾーン情報を更新するたびに値を増やす。ゾーン転送時に情報が更新されているかどうかの判断に用いられる
リフレッシュ間隔 ゾーン転送の時間間隔を指定する。単位は秒
転送再試行時間 ゾーン転送に失敗した場合、再試行までの猶予時間を指定する。単位は秒
レコード有効時間 ゾーン転送に失敗した場合、セカンダリネームサーバにおけるレコードの有効時間を指定する。単位は秒
ネガティブキャッシュ有効時間 キャッシュされた否定情報(ドメインが存在しないなど)の有効時間を指定する。単位は秒。BIND8.2以前はゾーンのTTLのデフォルト値と両方の意味を持っていたが、8.2以降のバージョンではゾーンのTTLのデフォルト値を$TTL制御文で指定する
例) @ IN SOA ns.example.co.jp. postmaster. example.co.jp. (
  2022062001  ;Serial
  28800  ;Refresh
  14400  ;Retry
  3600000  ;Expire
  86400  ;Negative Cache TTL
NS ゾーンに対して権威のあるDNSサーバ(プライマリDNSサーバ、セカンダリDNSサーバ)を登録する。「名前」フィールドにドメイン名を登録し、「パラメタ」フィールドにDNSサーバを登録する
例) example.co.jp. IN NS ns.example.co.jp.
A IPv4アドレスの正引きの名前解決で使用される。「名前」フィールドにホスト名を登録し、「パラメタ」フィールドにIPアドレスを登録する
例) www.example.co.jp. IN A 192.0.2.1
PTR 逆引きの名前解決で使用される。「名前」フィールドにIPアドレスを登録し、「パラメタ」フィールドにホスト名を登録する。
逆引き用のドメインとして、IPv4アドレスは「in-addr.arpa」を用い、IPv6アドレスは「ip6.arpa」を用いる
例) 1.2.0.192.in-addr-arpa. IN PTR www.example.co.jp.
CNAME 外部に公開するホスト名(別名)に対応するサーバ名(正式名)を登録する。「名前」フィールドにホスト名(別名)を登録し、「パラメタ」フィールドにサーバ名(正式名)を登録する
例) smtp.example.co.jp. IN CNAME mail01.example.co.jp.
    pop3.example.co.jp. IN CNAME mail01.example.co.jp.
MX ゾーンのメールサーバを登録する。「名前」フィールドにドメイン名を登録し、「第1パラメタ」フィールドメールサーバの優先度、「第2パラメタ」フィールドにメールサーバを登録する。メール転送に失敗したら次に優先順位のメールサーバにメールが送られる仕組みになっている。値が小さいほど優先度が高くなっている
例) example.co.jp. IN MX 10 mail01.example.co.jp.
    example.co.jp. IN MX 20 mail02.example.co.jp.
AAAA IPv6アドレスに正引きの名前解決で使用される。「名前」フィールドにホスト名を登録し、「パラメタ」フィールドにIPアドレスを登録する
例) www.example.co.jp. IN AAAA 2001:db8.1::1

  • レコードの記述には省略記法を用いてもよい
  • レコード内でホスト名をFQDNで指定するときは、末尾に「.」を付加する
  • 末尾の「.」を省略すると相対ドメイン名として解釈される
  • 基点ドメイン名は、ゾーン名または$ORIGIN制御文で定義する
  • 「@」は基点ドメイン名を表す特殊記号として解釈される
  • 各レコードの「名前」フィールドが省略された場合は、直前レコードの「名前」フィールドの値が適用される
  • ゾーンファイルには次に示す制御文でゾーン情報全体に関する設定を記述できる

制御文及び文法 意味
$TTL 有効期間 ゾーンファイルのTTLのデフォルト値を秒単位で指定。レコードの「TTL」フィールドに有効期間が設定されていた場合は、$TTL制御文よりも優先される
$ORIGIN 基点ドメイン名 ゾーンファイルの基点ドメイン名を指定(BINDの場合、named.confのzoneステートメントに記述されたゾーン名よりも、こちらの方が優先される)

0 件のコメント:

コメントを投稿

人気の投稿