DNS リゾルバ

プロトコル & 標準
クライアントから DNS クエリを受信し、権限のあるサーバーにクエリを実行して回答を取得するサーバー。
← 用語集に戻る

DNSリゾルバーとは?

DNSリゾルバー(再帰的リゾルバーまたは再帰的DNSサーバーとも呼ばれる)は、クライアントデバイスからDNSクエリを受け取り、ドメイン名のIPアドレスを追跡することで答えを取得するサーバーです。リゾルバーはクライアントとDNS階層の仲介役として機能し、ルート、TLD、および権威nameserverを通じた再帰を処理します。

DNSリゾルバーの仕組み

解決プロセス

ブラウザに「example.com」と入力すると:

1. クライアント → リゾルバー: "example.comのIPアドレスは?"

2. リゾルバーがキャッシュをチェック

→ キャッシュヒット: キャッシュされた結果を返す

→ キャッシュミス: 再帰を開始

3. リゾルバー → ルートサーバー: ".comはどこにある?"

ルート → リゾルバー: "これらの.comのnameserversに聞いてください"

4. リゾルバー → .com TLD: "example.comはどこにある?"

.com → リゾルバー: "これらのnameserversに聞いてください"

5. リゾルバー → 権威NS: "example.comのIPアドレスは?"

権威NS → リゾルバー: "203.0.113.50"

6. リゾルバー → クライアント: "203.0.113.50"

(TTLに基づいて結果もキャッシュ)

再帰的クエリと反復的クエリ

再帰的クエリ(クライアント → リゾルバー):
クライアント: "example.comの最終的な答えを与えてください"

リゾルバー: "ここにIPアドレス: 203.0.113.50"

(リゾルバーがすべての作業を行う)

反復的クエリ(リゾルバー → nameservers):
リゾルバー: "example.comは?"

ルート: "わかりません。.comサーバーに聞いてください"

リゾルバー: "example.comは?"

.com: "わかりません。ns1.example.comに聞いてください"

リゾルバー: "example.comは?"

ns1: "203.0.113.50"

リゾルバーのタイプ

スタブリゾルバー

オペレーティングシステムとアプリケーションに組み込まれています:

: OSのDNSクライアント、アプリケーションDNSライブラリ

再帰的リゾルバー

完全なDNS解決を実行する機能を備えたサーバー:

: ISP DNS、Google(8.8.8.8)、Cloudflare(1.1.1.1)

フォワーディングリゾルバー

再帰を実行する代わりに、別のリゾルバーにクエリを転送します:

クライアント → コーポレートリゾルバー(フォワーディング) → ISPリゾルバー(再帰的) → インターネット

人気のあるパブリックリゾルバー

プロバイダーIPv4IPv6特徴
Cloudflare1.1.1.1, 1.0.0.12606:4700:4700::1111高速、プライバシー重視、ログなし
Google8.8.8.8, 8.8.4.42001:4860:4860::8888信頼できる、グローバルanycast
Quad99.9.9.92620:fe::feセキュリティフィルタリング、脅威ブロック
OpenDNS208.67.222.2222620:119:35::35コンテンツフィルタリング、フィッシング保護

リゾルバーの変更

Windows:
コントロールパネル → ネットワーク → アダプター設定

→ プロパティ → IPv4 → これらのDNSサーバーを使用:

優先: 1.1.1.1

代替: 8.8.8.8

macOS:
システム環境設定 → ネットワーク → 詳細 → DNS

→ 追加: 1.1.1.1, 8.8.8.8

Linux (/etc/resolv.conf):
nameserver 1.1.1.1

nameserver 8.8.8.8

リゾルバー機能

キャッシング

リゾルバーはTTLに基づいてDNS応答をキャッシュします:

最初のクエリ: example.com

→ 完全な再帰(50ms)

→ 300秒間キャッシュされます(TTL)

後続のクエリ: example.com

→ キャッシュヒット(1ms)

→ TTLが有効期限切れになるまで提供

キャッシュ統計: ヒット率は通常80~90%を超えます。

負のキャッシング

リゾルバーは否定応答(NXDOMAIN)もキャッシュします:

クエリ: nonexistent.example.com

応答: NXDOMAIN

キャッシュ: SOA最小TTLに基づく

これは、存在しないドメインの繰り返しクエリを防止します。

クエリの最小化

モダンなリゾルバーは情報開示を最小化します:

従来的:
.comへのクエリ: "www.blog.example.comは?"

→ サブドメイン構造全体を公開

クエリ最小化(RFC 7816):
.comへのクエリ: "example.comは?"

example.com NSへのクエリ: "blog.example.comは?"

blog.example.com NSへのクエリ: "www.blog.example.comは?"

→ 各レベルで必要な情報だけを公開

DNSSEC検証

セキュリティを意識したリゾルバーはDNSSEC署名を検証します:

クエリ: example.com(DNSSECで署名)

→ リゾルバーが署名を検証

→ 有効な場合、AD(正真のデータ)フラグを返す

→ 署名が無効な場合、SERVFAILを返す

リゾルバーセキュリティ機能

HTTPS上のDNS(DoH)

HTTPS上のDNSクエリを暗号化します:

従来のDNS:

クライアント → リゾルバー(UDP 53ポート、平文)

DNS over HTTPS:

クライアント → リゾルバー(TCP 443ポート、暗号化)

プロバイダー: Cloudflare(https://cloudflare-dns.com/dns-query)、Google

TLSでのDNS(DoT)

TLS上のDNSクエリを暗号化します:

クライアント → リゾルバー(TCP 853ポート、暗号化)
利点: ISPはDNSクエリを見たり変更したりできません

マルウェア/フィッシングフィルタリング

一部のリゾルバーは既知の悪意あるドメインをブロックします:

Quad9(9.9.9.9): マルウェア、フィッシングに関連するドメインをブロック Cloudflare for Families: マルウェア(1.1.1.2)またはマルウェア+成人向けコンテンツ(1.1.1.3)をブロック

レート制限

DNS増幅攻撃から保護します:

送信元IPが閾値を超えるクエリを送信する場合:

→ 一時的にレート制限またはブロック

現在のリゾルバーをチェック

Windows:
ipconfig /all | findstr "DNS Servers"
macOS/Linux:
cat /etc/resolv.conf
オンラインツール: browserleaks.com/dnsはブラウザが使用するリゾルバーを表示 テスト解決:
dig example.com

# 出力の「SERVER:」を確認

リゾルバーパフォーマンス

レイテンシーが重要

リゾルバーの応答時間はウェブパフォーマンスに影響を与えます:

リゾルバー平均レイテンシー影響
ローカルISP10~30ms高速だが変動する
Cloudflare10~20ms一貫して高速(anycast)
Google20~40ms信頼できる、グローバル
遅いリゾルバー100~200msページロード遅延に影響

anycastルーティング

主なリゾルバーはanycastを使用します:

1.1.1.1 anycast IP

→ 最も近いCloudflareデータセンターにルーティング

→ ニューヨークのクエリ → ニューヨークデータセンター

→ ロンドンのクエリ → ロンドンデータセンター

→ 結果: グローバル低レイテンシー解決

リゾルバーパフォーマンスの測定

Namebench使用(自動テスト):
# 複数のリゾルバーを実際のクエリパターンでテスト

namebench

手動テスト:
# Cloudflareをテスト

time dig @1.1.1.1 example.com

# Googleをテスト

time dig @8.8.8.8 example.com

# ISP(現在)をテスト

time dig example.com

一般的なリゾルバー問題

DNSポイズニング

攻撃者がリゾルバーキャッシュに偽のレコードを挿入します:

対策:

リゾルバーハイジャック

ISPまたはマルウェアがDNSクエリをリダイレクトします:

症状: 検索結果にISP広告が表示される、予期しないリダイレクト 解決策:

スタイルキャッシュ

リゾルバーが古いレコードをキャッシュしています:

症状: DNS変更が反映されない 解決策:

リゾルバーブロック

一部のネットワークが外部リゾルバーをブロックします:

症状: 8.8.8.8、1.1.1.1に到達できない 解決策:

ローカルリゾルバーの構成

Unboundの使用

# Unboundをインストール(Linux)

sudo apt install unbound

# 基本的な設定(/etc/unbound/unbound.conf)

server:

interface: 127.0.0.1

do-ip4: yes

do-udp: yes

do-tcp: yes

# DNSSECを有効化

auto-trust-anchor-file: "/var/lib/unbound/root.key"

# プライバシー(クエリ最小化)

qname-minimisation: yes

# サービスを開始

sudo systemctl start unbound

sudo systemctl enable unbound

Pi-hole使用

ネットワーク全体の広告ブロック DNS リゾルバー:

# Pi-holeをインストール

curl -sSL https://install.pi-hole.net | bash

# Pi-hole IPをDNSとして使用するようルーターを設定

ベストプラクティス

1. 信頼できるパブリックリゾルバーを使用: 信頼性のためCloudflare、Google、またはQuad9

2. DoH/DoTを有効化: プライバシーとセキュリティのためクエリを暗号化

3. リゾルバー機能を検討: プライバシー、速度、またはセキュリティのニーズに基づいて選択

4. リゾルバーパフォーマンスを監視: 定期的にレイテンシーをテスト

5. バックアップリゾルバーを持つ: 冗長性のためセカンダリDNSを設定

6. DNSSEC検証リゾルバーを使用: キャッシュポイズニングから保護

7. リゾルバーのポリシーを理解: 一部のリゾルバーはコンテンツをフィルタリングするか、クエリをログします

8. 変更後にテスト: DNS解決が正しく機能することを確認

9. リゾルバー選択を文書化: 特定のリゾルバーを選択した理由を記録

10. resolv.confを慎重に更新: 不正な設定はDNS全体を破損

リゾルバー vs 権威nameserver

機能リゾルバー権威NS
役割クライアントクエリに応答実際のDNSレコードを保持
再帰はい、他のサーバーをクエリいいえ、自分のゾーンのみ応答
キャッシングはい、応答をキャッシュいいえ(権威データ)
使用者クライアント、エンドユーザー再帰中のリゾルバー
8.8.8.8、1.1.1.1ns1.example.com

DNSリゾルバーはDNSシステムの主要な部分です。高速で、セキュアで、プライバシーを尊重するリゾルバーを選択することで、ブラウジング体験とオンラインセキュリティに大きな影響を与えます。

この知識を実践する

DomScan の API を使用してドメインの可用性、状態などを確認します。