DNS over TCP

  • 投稿日:
  • by
  • カテゴリ:



メモです。


ネットワークスペシャリストの参考書を眺めていたら、以下のような記述がありました。



通常、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をパケットレベルで観察する