EDNS

読み:いーでぃーえぬえす / 英語表記:Extension Mechanisms for DNS

DNSの機能を拡張する仕組み。UDPで送受信できるDNSメッセージの大きさの上限を、従来の512バイトから広げられる。上限を超える応答は、TCPでやり取りし直す。

イマシルちゃんの解説

むかしのDNSは、UDPで送れる返事の大きさに、けっこう小さな上限があったんだ。

でも、IPv6のアドレスや、DNSSECの署名みたいに、返事に入れたい情報がどんどん大きくなってきた。
EDNSは、「ぼくは大きい返事でも受け取れるよ」ってお互いに伝え合って、UDPのまま大きな返事を送れるようにする仕組みなんだよ。
それでも入りきらないときは、もっと確実な別の運び方に切り替えて送り直すんだ!

より深い解説

定義

EDNS(Extension Mechanisms for DNS、バージョン0は EDNS(0))は、RFC 6891で定められた、DNSのプロトコルを拡張するための仕組みである。DNSメッセージの追加情報セクション(ADDITIONAL SECTION)に、OPTという疑似的なリソースレコードを入れて、送信者が扱える能力を伝える。

主な機能

機能内容
UDPのメッセージサイズの拡大受け取れるUDPのペイロードの大きさ(例:1232バイト)を相手に伝え、512バイトを超えるメッセージをUDPで送受信できるようにする
DNSSECへの対応DNSSECの署名(RRSIG)などを要求することを示す(DOビット)
拡張オプションクライアントのサブネットの情報(ECS)、Cookie など

512バイトを超えるとき

状況動作
EDNSを使い、調整した上限以内UDPで送受信する
上限を超える、または相手がEDNSに対応していない応答のTCビット(切り詰め)を立てた短い応答を返す。受け取った側は、TCPで問い合わせ直す

DNSは、UDPとTCPのどちらでもポート53番を使う。そのため、ファイアウォールでは、UDP/53だけでなく、TCP/53の通信も許可しておく必要がある。

IPv6とDNSメッセージの大きさ

IPv6のアドレス(AAAAレコード)は128ビットで、IPv4のアドレス(Aレコード)の4倍の大きさがある。また、デュアルスタックでは、AAAAレコードとAレコードの両方を問い合わせる。DNSSECを使うと、署名も加わる。このため、IPv6の環境では、DNSメッセージが512バイトを超えることが多くなる。

大きなUDPのパケットの問題

UDPで大きなDNSメッセージを送ると、経路の途中でIPのフラグメンテーションが起きることがある。フラグメントは、ファイアウォールで捨てられたり、偽のフラグメントを混ぜる攻撃(キャッシュポイズニング)に使われたりするおそれがある。そのため、フラグメントが起きにくい1232バイトを、EDNSのUDPのサイズの既定値にする運用が推奨されている(2020年の DNS Flag Day)。

午後での問われ方

「EDNSに対応していない権威DNSサーバと512バイトを超えるDNSメッセージを送受信するときは、何で送受信するか」のように、TCPへの切り替えが問われる。

実際の試験ではここに出る!

この用語が出てくる記事

↑