手当たり次第に書くんだ

飽きっぽいのは本能

Ubuntu 26.04 TFTP の基本設定 – tftpd-hpa と PXE boot 用ファイル配布を管理する

Ubuntu 26.04 PXE / 配布関連の記事

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 serverbootloader、GRUB 設定、初期起動用ファイルを配布する
DHCP serverPXE client に TFTP server と boot file 名を通知する
HTTP serverUbuntu ISO、Autoinstall の user-data / meta-data などを配布する
PXE clientnetwork 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-pager

TFTP 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-pager

PXE 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-hpaTFTP_DIRECTORY が正しいか
  • TFTP root 配下のファイルを tftp user が読めるか
  • 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 の責務を広げすぎないようにします。

関連する記事
Ubuntu 26.04 TFTP の基本設定 – tftpd-hpa と PXE boot 用ファイル配布を管理する

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

トップへ戻る