【Rasberry Pi2備忘ログ】 2015/03/23(月) Raspberry Pi2をTFTPサーバーにする
Raspberry Pi2をputもgetも可能なTFTPサーバにしてみました。クライアント(Windows7)もサーバ(RaspberryPI)も同じローカルネットワークの同じセグメント内にいます。
ここでは、WindowsPCのIPは192.168.0.200、Raspberry Pi2の方は192.168.0.100とします。
1.Raspberry Pi2へのインストール
$ sudo apt-get install tftp
$ sudo apt-get install tftpd-hpa
※初めはtftpdで試していたのですが、クライアントからのputが行えなかったので断念しました。-cオプションがあるような記述をあちこちで見かけましたが、man in.tftpdによるとそのようなオプションは無く、指定してもunknown optionになっていました。
tftpはlocalhostでのテストに使うだけです。TFTPサーバそのものはtftpd-hpa。ところが、このtftpd-hpaはインストール中にエラーになります。IPv6で設定されてしまうためのようです。そこで1度目のインストールで作られている設定ファイルを編集したあと修復セットアップを行います。
$ sudo vi /etc/default/tftpd-hpa
TFTP_OPTIONS="--secure" → TFTP_OPTIONS="--create --secure --ipv4"
「--create」を付けると、TFTPサーバに存在しないファイルであってもput出来るようになります。
保存した後、失敗したインストールを再開(「-f」の代わりに「--fix-broken」でも可能。fix=修復という事ですね)。
$ sudo apt-get install -f
2.Raspberry Pi2上でのサーバ動作テスト
これでTFTPサーバはサービスとして起動しているはずなので、まずはサーバ(RPi2)上でテストしてみます。
$ echo This is test. > localtest.txt
$ tftp localhost
tftp> put localtest.txt
Sent 13 bytes in 0.0 seconds
tftp> get localtest.txt
Received 13 bytes in 0.0 seconds
となればOK。
3.クライアント側(Windows 7)の準備
Windows 7などにはTFTP.EXEというクライアントが用意されているものの、デフォルトでは使用出来ないようになっているので、有効化します。コントロールパネルの「プログラムと機能」にある「Windowsの機能の有効化または無効化」を選んで「TFTPクライアント」にチェックを付けた後OKで閉じます。
32bit版のWindows7ならこれでおしまいなのですが、64bit版の場合には「C:\Windows\System32」にあるTFTP.EXE を「C:\Windows\SysWow64」へコピーする必要があります。
さらに、Windowsファイアウォールも無効化する必要があります。TFTPは接続に行く先はudpのポート69なのですが、下りは違うためです(ARPテーブルにおけるTFTPサーバは静的でなくてもOK。ローカルネットワークでない場合は不明)。
4.クライアントからの接続テスト
いよいよクライアントからファイルをアップしたり落としたりしてみます。DOS窓で以下のコマンドを入力。
C:\> copy con test.txt
123456
^Z
C:\> tftp 192.168.0.100 put test.txt
転送を正常に完了しました:1秒間に6バイト、6バイト/秒
となれば転送成功です。Raspberry Pi2の/srv/tftpディレクトリ内にtest.txtがtftpという所有者で作られているはずです。
ダウンロードは以下です。
C:\> tftp 192.168.0.100 get test.txt
転送を正常に完了しました:1秒間に6バイト、6バイト/秒
結構ハマりましたが、脇道に逸れていた時にWindowsでARPを静的に変える方法が分かったのでよしとしましょうー
また、TFTPサーバがルータの外にいる場合は、静的NAPTへの登録が必要です。
