tcpdum(8)による調査

次に、tcpdump(8)でどのような通信をBINDが行っているかを確認することにしました。

tcpdump(8)の表示の読み解き

少し脇道な話となりますが、tcpdump(8)の-vvオプションを指定した場合のDNSを含んだパケットのログを読み解くのに役立つかもしれない、少し気がついた事項です。

  • DNSのパケットはtcpdump(8)ではID(16bitの値)の10進数による表示から始まります。
  • AAやTC等のビットを文字で表現していますが、その意味はtcpdump(8)のソースを読む方が速いでしょう。(print-domain.cns_print())
  • UDPの場合は[udp sum ok]の後に続く部分がUDPで運んでいるデータです。
  • TCPの場合でlenght 0で終わっている場合はは、データを運んでいないTCPの制御セグメントなので無視できます。
  • それ以外のデータを含んだTCPのログでは、セグメントのデータの長さとDNSのIDのそれぞれの10進数による値の間に空白を入れずに表示されています。

DNSのやりとりの読み解き

DNSの通信内容を追う場合に、次のような問い合わせと応答が続く場合がよくあります。

  • TCPでの再度の問い合わせ
    1. UDPでネームサーバーに問い合わせ
    2. ネームサーバーから応答が返るもTCビットがセット: 長すぎるので切り詰め
    3. このためTCPで同じIPアドレスのネームサーバーに問い合わせ
  • DLVレコードの問い合わせ
    1. 得られたリソースレコードに.dlv.isc.orgを付加したDLVレコードの取得を試み
    2. dnssec-lookasidenoにして抑止すべき?

tcpdump(8)の結果

tcpdump(8)の結果を2つ紹介します。