EDNS0とは
EDNS0とは、DNSで扱うメッセージサイズを拡張するプロトコルで、RFC2535で規定されている。もともとDNSは、UDPを使って小さなメッセージを交換するプロトコルとして実装されている。しかし、DNSSECやIPv6の導入により、DNSで扱うデータの量は飛躍的に大きくなった。だが、DNSではUDPを使う場合には512バイトまでのデータしか扱うことができない。EDNS0は、このメッセージサイズの制限を緩和することができる。
従来のDNS通信
DNSはARPANETの時代から使われている名前解決のためのプロトコルである。そのため、当時の通信環境でも確実に通信ができるようにメッセージサイズが決められた。これは、TCP/IPのデータグラムの既定に由来している。IPv4のデータグラムの規定では、576バイトまでのデータグラムは一度に受信できることを保証している。そのため、576バイト以下のデータであれば、どのネットワークでも必ず利用することができた。そのため、非常に重要なプロトコルであるDNSは、この576バイト以下で動作するように作られた。576バイトのうち、ヘッダが64バイトあるため、実際に扱えるデータ量は512バイトとなっている。
TCPフォールバック
DNSでは、大きなデータを扱う場合にはTCPを使うことができる。DNSサーバは、応答メッセージが大きくなると、512バイトに情報を切り詰めて、TCビットをセットして応答を返す。これを受け取ったクライアントは、同じ問い合わせをTCPで行う。TCPでは、メッセージサイズの上限はないため、クライアントは確実に情報を受けとることができる。これを、TCPフォールバックと言う。
しかし、TCPはコネクション型のプロトコルであるため、高速なレスポンスが求められるDNSには向いていない。そのため、UDPでより大きなデータを扱うことが求められた。
EDNS0の特徴
現在のネットワーク環境では、Ethernetが広く普及していている。Ethernetでは、1500バイトまでのデータを扱うことができる。PPPoEなどのオーバーヘッドを考えても、1280~1410バイトであればほとんどの環境で利用できる。そのため、メッセージサイズの制限を取り除こうとしたのがEDNS0である。
EDNS0に対応したDNSキャッシュサーバは、権威DNSサーバとの間でEDNS0が使えるかを調べるために、OPTレコードという擬似リソースレコードを使う。権威DNSサーバが、OPTレコードの問い合わせに応答すればEDNS0が使えると判断される。EDNS0が利用できることが分かると、その後の通信ではTCPフォールバックではなく、EDNS0が使われる。
EDNS0では、UDPでも512バイト以上のデータを利用することができるようになる。MTUを越える大きなDNS応答も送受信することができる。その場合には、IPフラグメンテーションが発生する可能性もある。
注意点
ネットワーク機器によっては、512バイトよりも大きなUDPのDNSパケットを扱えない機器がある。そのため、サーバ間でEDNS0を使うことを合意しても、実際に通信が行えることが確定している訳ではない。特に、通信経路上に未対応の機器があると、DNSが誤動作をしたり名前解決ができない場合もある。
こうしたトラブルを防ぐため、必要に応じてネットワーク全体を点検し、EDNS0に対応していない機器がないかを確認しておく必要がある。
また、EDNS0は必ず使えるわけではないので、TCPのDNSに対する許可も行う必要がある。
【カテゴリ】:DNS  ネットワーク  
【Webセミナー】自社でOSSを採用しよう!今更聞けないOSSの基本セミナー
日程: | 11月22日(金)Webセミナー「BigBlueButton」を使用します。 |
内容: | OSSを導入したいけど、どこから手をつければいいかわからない方必見! |
ご興味のあるかたはぜひご参加ください。 |