Lazy Diary @ Hatena Blog

PowerShell / Java / miscellaneous things about software development, Tips & Gochas. CC BY-SA 4.0/Apache License 2.0

TFTPでファイルのリクエストがタイムアウトになる

背景

  • バイスのブート時にイメージをTFTPで流しこみたい。
  • TFTPで通信する際、デバイスIPアドレスは192.168.11.1、TFTPサーバは192.168.11.168で固定になっている。
  • TFTPサーバにはWindows 10上のPumpKINを使っている。
  • PumpKINの設定で、リクエスト・レスポンスともudp/69を使うよう設定している。
  • TFTPサーバとデバイスはLANケーブルで直接接続している。

問題

  • バイスからTFTPのリクエストは来るが、以下のようにPumpKINのコンソールにエラーが出力され、正しくファイルが返送されない。
[10/07/20 22:20:35] 'firmware_XXXX.XXX' of type 'octet' is requested from 192.168.11.1
[10/07/20 22:20:35] UDP packet receive failed
[10/07/20 22:20:40] Transmission of 'firmware_XXXX.XXX' is timed out
[10/07/20 22:20:40] Transfer of 'firmware_XXXX.XXX' was aborted
  • Windows 10上で192.168.11.168に対してtftpでファイルをリクエスト(tftp -i 192.168.11.168 get firmware_XXXX.XXX)すると正常に取得できる。そのため、WindowsファイアウォールでPumpKINがブロックされているとか、TFTPの待ち受け用ポートは開放されているが返送用ポートが閉じているとか、PumpKINがファイルを参照できていない、といった問題ではない。
  • WireSharkでLANケーブルが挿さっているNICのパケットをキャプチャすると、TFTPのリクエストのパケットが192.168.11.1→192.168.11.168へ正常に飛んでいるのが確認できる。たが、その後192.168.11.168→192.168.11.1へ応答のパケットがひとつも出ていっていない。
  • エラーメッセージはタイムアウトした旨の内容になっている。しかし、WireSharkで確認するとリクエストで設定されているタイムアウトはデフォルトの5秒のまま。

原因

IPアドレス(192.168.11.1)の重複が原因。 Windows 10上にVMWareをセットアップしており、その際に作成されたVMware Network Adapter VMnet8(VMWare Virtual Ethernet Adapter)のIPアドレスが192.168.11.1になっていた。返送先のIPアドレスが重複していたため、VMWare Network Adapterの方へレスポンスが飛んでいたものと思われる(WireSharkでキャプチャしていたNICとは別デバイスなので、WireSharkに補足されない)。

対策

VMware Network Adapter VMnet8を無効化して、再度デバイスをTFTPでブートさせたところ、以下のように問題なくPumpKINからファイルが返送された。

[10/08/20 00:01:10] 'firmware_XXXX.XXX' of type 'octet' is requested from 192.168.11.168
[10/08/20 00:01:14] Transfer of 'firmware_XXXX.XXX' has successfully completed