マスタリング TCP/IP 入門編 第6版
TCP/IP、Ethernet、VLAN、ルーティングなど、ネットワークの基礎を体系的に確認したい場合の参考書籍です。価格や在庫はリンク先で確認してください。
Amazon で見るこのリンクは Amazon アソシエイトリンクです。
Ubuntu 26.04 で TFTP を使う主な場面は、PXE boot やネットワーク機器向けの小さなファイル配布です。HTTP や NFS のような汎用ファイル共有ではなく、bootloader や初期起動用ファイルを渡すための限定的な役割として扱います。
この記事では、tftpd-hpa、TFTP root directory、/etc/default/tftpd-hpa、UDP 69、client からの取得確認を扱います。PXE 全体では DHCP や HTTP も関係しますが、ここでは TFTP server 側の責務に絞ります。
tftpd-hpaをインストールする- TFTP root directory を用意する
/etc/default/tftpd-hpaで待ち受けと option を指定する- UDP 69、firewall、client からの取得を確認する
TFTP の役割を確認する
TFTP は認証や暗号化を持たない単純なファイル転送プロトコルです。そのため、インターネットに公開する用途には向きません。PXE boot では、DHCP で TFTP server と boot file 名を通知し、client が TFTP server から bootloader や設定ファイルを取得します。
| 役割 | 内容 |
| TFTP server | bootloader、GRUB 設定、初期起動用ファイルを配布する |
| DHCP server | PXE client に TFTP server と boot file 名を通知する |
| HTTP server | Ubuntu ISO、Autoinstall の user-data / meta-data などを配布する |
| PXE client | network boot で TFTP / HTTP から必要なファイルを取得する |
TFTP に大きな ISO や継続的なファイル共有を任せると、設計が分かりにくくなります。TFTP は最初の小さな起動ファイル、HTTP は大きな配布物、というように役割を分けます。
tftpd-hpa をインストールする
Ubuntu 26.04 では tftpd-hpa を使って TFTP server を構成します。
sudo apt update
sudo apt install -y tftpd-hpa
systemctl status tftpd-hpa.service --no-pagerTFTP root directory を用意する
TFTP で公開する directory を作成します。ここでは /srv/tftp を TFTP root とします。tftp user が扱える owner / group にしておきます。
sudo install -d -o tftp -g tftp -m 0755 /srv/tftp取得確認用の小さなファイルを置きます。PXE boot 用の bootloader や設定ファイルを配置する前に、まず単純な取得ができることを確認します。
echo 'tftp test' | sudo tee /srv/tftp/test.txt >/dev/null
sudo chown tftp:tftp /srv/tftp/test.txt
sudo chmod 0644 /srv/tftp/test.txt/etc/default/tftpd-hpa を設定する
/etc/default/tftpd-hpa で、実行 user、公開 directory、待ち受け address、起動 option を指定します。--secure は TFTP root 外を見せないための指定です。--create は書き込みを許可する場合に関係するため、公開範囲と firewall を必ず絞ります。
sudo tee /etc/default/tftpd-hpa >/dev/null <<'EOF'
TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/srv/tftp"
TFTP_ADDRESS=":69"
TFTP_OPTIONS="--secure --create"
EOFサービスを再起動して待ち受けを確認する
設定を置いたら tftpd-hpa.service を再起動し、UDP 69 の待ち受けを確認します。TFTP は TCP ではなく UDP なので、ss でも UDP 側を見ます。
sudo systemctl restart tftpd-hpa.service
sudo systemctl enable tftpd-hpa.service
systemctl status tftpd-hpa.service --no-pager
ss -lunp | grep ':69'client から取得を確認する
別ホストから取得確認を行います。server address は実際の TFTP server の IP address に置き換えます。
sudo apt install -y tftp-hpa
printf 'get test.txt\nquit\n' | tftp 192.0.2.10
cat test.txt同じ server 上だけで確認すると firewall や経路の問題を見落とします。PXE client やネットワーク機器がいる subnet から、実際に UDP 69 へ到達できるかを確認します。
firewall と公開範囲を確認する
TFTP は認証なしでファイルを取得できる前提の protocol です。公開 directory に置くファイルと、UDP 69 を許可する network は強く絞ります。
sudo nft list ruleset
journalctl -u tftpd-hpa.service -n 100 --no-pagerPXE boot 用に使う場合は、DHCP server が通知する TFTP server address と boot file 名も合わせて確認します。TFTP server が起動していても、DHCP 側の通知が違っていれば PXE client は正しいファイルを取得できません。
切り分けの見方
TFTP の問題は、service、UDP 69、firewall、TFTP root directory、file permission、DHCP から通知される file 名を分けて確認します。
tftpd-hpa.serviceが起動しているか- UDP 69 を待ち受けているか
/etc/default/tftpd-hpaのTFTP_DIRECTORYが正しいか- TFTP root 配下のファイルを
tftpuser が読めるか - client 側 subnet から UDP 69 に到達できるか
まとめ
TFTP server の基本は、tftpd-hpa、TFTP root directory、/etc/default/tftpd-hpa、UDP 69、client からの取得確認を分けて見ることです。認証や暗号化がないため、公開するファイルと許可する network を小さく保つことが前提になります。
PXE boot や Autoinstall では、TFTP は最初の bootloader や設定ファイルを配る入口です。大きな配布物や自動インストール用データは HTTP 側に任せ、TFTP の責務を広げすぎないようにします。

