DNSの仕組み
- 「Domain Name System」の略で、ドメイン名をIPアドレスに変換します。
- 基本的にUDPで通信をする。
- ただ、UDPにはパケットサイズの上限があるため大きいサイズになる場合は「TCP」での通信に切り替わる。
- クライアントだけでなく、サーバーにも名前解決に用いるDNSサーバーが設定されている。
DNSの構成要素
- ネームサーバー
- フルリゾルバ
- スタブリゾルバ
ネームサーバー
- ドメイン名とIPアドレスが紐づいて登録されているサーバー
- ドメインの階層ごとにネームサーバーが配置されて、階層ごとにドメイン情報を管理します。
フルリゾルバ
ドメインに紐づくIPアドレスを聞いた際に、様々なネームサーバーに問い合わせてIPアドレスを教えてくれるサーバーです。
スタブリゾルバ
- 一般的なOSに組み込まれたDNSクライアント実装です。
- ネームサーバかフルリゾルバのどちらかに問い合わせることが可能です。
- 反復問い合わせの機能を持たないため常に再帰問い合わせになります。
- フルリゾルバに問い合わせた場合は普通に反復問い合わせしてくれて結果を返してくれます。
- ネームサーバに問い合わせた場合は、ネームサーバーは反復問い合わせ機能を持たないため既に有している情報のみ返してくれます。
名前解決
フルリゾルバが各ネームサーバーとやり取りする流れとしては詳しくは下記のようなイメージになります。この一連の流れを名前解決と呼びます。また、各ネームサーバーが管理する階層のことをゾーンと呼びます。
問い合わせた内容はキャッシュする。
一度問い合わせた内容をもう一度問い合わせるのは無駄なコストになるのでフルリゾルバは一度問い合わせた内容はしばらくはキャッシュします。
リソースレコード
DNSが管理している様々な情報のことです。IPアドレスとドメイン名意外にも様々な情報を管理しています。
リソースレコードのタイプ | 説明 |
---|---|
Aレコード | ドメインに紐づくIPアドレス |
NSレコード | ドメインのゾーンを管理するネームサーバーとの紐付け |
MXレコード | ドメインに紐づくメール受信サーバー |
CNAME | ドメインの別名でリソースレコードの参照先、CNAMEの元の名前に対してAレコードを設定することはできません。別名に対してAレコードを設定しましょう。 |
SOA | ドメインのゾーン管理情報 |
DNSラウンドロビン
同じホスト名に対して複数のAレコードを定義することです。複数のコンピュータにアクセスを振り分けることができます。
1 2 3 |
www IN A IPアドレス1 www IN A IPアドレス2 www IN A IPアドレス3 |
DNSラウンドロビンの問題点
DNSの機能では死活監視ができません。なので、あるWebサーバがダウンしていたとしてもそのままアクセス分配をし続けてしまうため可用性対策としては微妙です。
nslookupコマンドについて
どのようなDNSサーバーで名前解決がされているかを確認できます。
digコマンド
ドメインに紐づくIPアドレスやIPアドレスに紐づくドメインを調べたい時に使えます。
1 |
dig ドメイン名 NS +short |
オプション
NS
ネームサーバーを調べたい場合に使えます。
+short
digコマンドは様々な情報が表示されるのでシンプルな情報が知りたい場合はこのオプションを付けます。
DNSの設定
スタブリゾルバの設定
スタブリゾルバは各OSにデフォルトで備わっているDNSクライアント機能です。複数のDNSサーバーに対してドメイン毎に振り分けたり、同時に利用する機能は有していないです。
linux/macの場合(libresolv)
1 |
/etc/resolv.conf |
下記のような設定になっています。
1 2 3 |
search example.com nameserver 8.8.8.8 nameserver 9.9.9.9 |
nameserverを複数しているのは障害時のフォールバックの時のためです。上から優先して問い合わせます。
windowsの場合(Windows DNS Client)
ネットワークインターフェイス
スタブリゾルバを複数のDNSサーバーにアクセスを振り分けたい場合
フォワーダーを使います。受け取った問い合わせをルールに基づいて振り分けてくれます。フォワーダーから出るリクエストは常に再帰問い合わせが飛ぶことになります。
この記事へのコメントはありません。