DNS(Domain Name System)の仕組みと応用
DNSは、人間が理解しやすいドメイン名(例:example.com)を、コンピュータが理解できるIPアドレス(例:192.0.2.1)に変換するためのシステムです。インターネットや組織内のネットワークにおいて、「電話帳」のような役割を果たしています。
1. パブリックDNSとプライベートDNS
DNSには、利用される範囲や目的によって大きく2つの種類があります。
パブリックDNS
インターネット上に公開されており、世界中のドメイン名とグローバルIPアドレスを紐付ける役割を持ちます。
- 用途: 私たちがWebサイトを閲覧したり、メールを送信したりする際に使用します。
- 具体例: Google Public DNS(8.8.8.8)や、プロバイダが提供するDNSなど。
プライベートDNS(ローカルDNS)
社内LANなどの特定のネットワーク内のみで利用されるDNSです。プライベートIPアドレスを解決します。
- 用途: 「fileserver.local」といった社内限定のホスト名を管理するのに適しています。
-
連携機能(転送設定): 自分の管理下にない外部のドメイン(例:https://www.google.com/url?sa=E&source=gmail&q=google.com)
について問い合わせを受けた際、外部のパブリックDNSへ聞きに行くよう設定できます。
2. 問い合わせの仕組み:リゾルバとキャッシュ
DNSの問い合わせには、効率化のための仕組みが備わっています。
再帰的リゾルバ(Recursive Resolver)
ユーザーの代わりに、ルートサーバーから順に「このドメインを知っていますか?」と再帰的に(繰り返し)聞きに回るサーバーのことです。
キャッシュ(Caching)
一度調べたドメインとIPアドレスの対応関係を、一定期間メモリ等に保存しておく仕組みです。
このキャッシュはありとあらゆるところで行われています。ブラウザレベルのキャッシュosレベルのキャッシュのリゾルバレベルのキャッシュがあります。それぞれでTTLというキャッシュする時間を決められます。
またネガティブキャッシュというものも存在します。問い合わせになかったドメイン存在しないドメインもキャッシュし、存在しないよ!とすぐ返答します。便利そうに見えますが、バックエンドが落ちてたなどの理由でドメインがネガティブキャッシュされていた場合。バックエンドを直しても、このネガティブキャッシュをクリアしないと画面が表示されなかったりします。
- メリット: 次に同じドメインの問い合わせが来た際、わざわざ外へ聞きに行かずに即座に回答できるため、レスポンスが高速化されます。
3. DNSラウンドロビン
通常、1つのドメインには1つのIPアドレスが紐付きますが、アクセスが集中するとサーバーがパンクしてしまいます。これを解決する簡易的な手法がDNSラウンドロビンです。
仕組み
1つのドメイン名に対して、複数のIPアドレス(サーバー群)を登録しておきます。DNSサーバーは、問い合わせが来るたびに、登録されたIPアドレスを順番に(A→B→C→A...)回答します。
デメリットと限界
- 負荷状況を無視: 各サーバーがどれくらい忙しいかに関係なく順番に割り振ります。
- 障害に弱い: 登録されているサーバーの1台が故障して停止していても、DNSはそれを検知できず、停止中のサーバーのIPアドレスを回答し続けてしまいます(トラフィックが死んでいるサーバーへ流れる)。
- キャッシュの影響: 端末やプロバイダ側に古いIPアドレスがキャッシュされていると、サーバーを切り替えたくても反映に時間がかかります。
可変な情報の明示的説明
DNS運用において、以下の情報は**可変(状況によって変わるもの)**です。
- IPアドレスの対応付け: サーバーの移設やクラウドの仕様変更により、ドメインに紐づくIPは随時変更可能です。
- TTL(Time To Live): キャッシュを保持する「有効期限」です。これは設定次第で数秒から数日間まで変更でき、情報の反映速度に直結します。
- 転送先の設定: どの外部DNSを参照するかは、ネットワーク管理者がいつでも変更できます。
用語解説
- ドメイン名: google.com などのインターネット上の住所。
- IPアドレス: ネットワーク上の機器を識別する番号。
- フォワーディング(転送設定): 自分が知らない情報を、知っていそうな別のDNSサーバーへ丸投げする設定。
- Aレコード: ドメイン名に対応するIPv4アドレスを定義する設定行。ラウンドロビンの際はこれを複数記述する。
- LB(ロードバランサー): 負荷分散専用の装置。DNSラウンドロビンよりも高度にサーバーの生存確認(ヘルスチェック)や負荷分散を行える。
ソースコード(設定例)
DNSサーバー(例:BIND)でラウンドロビンを設定する際のゾーンファイルのイメージです。同じ名前に対して異なるIPを並べます。
; example.com のゾーン設定例
; 1つのドメイン(www)に対して3つの異なるIPを割り当てている
www IN A 192.168.1.10
www IN A 192.168.1.11
www IN A 192.168.1.12
; TTL(キャッシュ有効期限)の設定例(3600秒 = 1時間)
$TTL 3600