TFTP は、PXE ブート、ネットワーク機器の設定バックアップ、ファームウェア転送、単純なファイル取得検証で使われる軽量なプロトコルです。認証や暗号化はなく、用途を限定して使う前提の仕組みです。
この記事では、Ubuntu 22.04 で TFTP クライアントを導入し、TFTP サーバーに対する get / put、binary mode、UDP 69 番、firewall、PXE / Autoinstall 検証時の切り分けを確認します。
- TFTP クライアントを使う場面
tftp-hpaの導入と基本確認- binary mode での get / put
- UDP 69 番と firewall の切り分け
- PXE / Autoinstall 検証で見るポイント
書籍
ストーリーで覚える Linux CLI 入門
Linux のコマンドライン操作を基礎から確認したい場合の参考書籍です。価格や在庫はリンク先で確認してください。
Amazon で見るこのリンクは Amazon アソシエイトリンクです。
TFTP クライアントを使う場面
TFTP クライアントは、TFTP サーバーが正しくファイルを配布できているかを確認するために使います。PXE では、ブートローダー、kernel、initrd、設定ファイルの取得確認に役立ちます。
| 用途 | 確認すること |
| PXE 検証 | boot file や設定ファイルを取得できるか |
| ネットワーク機器 | 設定ファイルを送受信できるか |
| firewall 確認 | UDP 69 番と戻り通信が通るか |
| Autoinstall | PXE 側の配布経路と HTTP 側を分けて切り分ける |
パッケージをインストールする
Ubuntu 22.04 では tftp-hpa パッケージで TFTP クライアントを導入できます。
sudo apt update
sudo DEBIAN_FRONTEND=noninteractive apt-get install -y tftp-hpa
tftp --version || trueTFTP サーバーへ接続できるか確認する
TFTP は TCP ではなく UDP を使います。まずサーバーの名前解決、経路、UDP 69 番の到達性を分けて確認します。
getent hosts 192.0.2.10
ip route get 192.0.2.10
nc -zvu 192.0.2.10 69 || truebinary mode でファイルを取得する
PXE やイメージファイルの確認では binary mode を使います。テキスト転送前提で扱うと、ファイル内容が壊れたように見えることがあります。
tftp 192.0.2.10 -m binary -c get pxelinux.0
ls -lh pxelinux.0
file pxelinux.0テストファイルを送信する
TFTP サーバーが書き込みを許可している場合は、テストファイルを送信して確認できます。サーバー側で upload を許可していない構成では失敗するのが正常です。
dd if=/dev/urandom of=test.bin bs=1K count=64
tftp 192.0.2.10 -m binary -c put test.bin
rm -f test.bin取得と送信を分けて確認する
TFTP サーバーによっては、読み取りは許可していても書き込みは禁止していることがあります。検証では get と put を別々に見ます。
tftp 192.0.2.10 -m binary -c get test.bin
ls -lh test.bin
rm -f test.binPXE 用ファイルを確認する
PXE では、DHCP で通知された boot file が TFTP で取得できる必要があります。TFTP クライアントから同じファイルを取得して、TFTP 側の問題か DHCP / firmware 側の問題かを切り分けます。
tftp 192.0.2.10 -m binary -c get grubx64.efi
ls -lh grubx64.efi
rm -f grubx64.efifirewall を確認する
TFTP は UDP 69 番を使いますが、実際の転送ではサーバー側の応答ポートも関係します。ホストファイアウォールや経路制御で戻り通信が落ちると、接続できるように見えて転送が失敗します。
sudo iptables -S | grep 69 || true
sudo ip6tables -S | grep 69 || true
sudo nft list ruleset | grep 69 || trueパケットを確認する
原因が分からない場合は、クライアント側で UDP 69 番のパケットを確認します。要求が出ているか、応答が戻っているかを分けて見ます。
sudo tcpdump -ni any udp port 69TFTP サーバー側ログと合わせて見る
TFTP はエラーが簡素なので、クライアント側だけでは原因が分かりにくいことがあります。サーバー側の tftpd-hpa や syslog と合わせて確認します。
systemctl status tftpd-hpa --no-pager
journalctl -u tftpd-hpa -n 50 --no-pager
ls -la /srv/tftpよくある失敗
TFTP の失敗は、ファイル名、権限、転送モード、firewall、SELinux / AppArmor、TFTP root の違いで起きやすいです。まずは小さなファイルで get を確認し、次に PXE 用ファイルを確認します。
- TFTP root 配下にファイルがない
- ファイル名の大文字小文字が違う
- binary mode を指定していない
- サーバー側で upload が許可されていない
- firewall で UDP の戻り通信が落ちている
使い終わったら削除する
検証端末に常時必要ない場合は、TFTP クライアントを削除できます。TFTP サーバーとは別パッケージなので、クライアントの削除だけではサーバー設定には影響しません。
sudo apt purge -y tftp-hpa
sudo apt autoremove -yPXE / Autoinstall との関係
PXE / Autoinstall の検証では、TFTP は boot file の配布確認、HTTP は user-data や ISO 関連ファイルの配布確認として分けて見ると切り分けしやすくなります。
| 確認対象 | 見る場所 |
| DHCP | next-server と boot file |
| TFTP | bootloader や grub 設定の取得 |
| HTTP | Autoinstall の user-data / meta-data |
| firewall | UDP 69 番と戻り通信 |
まとめ
Ubuntu 22.04 の TFTP クライアントは、PXE やネットワーク機器検証で TFTP サーバーの配布状態を確認するための道具です。認証や暗号化のないプロトコルなので、公開範囲を限定し、検証用途として扱います。
確認では、tftp-hpa の導入、binary mode、get / put、UDP 69 番、firewall、サーバー側ログを順番に見ます。PXE / Autoinstall では、TFTP と HTTP の役割を分けると問題箇所を見つけやすくなります。

