DNS ルックアップ: ドメイン名の仕組み
· 12分で読めます
目次
DNSとは何か、なぜ重要なのか
ドメインネームシステム(DNS)は、しばしば「インターネットの電話帳」と呼ばれますが、それには十分な理由があります。ウェブサイトを訪問したり、メールを送信したり、インターネットサービスを使用したりするたびに、DNSは舞台裏で人間が読めるドメイン名を機械が読めるIPアドレスに変換しています。
DNSがなければ、ブラウザに単にgoogle.comと入力する代わりに、172.217.14.206のような数字の文字列を記憶する必要があります。この変換サービスは、インターネットの動作にとって非常に基本的なものであり、DNSが失敗すると、ウェブ全体の一部がアクセス不能になります。
DNSは分散データベースシステムとして動作し、世界中の何百万ものサーバーが協力して、毎日何十億ものクエリを解決しています。この分散型アーキテクチャにより、インターネットはスケーラブルで回復力があり、冗長性を維持しながら大量のトラフィック負荷を処理できます。
クイックヒント: DNSはウェブサイトだけのものではありません。メール配信(MXレコード)、サービス検出、負荷分散、さらにはスパム防止にも使用されます。ネットワークシステムを扱う人にとって、DNSの理解は不可欠です。
DNSの仕組み: 完全な解決プロセス
ブラウザにドメイン名を入力すると、ミリ秒単位で複雑な一連のイベントが展開されます。DNS解決と呼ばれるこのプロセスには、必要なIPアドレスを提供するために協力する複数のサーバーとキャッシング層が含まれます。
ステップバイステップのDNS解決
- ブラウザキャッシュチェック: ブラウザはまず、最近解決されたIPアドレスについて独自のキャッシュをチェックします。最新のブラウザは、同じサイトへの繰り返し訪問を高速化するために、短期間(通常60秒から数分)DNSレコードをキャッシュします。
- オペレーティングシステムキャッシュ: ブラウザキャッシュがミスした場合、クエリはオペレーティングシステムのDNSリゾルバキャッシュに移動します。このキャッシュは、ウェブブラウザだけでなく、システム上のすべてのアプリケーションのDNSレコードを保存します。Windowsでは、
ipconfig /displaydnsを使用してこのキャッシュを表示できます。 - ルーターキャッシュ: 多くの家庭やオフィスのルーターも独自のDNSキャッシュを維持しています。これにより、クエリがローカルネットワークを離れる前に、別の速度最適化レイヤーが提供されます。
- ISP DNSリゾルバ: ローカルキャッシュに答えがない場合、クエリはインターネットサービスプロバイダーのDNSリゾルバ(再帰リゾルバとも呼ばれます)に到達します。このサーバーは、デバイスがDHCP経由でネットワークに接続するときに自動的に構成されます。
- ルートネームサーバー: ISPのリゾルバは、13のルートネームサーバーシステムの1つに接続します(実際にはエニーキャストルーティングを使用する数百のサーバー)。これらのサーバーは特定のドメインのIPアドレスを知りませんが、各トップレベルドメイン(TLD)の権威サーバーがどこにあるかを知っています。
- TLDネームサーバー: ルートサーバーは、クエリを適切なTLDネームサーバーに誘導します。たとえば、
.comドメインのクエリは.com TLDサーバーに送られ、.orgクエリは.orgサーバーに送られます。これらのサーバーは、TLD内の各ドメインを処理する権威ネームサーバーに関する情報を維持しています。 - 権威ネームサーバー: 最後に、クエリはドメイン所有者によって構成されたドメインの権威ネームサーバーに到達します。このサーバーには、ドメインをそのIPアドレスやその他の情報にマッピングする実際のDNSレコードが含まれています。
- 応答とキャッシング: IPアドレスはチェーンを通って戻り、各サーバーはレコードのTime To Live(TTL)値に従って結果をキャッシュします。ブラウザはIPアドレスを受信し、ウェブサーバーへの接続を確立できるようになります。
このプロセス全体は通常20〜120ミリ秒で完了しますが、キャッシュされた結果が利用可能な場合ははるかに高速になります。DNSルックアップツールを使用して、さまざまなDNSサーバーがどれだけ速く応答するかをテストできます。
プロのヒント: ドメインの最初のDNSルックアップは、キャッシングのため、その後のルックアップよりも常に遅くなります。これが、ブラウザキャッシュをクリアしても、繰り返し訪問時にウェブサイトが速く感じられる理由です。
再帰的クエリと反復的クエリ
DNSクエリには、再帰的と反復的の2つのタイプがあります。違いを理解することで、DNSサーバーがどのように相互に通信するかを説明するのに役立ちます。
再帰的クエリは、答えを見つける負担をDNSサーバーに課します。コンピュータがISPのリゾルバに再帰的クエリを送信すると、そのサーバーは明確な答えが得られるまでチェーン全体をたどる責任があります。リゾルバはすべての作業を行い、IPアドレスまたはエラーを返します。
反復的クエリは、DNSサーバー間で使用されます。ISPのリゾルバがルートサーバーにクエリを送信すると、最終的な答えではなく、チェーン内の次のサーバーへの参照を受け取ります。リゾルバはそのサーバーにクエリを送信し、別の参照を受け取り、権威ネームサーバーに到達するまで続けます。
DNSレコードタイプの説明
DNSレコードは、ドメインに関する情報を提供する権威ネームサーバーに保存された指示です。異なるレコードタイプは、ドメインをサーバーに向けることからメール認証の検証まで、異なる目的を果たします。
| レコードタイプ | 目的 | 例 |
|---|---|---|
A |
ドメインをIPv4アドレスにマッピング | example.com → 192.0.2.1 |
AAAA |
ドメインをIPv6アドレスにマッピング | example.com → 2001:db8::1 |
CNAME |
別のドメインを指すエイリアスを作成 | www.example.com → example.com |
MX |
ドメインのメールサーバーを指定 | example.com → mail.example.com (優先度 10) |
TXT |
テキスト情報を保存(SPF、DKIM、検証) | "v=spf1 include:_spf.google.com ~all" |
NS |
サブドメインをネームサーバーに委任 | example.com → ns1.example.com |
PTR |
逆引きDNSルックアップ(IPからドメイン) | 192.0.2.1 → example.com |
SRV |
サービスの場所を指定 | _sip._tcp.example.com → sipserver.example.com:5060 |
CAA |
証明書を発行できるCAを指定 | 0 issue "letsencrypt.org" |
AレコードとAAAAレコード: 基礎
Aレコードは最も基本的なDNSレコードタイプで、ドメイン名を直接IPv4アドレスにマッピングします。ウェブサイトを訪問すると、ブラウザは通常、サーバーのIPアドレスを見つけるために最初にAレコードを検索します。
AAAAレコード(「クワッドA」と発音)は、IPv6アドレスに対して同じ目的を果たします。インターネットがIPv6に移行するにつれて、より多くのドメインが両方のプロトコルをサポートするために、AレコードとともにAAAAレコードを追加しています。
CNAMEレコード: ドメインエイリアス
CNAME(正規名)レコードは、他のドメイン名を指すエイリアスを作成します。これらは一般的に、www.example.comをexample.comに向けたり、複数のサブドメインを単一のサーバーに向けたりするために使用されます。
重要な制限が1つあります: CNAMEレコードは、同じ名前で他のレコードタイプと共存できません。つまり、同じドメインにCNAMEとMXレコードを持つことはできません。これが、CNAMEが通常、ルートドメインではなくサブドメインに使用される理由です。
MXレコード: メールルーティング
MX(メール交換)レコードは、ドメインのメールをどこに配信するかをメールサーバーに伝えます。各MXレコードには優先度値が含まれています。数値が小さいほど優先度が高くなります。プライマリメールサーバーが利用できない場合、送信者は優先度値が高いサーバーを試します。
たとえば、Google Workspaceは、1つのサーバーがダウンしていてもメール配信を確実にするために、異なる優先度を持つ複数のMXレコードを使用します。MXルックアップツールを使用して、ドメインのMXレコードを確認できます。
TXTレコード: 検証とセキュリティ
TXTレコードは任意のテキストデータを保存し、メールセキュリティとドメイン検証に不可欠になっています。一般的な用途には次のものがあります:
- SPFレコード: ドメインに代わってメールを送信できるサーバーを指定
- DKIMレコード: メール署名検証用の公開鍵を提供
- DMARCレコード: メール認証失敗の処理ポリシーを定義
- ドメイン検証: Google Search Consoleなどのサービスにドメイン所有権を証明
- サイト検証: さまざまなウェブサービスとプラットフォームの所有権を確認
プロのヒント: TXTレコードには文字列ごとに255文字の制限がありますが、単一のレコード内で複数の文字列を連結できます。長いDKIMキーは、DNS制約内に収まるようにこの技術をよく使用します。
DNSルックアップコマンドとツール
接続の問題をトラブルシューティングしたり、DNS変更を検証したり、ドメイン構成を調査したりする場合、いくつかのコマンドラインツールとオンラインサービスがDNSレコードのクエリに役立ちます。
コマンドラインDNSツール
nslookupは、Windows、macOS、およびほとんどのLinuxディストリビューションに含まれる、最も広く利用可能なDNSルックアップツールです。基本的な使用法は簡単です:
nslookup example.com
nslookup -type=MX example.com
nslookup example.com 8.8.8.8
最初のコマンドは基本的なAレコードルックアップを実行します。2番目のコマンドは特にMXレコードをクエリします。3番目のコマンドは、デフォルトのリゾルバの代わりにGoogleのDNSサーバー(8.8.8.8)を使用してクエリを実行します。
dig(ドメイン情報グローパー)はより強力で、詳細な出力を提供します。これはDNS専門家に好まれるツールで、デフォルトでmacOSとLinuxで利用できます:
dig example.com
dig example.com MX
dig example.com +short
dig @8.8.8.8 example.com
dig example.com +trace
+shortフラグは、答えだけの簡潔な出力を提供します。+traceフラグは、ルートサーバーから権威ネームサーバーまでの完全な解決パスを表示し、トラブルシューティングに非常に役立ちます。
hostは、余分な詳細なしにクリーンな出力を提供する、digのよりシンプルな代替手段です:
host example.com
host -t MX example.com
host -a example.com
オンラインDNSルックアップツール
ウェブベースのDNSツールは、コマンドラインユーティリティに対して、複数の