EDNS0について調べたついでに、各DNS権威サーバにEDNS0のようなDNSクエリを送信した場合の応答について 比較してみました。
- OS: Ubuntu Mate 14.04
- DNSクライアント: C++で作成した自作DNSクライアント
- OS: CentOS 6.6 on VirtualBox
- DNSサーバ
- Bind: 9.10.2-P3
- NSD: 4.1.3
- PowerDNS Authoritative Server 3.4.4
- knotDNS 1.6.4
各DNSサーバへ、NSID(https://tools.ietf.org/html/rfc5001)を 含んだOPT pseudo-RRをもつ、www.example.comのAレコードを問い合わせました。
正しいEDNS0では、ADDITIONAL SECTIONに一つだけOPT pseudo-RRが存在ますが、 ここでは、このルールに反したクエリを送信し、そのレスポンスを比較しました。
下記は、通常のクエリを送信した時にtcpdumpにて取得したパケットキャプチャのデータへのリンクです。
下記は、2個のOPT pseudo-RRを含むクエリを送信した時の、パケットキャプチャのデータです。
-
Format Error
を応答しました。 -
Format Error
を応答しました。 -
PowerDNS Authoritative Serverに対するクエリとレスポンス
OPT pseudo-RRを一つ含む場合(通常のEDNS0)と同じ応答を返しました。
-
OPT pseudo-RRを一つ含む場合(通常のEDNS0)と同じ応答を返しました。
下記は、ANSWER SECTIONにOPT pseudo-RRを含むクエリを送信した時の、パケットキャプチャのデータです。
-
OPT pseudo-RRをADDITIONAL SECTIONに含む場合(通常のEDNS0)と同じ応答を返しました。
-
Format Error
を応答しました。 -
PowerDNS Authoritative Serverに対するクエリとレスポンス
OPT pseudo-RRを含まない場合(非EDNS0)と同じ応答を返しました。
-
OPT pseudo-RRを含まない場合(非EDNS0)と同じ応答を返しました。
下記は、AUTHORITY SECTIONにOPT pseudo-RRを含むクエリを送信した時の、パケットキャプチャのデータです。
-
OPT pseudo-RRをADDITIONAL SECTIONに含む場合(通常のEDNS0)と同じ応答を返しました。
-
Format Error
を応答しました。 -
PowerDNS Authoritative Serverに対するクエリとレスポンス
OPT pseudo-RRを含まない場合(非EDNS0)と同じ応答を返しました。
-
OPT pseudo-RRを含まない場合(非EDNS0)と同じ応答を返しました。
下記は、OPT pseudo-RRのドメイン名を*www.example.com*にしたクエリを送信した時の、パケットキャプチャのデータです。
-
Format Error
を応答しました。 -
Format Error
を応答しました。 -
PowerDNS Authoritative Serverに対するクエリとレスポンス
通常のEDNS0と同じ応答を返しました。
-
通常のEDNS0と同じ応答を返しました。
Bind | NSD | PowerDNS | knotDNS | |
---|---|---|---|---|
ケース1:OPT pseudo-RR x 2 | FormErr | FormErr | NoError(EDNS0) | NoError(EDNS0) |
ケース2:OPT pseudo-RR in ANSWER | NoError(EDNS0) | FormErr | NoError(非EDNS0) | NoError(非EDNS0) |
ケース3:OPT pseudo-RR in AUTHORITY | NoError(EDNS0) | FormErr | NoError(非EDNS0) | NoError(非EDNS0) |
ケース4:OPT pseudo-RRのドメイン名を変更 | FormErr | FormErr | NoError(EDNS0) | NoError(EDNS0) |