DNS

EDNS(Extension Mechanisms for DNS) いーでぃーえぬえす

DNS拡張OPTレコードDNSSECUDPメッセージサイズ名前解決
EDNSについて教えて

簡単に言うとこんな感じ!

DNSって昔ながらの「小さな封筒」しか使えなかったんだけど、EDNSはその封筒を「大きな封筒」に切り替えられる仕組みだよ!セキュリティ機能(DNSSEC)や新機能を追加するための「DNS拡張パック」みたいなものなんだ!


EDNSとは

EDNS(Extension Mechanisms for DNS)とは、1999年に策定されたDNSの拡張仕様です。もともとのDNSプロトコルは1980年代に設計されており、UDPで運べるメッセージサイズが最大512バイトに制限されていました。しかしインターネットの発展とともに、DNSSECのような大きなデータを扱う機能が求められるようになり、この制限が大きな壁になっていました。

EDNSはDNSメッセージにOPTという特殊なリソースレコードを追加することで、既存のプロトコルとの互換性を保ちながら、メッセージサイズの拡張やオプション機能の追加を実現しています。現在のDNSインフラのほぼすべてがEDNSに対応しており、DNSSECの動作にも必須の基盤技術です。

ビジネスの現場では意識する機会は少ないかもしれませんが、社内DNSサーバーの設定やDNSSEC導入時のトラブルシューティングで「EDNS対応かどうか」が問われることがあります。外部ベンダーとの発注・選定時に「DNSSECに対応していますか?」と聞く際には、その裏側にEDNSが存在していると理解しておくと良いでしょう。


EDNSの仕組みと構造

EDNSの核心は、DNSメッセージのAdditional Sectionに追加されるOPTレコードです。このレコードは通常のDNSレコードとは異なる特殊な役割を持っています。

項目従来のDNSEDNS(EDNS0)
UDPメッセージ最大サイズ512バイト最大65,535バイト(ネゴシエーション可)
拡張フラグなしあり(DO bitなど)
オプション機能の追加不可OPTレコードで追加可能
DNSSECサポート非対応対応(DO bitで通知)
バージョン管理なしバージョン番号(現在は0)

OPTレコードの構造

OPTレコードはDNSメッセージ内で以下のような役割を担います。

DNS メッセージ (EDNS付き)
┌─────────────────────────────┐
│ Header Section              │
│  (QR, OPCODE, RCODE など)   │
├─────────────────────────────┤
│ Question Section            │
│  (クエリする名前・タイプ)    │
├─────────────────────────────┤
│ Answer Section              │
│  (回答レコード)              │
├─────────────────────────────┤
│ Additional Section          │
│  ┌───────────────────────┐  │
│  │ OPT レコード (EDNS)   │  │
│  │  ・UDP Payload Size   │  │
│  │  ・Extended RCODE     │  │
│  │  ・EDNS Version (=0)  │  │
│  │  ・DO bit (DNSSEC OK) │  │
│  │  ・Options...         │  │
│  └───────────────────────┘  │
└─────────────────────────────┘

DO bit(DNSSEC OK bit)とは

OPTレコードのフラグの中でも特に重要なのがDO bitです。クライアントがDNSクエリにDO bit=1をセットして送ることで、「私はDNSSECの署名レコード(RRSIGやDNSKEYなど)も受け取れますよ」とサーバーに伝えます。これがないとサーバーはDNSSEC関連のレコードを返しません。


歴史と背景

  • 1987年 — DNS仕様(RFC 1035)策定。UDPパケットは512バイト制限が明記される
  • 1990年代後半 — インターネットの爆発的普及。DNSの応答に含めたいデータが増え始め、512バイトでは収まらないケースが増加
  • 1999年RFC 2671としてEDNS0が標準化。OPTレコードの導入によりUDPサイズ拡張が可能に
  • 2005年DNSSECの標準化(RFC 4033〜4035)が進む。EDNSのDO bitが必須要素として活用される
  • 2013年 — RFC 2671がRFC 6891に更新・置き換え。仕様がより明確化される
  • 2016年 — DNS Flag Day活動開始。古いDNS実装のEDNS非対応が業界全体の問題として認識される
  • 2019年DNS Flag Day 2019実施。主要なDNSソフトウェア・サービスがEDNS非対応サーバーへのフォールバックを廃止

従来DNSとEDNSの関係・対応図

EDNSは「既存DNSの上に乗る拡張レイヤー」というイメージで理解するとわかりやすいです。

従来の DNS (RFC 1035) DNS ヘッダー QR / OPCODE / RCODE Question Section 名前 / タイプ / クラス Answer Section RR (A / AAAA / MX ...) Additional Section 補足レコード UDPサイズ上限: 512バイト 拡張オプション: なし EDNS 対応 DNS (RFC 6891) DNS ヘッダー QR / OPCODE / RCODE (拡張) Question Section 名前 / タイプ / クラス Answer Section RR + DNSSEC レコード Additional Section 補足レコード + OPTレコード ★ UDPサイズ: 最大65535バイト DO bit / 拡張オプション: あり 拡張 互換性○

EDNSはまったく新しいプロトコルではなく、既存DNSのAdditional SectionにひっそりとOPTレコードを追加するだけという巧みな設計になっています。EDNS非対応の古いサーバーはOPTレコードを無視してそのまま動作できるため、後方互換性を保ちながら段階的に普及できました。


関連する規格・RFC

規格・RFC番号内容
RFC 1035DNS仕様の基礎。512バイト制限の出発点
RFC 2671EDNS0の初版(1999年)。現在はRFC 6891に置き換え
RFC 6891EDNS0の現行仕様(2013年)。OPTレコードの詳細を定義
RFC 4033〜4035DNSSECの仕様。EDNSのDO bitを活用
RFC 7828EDNS0オプション: TCP Keepalive
RFC 7830EDNS0オプション: Padding(プライバシー強化)
RFC 7871EDNS Client Subnet (ECS)。CDN最適化に使われる拡張

関連用語

  • DNSドメイン名IPアドレスに変換する名前解決の基本プロトコル
  • DNSSEC — DNSの応答に電子署名を付けて改ざんを検出するセキュリティ拡張
  • OPTレコード — EDNSで使われる特殊なリソースレコード。拡張情報を格納する
  • UDP — DNSが主に使うトランスポートプロトコル。軽量だが信頼性は低い
  • DNS Flag Day — EDNS非対応の古い実装を廃止するための業界共同活動