メモです。
ネットワークスペシャリストの参考書を眺めていたら、以下のような記述がありました。
通常、DNS問い合わせは、UDPポート53番を使用する。ただし、UDPでの問い合わせに失敗した場合は、TCPポート53番を使用してリトライする仕様になっている。
これはファイアウォールの内側にDNSサーバーがあるような場合の注意点のようです。
たとえば家庭内LAN上のPC(DNSクライアントに相当する)が使用するDNSはUDPのみと考えてよさそうです。
実際にブロードバンドルータでUDPの53番ポートをフィルタしてみると、IEやFireFoxはUDPでDNSの正引きに失敗してもTCPでリトライするようなことはありませんでした。WindowsVista付属のnslookupも同様です。「名前解決失敗」が出るだけです。
確認ではWireSharkでパケットを眺めましたので、TCPの53番でつなごうとしてルータに蹴られている可能性は低そうです。
DNSサーバ間の通信ではUDPパケットサイズの制限からTCPは必要のようです。
DNS Over TCP
http://akisoftware.com/cgi-bin/blom.exe?akisoft+sl+9564f0f5a3c09a48d07e69cacdf7e04c8f86f358
RFC1035も少し眺めてみましたが、リトライについては記述箇所がわかりませんでした。
というわけでまとまらないまとめです。
- 一般的なDNSクライアントはUDPポート53番のみに対応しているようだ(要:追加調査)
- なのでDNS over TCPについてはネット管理者レベルでないと考える必要なし
- ブロードバンドルータのDNS機能(実質的には外部のDNSへ丸投げするだけ)がTCPポート53番に対応しているかどうかは不明
今後の課題は
- RFC1035関連でリトライ動作の記述箇所を抑える
- Linux辺りのnslookpの実装を確認する
- よほど暇ならBINDの実装を眺める
- 死ぬほど暇なら自前DNSサーバを立ち上げてみてDNS over TCPをパケットレベルで観察する
コメント