DNSとは?仕組みと主要レコードからDNSSEC・DoHまでの最新対策と運用ベストプラクティス

DNSとは

DNS(Domain Name System、ドメインネームシステム)は、インターネット上で人間が扱いやすい文字列(例:www.example.com)をコンピュータが扱うIPアドレス(例:93.184.216.34 / 2606:2800:220:1:248:1893:25c8:1946)に変換するための分散データベースとプロトコル群です。単なる名前解決だけでなく、メール配送(MX)、サービス発見(SRV)、所有証明やセキュリティ(DNSSEC)など多くの用途にも使われています。

DNSの基本的な構成要素

  • ルートゾーン(Root):名前空間の最上位。ルートサーバ群(A〜Mの13の識別子)は世界中にAnycastで展開されています。
  • TLD(トップレベルドメイン):.com、.jp、.org などのゾーン。各TLDには固有の権威サーバがあります。
  • 権威ネームサーバ(Authoritative Nameserver):特定ドメインの正式なDNSレコードを保持し回答するサーバ。
  • リゾルバ(Resolver):クライアントの問い合わせを受け、必要に応じてルート→TLD→権威へと問い合わせを行い最終的な応答を返すソフトウェア。OSに組み込まれたスタブリゾルバは通常ローカルの再帰リゾルバ(ISPや公共DNS)へ問い合わせを転送します。
  • キャッシュ:応答はTTL(Time To Live)付きでキャッシュされ、再利用されることで応答速度を向上させます。

DNS名解決の流れ(簡易版)

例:ブラウザが「www.example.com」を解決するときの基本フロー

  • 1. スタブリゾルバ(OS)がキャッシュを確認。無ければ再帰リゾルバへ問い合わせ。
  • 2. 再帰リゾルバがキャッシュに無ければルートサーバに問い合わせ(www.example.comのTLD情報の参照)を行い、TLDの権威サーバを紹介される。
  • 3. TLDサーバに問い合わせを行い、example.comの権威サーバを紹介される(必要ならGlueレコードも)。
  • 4. 権威サーバに問い合わせ、A/AAAAレコードを取得してクライアントに返す。結果はTTLに従ってキャッシュされる。

主要なDNSレコードの種類

  • A:IPv4アドレスの紐付け。
  • AAAA:IPv6アドレスの紐付け。
  • CNAME:別名(canonical name)。エイリアスを指すが、同じ名前にA/AAAAとCNAMEを混在させてはいけません。
  • MX:メール交換サーバの指定。
  • NS:そのゾーンの権威ネームサーバ。
  • SOA:ゾーンの管理情報(シリアル、リフレッシュ間隔など)。
  • PTR:逆引き(IP→名前)用レコード。
  • TXT:テキスト情報。SPFやDKIMの設置やメタ情報に使われる。
  • SRV:サービス発見。プロトコルとサービス毎のホスト・ポート指定。
  • DNSSEC関連:DNSKEY、RRSIG、DS、NSEC/NSEC3 など(署名や否定応答の証明に使用)。

Glueレコードとその必要性

あるゾーンの権威サーバ名がそのゾーン自身の名前(例:ns1.example.com)である場合、TLD側でそのネームサーバのIPアドレス(Glueレコード)を一緒に提供しないと循環参照が発生して解決できません。これがGlueの役割です。

キャッシュとTTLの影響

DNSのパフォーマンスはキャッシュによって大きく向上します。TTL(秒)はレコードの有効期間で、短くすると変更適用は速いがクエリ数が増え、長くすると負荷低減と応答高速化が期待できます。サービス切替やフェイルオーバーを頻繁に行う場合は適切なTTL設計が重要です。

セキュリティと攻撃

DNSはネットワークの基盤であるため攻撃対象になります。代表例:

  • キャッシュ汚染(Cache Poisoning)/偽装応答:不正な応答をキャッシュさせる攻撃。2008年のKaminsky脆弱性で注目を浴び、ソースポートのランダム化や識別子の強化が広まりました。
  • DNSアンプ/反射型DDoS:小さなクエリで大きな応答を生成させる特性を利用した攻撃。開かれたリゾルバが濫用されます。
  • ゾーン転送の不正利用:権威サーバ間で行われるAXFR/IXFR転送を利用して情報を抜く攻撃(TSIG等で保護すべき)。

これらに対する対策としては、DNSSECの導入、再帰リゾルバのアクセス制限、ゾーン転送の認証(TSIG)、オープンリゾルバの排除、BGP/ネットワークレベルでのフィルタリング(BCP38)などがあります。

DNSSEC(DNS Security Extensions)

DNSSECはDNS応答に暗号署名を付加してなりすましや改竄を検出できるようにする拡張です。主要概念は次の通りです:

  • ゾーンは鍵(DNSKEY)で署名され、応答にRRSIGレコードが添付される。
  • 親ゾーンは子ゾーンのDSレコードを保持しチェーン・オブ・トラストを形成。ルートの信頼アンカーから検証が始まる。
  • 否定応答の証明にはNSECまたはNSEC3が使われる(存在しない名前の正当性を示す)。

DNSSECは改竄防止に有効ですが、導入には鍵管理(KSK/ZSKのローテーション)、署名や検証による処理負荷、破壊的変更時の運用注意点などが伴います。ルートゾーンのDNSSEC署名(Root KSK)は2010年に導入され、以降KSKのロールオーバー等が実施されています。

プライバシーと暗号化:DoT / DoH / DoQ

従来DNSはプレーンテキストUDP/TCP(ポート53)でやり取りされるため、途中で参照ドメインが漏洩する可能性があります。近年は以下のような暗号化技術が広まりました。

  • DoT(DNS over TLS):RFC 7858。TLSでDNSセッションを保護し盗聴を防ぐ(通常ポート853)。
  • DoH(DNS over HTTPS):RFC 8484。HTTPS内でDNSを転送するため、通常のHTTPSトラフィックと区別しにくくなる一方で集中化やポリシー適用の議論を呼んでいます。
  • DoQ(DNS over QUIC):RFC 9250。QUIC上でDNSを運ぶ新しい方式で、低遅延・接続の効率性を狙っています。
  • QNAME最小化:問い合わせ時に不要なラベルを送らないことで、プライバシーを改善する手法(RFC 7816などで提案)。

運用上のベストプラクティス

  • 再帰リゾルバはアクセス制限をかけてオープンリゾルバにしない。
  • DNSSECを検討し、鍵ローテーションや検証の監視を行う。
  • ゾーン転送は信頼できるIPに限定し、TSIG(RFC 2845)などで保護する。
  • TTL設計を目的別に最適化(頻繁な更新があるレコードは短め、安定したものは長め)。
  • Anycastで権威サーバ/再帰サーバを分散し可用性を向上させる。
  • EDNS(0)(RFC 6891)への対応やUDPレスポンスサイズの考慮。大きな応答はTCPにフォールバックする(RFC 7766)。
  • DoT/DoHなど暗号化手段の導入と、導入による監視・ログポリシーの再設計。
  • ログと監視で異常クエリやトラフィック増加を早期検知する。

よく出る用語(簡易用語集)

  • 再帰(Recursive):リゾルバが最終回答まで責任を持って問い合わせを代行すること。
  • 反復(Iterative):ネームサーバが次に問い合わせるべきサーバの情報(Referral)を返す動作。
  • Glue:親ゾーンが子ゾーンのネームサーバIPを持つ補助的なレコード。
  • TSIG:DNSトランザクションの認証に使う共有鍵ベースの署名。

まとめ

DNSはインターネットの「電話帳」として単純な名前解決以上の役割を持ちます。可用性、性能、セキュリティ、プライバシーのバランスを取りながら運用することが重要です。近年はDNSSECやDoH/DoT、QNAME最小化といった技術で改竄対策や通信の秘匿が進んでいますが、導入には運用上の設計と監視が不可欠です。運用者は基本(正しいTTL設計、ゾーン転送制限、オープンリゾルバ防止)を押さえつつ、新技術のメリットとトレードオフを理解して採用判断する必要があります。

参考文献