EDNS(Extension Mechanisms for 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レコードとは異なる特殊な役割を持っています。
| 項目 | 従来のDNS | EDNS(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の上に乗る拡張レイヤー」というイメージで理解するとわかりやすいです。
EDNSはまったく新しいプロトコルではなく、既存DNSのAdditional SectionにひっそりとOPTレコードを追加するだけという巧みな設計になっています。EDNS非対応の古いサーバーはOPTレコードを無視してそのまま動作できるため、後方互換性を保ちながら段階的に普及できました。
関連する規格・RFC
| 規格・RFC番号 | 内容 |
|---|---|
| RFC 1035 | DNS仕様の基礎。512バイト制限の出発点 |
| RFC 2671 | EDNS0の初版(1999年)。現在はRFC 6891に置き換え |
| RFC 6891 | EDNS0の現行仕様(2013年)。OPTレコードの詳細を定義 |
| RFC 4033〜4035 | DNSSECの仕様。EDNSのDO bitを活用 |
| RFC 7828 | EDNS0オプション: TCP Keepalive |
| RFC 7830 | EDNS0オプション: Padding(プライバシー強化) |
| RFC 7871 | EDNS Client Subnet (ECS)。CDN最適化に使われる拡張 |