手当たり次第に書くんだ

飽きっぽいのは本能

Ubuntu 26.04 TFTP の基本設定 – tftpd-hpa と PXE boot の入口を整える

Ubuntu 26.04 サーバー管理ガイドへ戻る

Ubuntu 26.04 で TFTP を使う場合、主な用途は PXE boot やネットワーク機器向けの小さなファイル配布です。HTTP や NFS のような汎用ファイル配布ではなく、bootloader や初期起動ファイルを渡すための、かなり限定的な役割として考えます。

Ubuntu 26.04 で tftpd-hpa を使い、PXE boot や Autoinstall の前段となる TFTP server を構成します。TFTP root、/etc/default/tftpd-hpa、UDP 69、ファイル取得確認、公開範囲の注意点を整理します。

TFTP は何のために使うのか

TFTP は UDP を使う単純なファイル転送プロトコルです。認証や暗号化を持たないため、インターネットに公開するものではありません。PXE boot では、DHCP で起動情報を受け取った client が TFTP server から bootloader や設定ファイルを取得します。

役割内容
TFTP serverbootloader、GRUB 設定、初期起動用ファイルを配布する
DHCP serverPXE client に TFTP server や boot file 名を通知する
HTTP serverUbuntu ISO や Autoinstall の user-data / meta-data を配布する
PXE clientネットワーク boot で TFTP / HTTP から必要なファイルを取得する

このため、TFTP 記事では TFTP 単体の設定だけでなく、PXE / Autoinstall の前段として、どこまでを TFTP に任せ、どこから先を HTTP や Autoinstall 側へ渡すのかを意識します。

現在の状態を確認する

まず、tftpd-hpa が導入済みか、サービスが存在するか、UDP 69 を待ち受けているかを確認します。TFTP は TCP ではなく UDP なので、確認コマンドでも -u 側を見る必要があります。

dpkg -l | grep -E '^ii\s+tftpd-hpa' || true
systemctl status tftpd-hpa --no-pager
ss -lunp | grep ':69' || true

既存環境で TFTP を使っている場合は、設定ファイルと TFTP root の中身を先に確認します。PXE boot 用のファイルがすでに配置されている可能性があるため、いきなりディレクトリを空にしないようにします。

sudo test -f /etc/default/tftpd-hpa && sudo sed -n '1,120p' /etc/default/tftpd-hpa
sudo ls -la /srv/tftp 2>/dev/null || true

tftpd-hpa を導入する

Ubuntu 26.04 では、TFTP server として tftpd-hpa を使います。PXE boot の入口として使う場合でも、まずは package、TFTP root、systemd service を小さく確認します。

sudo apt update
sudo apt install tftpd-hpa
sudo install -d -o tftp -g tftp -m 0755 /srv/tftp

TFTP root は、配布したいファイルだけを置く専用ディレクトリにします。/srv/tftp のような明示的な場所に分けることで、誤って不要なファイルを配布するリスクを下げられます。

/etc/default/tftpd-hpa を設定する

tftpd-hpa の基本設定は /etc/default/tftpd-hpa で行います。ここでは、実行ユーザー、TFTP root、待受アドレス、オプションを明示します。

sudo cp -a /etc/default/tftpd-hpa /etc/default/tftpd-hpa.bak.$(date +%Y%m%d%H%M%S) 2>/dev/null || true
sudo tee /etc/default/tftpd-hpa >/dev/null <<'EOF'
TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/srv/tftp"
TFTP_ADDRESS=":69"
TFTP_OPTIONS="--secure --create"
EOF
sudo chown root:root /etc/default/tftpd-hpa
sudo chmod 0644 /etc/default/tftpd-hpa

--secure は TFTP root の外へ出ないようにするための指定です。--create は client からの書き込みを許可する設定で、環境によっては不要または危険です。PXE boot 用に読み取りだけで使うなら、書き込みを許可する必要があるかを必ず確認します。

サービスを起動して UDP 69 を確認する

設定を反映したら、サービスを有効化して起動します。TFTP は UDP 69 を使うため、ss -lunp で待受を確認します。

sudo systemctl enable --now tftpd-hpa
sudo systemctl restart tftpd-hpa
systemctl status tftpd-hpa --no-pager
ss -lunp | grep ':69' || true

サービスが起動していても、firewall、経路、DHCP の boot file 指定、client 側のネットワーク boot 設定が合っていなければ PXE boot は進みません。TFTP はあくまで部品の一つとして確認します。

ファイル取得を確認する

TFTP server が動作しているかは、簡単なテストファイルを置いて取得できるかで確認できます。PXE 用の本番ファイルを置く前に、小さなファイルで疎通確認しておくと切り分けがしやすくなります。

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
tftp 127.0.0.1 -c get test.txt /tmp/tftp-test.txt
cat /tmp/tftp-test.txt
rm -f /tmp/tftp-test.txt

別ホストから確認する場合は、TFTP server の IP アドレスを指定します。PXE boot で使う場合は、実際の client と同じネットワークから取得できるかを見ることが重要です。

tftp 10.0.0.10 -c get test.txt /tmp/tftp-test.txt
cat /tmp/tftp-test.txt
rm -f /tmp/tftp-test.txt

PXE / Autoinstall での位置付け

Ubuntu Autoinstall を PXE boot で使う場合、TFTP ですべてを配る必要はありません。TFTP は bootloader と最小限の設定を配り、ISO や NoCloud seed は HTTP で配る構成にすると、役割が分かりやすくなります。

配置場所役割
/srv/tftp/grubnetx64.efiUEFI 用 bootloaderPXE client が最初に取得する
/srv/tftp/grub/grub.cfgGRUB menukernel、initrd、Autoinstall URL を指定する
/srv/tftp/casper/vmlinuz / initrd初期起動に必要なファイルを置く場合がある
/var/www/html/iso/Ubuntu ISOHTTP で installer に渡す
/var/www/html/autoinstall/user-data / meta-dataNoCloud seed として Autoinstall に渡す

つまり、TFTP は PXE / Autoinstall 全体の入口です。TFTP の設定だけを見て PXE boot 全体が完成したと考えるのではなく、DHCP、TFTP、HTTP、Autoinstall の役割分担で確認します。

ログとトラブルシュート

TFTP はプロトコルが単純なぶん、失敗時の情報も多くありません。まずは systemd の状態、journal、UDP 69、TFTP root の権限を確認します。

systemctl status tftpd-hpa --no-pager
journalctl -u tftpd-hpa --since today --no-pager
ss -lunp | grep ':69' || true
sudo find /srv/tftp -maxdepth 2 -type f -printf '%M %u %g %p\n' | sort

よくある問題は、TFTP root のパスが違う、ファイル名が DHCP / GRUB 側の指定と違う、権限で読めない、firewall で UDP 69 が通らない、PXE client と server が異なる L3 セグメントにいる、などです。TFTP だけでなく、DHCP と経路も一緒に確認します。

再起動後に確認する

TFTP は PXE boot の入口になるため、サーバー再起動後に自動起動し、同じ TFTP root を配布できることが重要です。

sudo reboot
systemctl status tftpd-hpa --no-pager
ss -lunp | grep ':69' || true
tftp 127.0.0.1 -c get test.txt /tmp/tftp-test.txt
rm -f /tmp/tftp-test.txt

運用上の注意点

TFTP には認証も暗号化もありません。そのため、公開範囲は必ず限定します。PXE boot 用の管理ネットワークや閉じたセグメントで使うことを前提にし、不要なファイルを TFTP root に置かないようにします。

観点確認内容
公開範囲UDP 69 を必要なネットワークだけに限定する
TFTP root配布するファイルだけを置く
書き込み許可--create が本当に必要か確認する
PXE 連携DHCP の boot file、TFTP server、GRUB 設定を合わせる
確認方法localhost だけでなく、PXE client と同じ経路から取得する

参考書籍

参考
書籍
参考書籍
マスタリング TCP/IP 入門編 第6版

TCP/IP、UDP、DHCP、TFTP、PXE boot の前提となるネットワーク基礎を体系的に確認したい場合の参考書籍です。

Amazon で見る
このリンクは Amazon アソシエイトリンクです。

関連する記事

関連する記事

Ubuntu 26.04 サーバー管理ガイドへ戻る

Ubuntu 26.04 TFTP の基本設定 – tftpd-hpa と PXE boot の入口を整える

コメントを残す

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

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

トップへ戻る