JAPAN REGISTRY SERVICESＪＰＲＳ トピックス＆コラム

No. 008■ 「５１２の壁」を越える～ＥＤＮＳ０の概要と運用上の注意～
ＤＮＳプロトコルに存在する制限の一部を緩和し、ＤＮＳＳＥＣやＩＰｖ６などへの対応を可能にするためのＤＮＳの機能拡張技術である「ＥＤＮＳ０」について解説します。
■DNS における UDP の採用と 512 バイト制限

このことは通信の信頼性が高くなかった当時のインタ

DNS の通信ではドメイン名や IP アドレスなど、比較的ーネットにおいて、DNS を実用的に使用可能にするた

短いデータを含む DNS メッセージが頻繁にやりとりされめの重要な要素となりました。

ることが一般的です。こうした通信形態では、相手との■TCP フォールバックと「512 の壁」

接続の事前確立を必要としない UDP を用いる方が、接そして、512 バイトを超える DNS メッセージを応答す

続の事前確立が必要な TCP よりも通信にかかるコスト・るための方法として、「TCP フォールバック」と呼ばれる時間を抑制でき、システム全体の効率や処理能力を向方式が定められました。

上させることができます。

DNS サーバーが返そうとする応答が 512 バイトを越え

このような背景から、DNS では主な通信プロトコルとした場合、512 バイト以下に切り詰めた上で「データが切て UDP が採用され、TCP は権威 DNS サーバー間のゾり詰められた」というビット（TC）をセットした応答を送信ーン転送やある程度の長さを超える DNS メッセージを元に返します。TC がセットされた応答を受け取った場取り扱う際にのみ使用されるように設計されました。そし合、送信元は同じ問い合わせを TCP で再送します1。こて、UDP において取り扱い可能な DNS メッセージの最の一連のやりとりを TCP フォールバックと呼びます。

大長は当初、512 バイトまでと定められました。

■512 バイト制限の理由
なぜ、UDP における DNS メッセージの最大長は 512バイトまでと定められたのでしょうか。

TCP フォールバックは必ず UDP による通信の後で発生します。そのため、名前解決にかかるコスト・時間が最初から TCP を使う場合よりも更に大きくなります。このUDP における DNS メッセージサイズの制限は後に、インターネットで使われている IP（IPv4）の仕様ではDNS における「512 の壁」と呼ばれるようになりました。

一度に受信可能なデータグラム（ヘッダーを含むパケッ■DNSSEC の標準化と「512 の壁」の顕在化

ト）として、576 バイトを保証しなければならないと定めら

その後、1990 年代に DNS キャッシュポイズニングがれています。この値は、64 バイトのヘッダーと 512 バイト関係者の間で問題視され2、DNSSEC の標準化作業がのデータブロックを格納可能な大きさとして選択された開始されました。そして、1997 年に DNSSEC の最初のものです（RFC 791 3.1. Internet Header Format）。

仕様（RFC 2065）が標準化されました。

このため、UDP における DNS メッセージサイズの最DNSSEC を導入した場合、DNS 応答を検証するため大値を 512 バイトまでとすることで、通常の DNS 通信はの鍵や署名により DNS メッセージのサイズが増大しま

IPv4 ネットワークにおいて必ず 1 パケットで送受信可能す。この、メッセージの増大に伴う UDP メッセージのオになります。

ーバーフローと、オーバーフローした場合の TCP フォ

IPv4において1パケットで送受信可能なデータグラム（576バイト）

UDPのDNSメッセージ（最大512バイト）

ールバックの高いオーバーヘッド（512 の壁）が、DNSSEC 導入における障害として顕在化してきました。

20 + 8 + 512 = 540バイト
UDPヘッダー（8バイト）（576バイト以下のため1パケットで送受信可能）
IPヘッダー（20バイト）

図 1 UDP における DNS メッセージサイズ

Copyright © 2013 株式会社日本レジストリサービス

12

TCP では 65,535 バイトまでの DNS メッセージサイズを処理できます。
1990 年に書かれた S. Bellovin 氏の論文がきっかけとなりました。

※掲載内容は2013年11月現在のものです。

1

JAPAN REGISTRY SERVICES■EDNS0 の概要と特徴

相手が EDNS0 に対応しているかどうかは応答を受け

IPv4 における 576 バイトの制限は、1980 年代当時の取ったキャッシュ DNS サーバーにより、一定時間キャッ通信網の信頼性や制限を考慮したうえで設定されまし

シュされます。

た。その後、ローカルエリアネットワークにおいて広く普■EDNS0 環境における注意

及した Ethernet では 1 回の伝送で送信可能な最大値

EDNS0 を用いた環境では、512 バイトよりも大きな（MTU）は 1500 バイトとなっており、かつ広域ネットワー

UDP による DNS 応答が送受信されます。また、MTU をクの信頼性も当時と比べ、飛躍的に向上しています。

超える大きな DNS 応答では、IP フラグメンテーション4がそのような背景から、通信に従来の UDP を使いながら DNS メッセージサイズの制限を緩和するための拡張3発生する可能性があります。
一部のルーターやファイアーウォールなどのネットワ機能である「Extension Mechanisms for DNS（EDNS0 ）」ーク機器はこのような DNS メッセージに対応しておらず、が、1999 年に標準化されました（RFC 2671）。EDNS0

誤動作やデータの喪失などが発生する可能性がありまには DNS メッセージサイズの制限緩和以外のプロトコす。その場合、DNS の誤動作や名前解決エラーなどにル拡張も含まれており、DNS を DNSSEC や IPv6 に対つながる危険性があります。

応させる場合、EDNS0 への対応が必須とされています

そうしたトラブルの発生を防ぐため、自組織で運用し（RFC 3226）。EDNS0 はその後、細部の仕様や推奨値ているネットワーク機器が EDNS0 に対応した DNS メッなどが 2013 年に変更されています（RFC 6891）。

セージを正しく取り扱えるかを事前確認し、必要に応じEDNS0 では Ethernet における DNS メッセージサイズの推奨値を、1280 バイトから 1410 バイトまでの間としています。

■EDNS0 による通信のしくみた機器の更新やファームウェア・ソフトウェアのバージョンアップなどの対応を実施しておく必要があります。
また、EDNS0 をサポートしていない相手との通信や、EDNS0 により設定される DNS メッセージサイズ（ペイロEDNS0 による通信では OPT というリソースレコードが、ードサイズ）よりも大きな DNS メッセージを応答する場合、DNS メッセージの additional セクションに付加されます。

従来からの TCP フォールバックによる再問い合わせがOPT レコードは A レコードや NS レコードなどとは異なり、実行されます。そのため、各組織において設定するフDNS における通信（トランザクション）の際にのみ現れる

ァイアーウォールなどでは、DNS のための設定としてことから、「疑似 RR」（pseudo-RR）と呼ばれています。

UDP の 53 番ポートだけではなく、TCP の 53 番ポート

EDNS0 に対応したキャッシュ DNS サーバーが権威へのアクセスも許可しておく必要があります。

DNS サーバーと通信する場合、まず OPT レコードを用■今回のまとめいた DNS メッセージを通信相手の権威 DNS サーバー①

DNS メッセージサイズにおける 512 バイト制限は、IPv4の仕様に由来している②

512 バイトを超える DNS メッセージを応答する方法として、TCP フォールバックという方式が定められた③

DNSSEC の標準化が「512 の壁」を顕在化させた相手が EDNS0 をサポートしていなかった場合、OPT④「512 の壁」を超える仕組みとして EDNS0 が開発されたレコードを用いた DNS メッセージに対しエラー応答が⑤

DNSSEC や IPv6 対応では EDNS0 対応が必須

返るか、OPT レコードが無視されることになります。その⑥

使用中のネットワーク機器が EDNS0 に対応しているか、確認しておく必要がある⑦

UDP/53 に加え、TCP/53 も忘れずに許可しておくことに送信します。相手が EDNS0 をサポートしている場合には正しい応答が返るため、その後のその相手との通信では EDNS0 が有効になります。

場合、その相手とは従来の DNS プロトコルにより通信を継続します。
3

EDNS0 の「0」は、バージョン番号に由来しています。

4
IP の内部処理において、MTU よりも大きなデータを小さなデータに断片化することをいいます。

Copyright © 2013 株式会社日本レジストリサービス ※すべてのコラムは http://jprs.jp/related-info/guide/ でご覧いただけます。 2