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 server | bootloader、GRUB 設定、初期起動用ファイルを配布する |
| DHCP server | PXE client に TFTP server や boot file 名を通知する |
| HTTP server | Ubuntu 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 || truetftpd-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/tftpTFTP 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.txtPXE / Autoinstall での位置付け
Ubuntu Autoinstall を PXE boot で使う場合、TFTP ですべてを配る必要はありません。TFTP は bootloader と最小限の設定を配り、ISO や NoCloud seed は HTTP で配る構成にすると、役割が分かりやすくなります。
| 配置場所 | 例 | 役割 |
|---|---|---|
/srv/tftp/grubnetx64.efi | UEFI 用 bootloader | PXE client が最初に取得する |
/srv/tftp/grub/grub.cfg | GRUB menu | kernel、initrd、Autoinstall URL を指定する |
/srv/tftp/casper/ | vmlinuz / initrd | 初期起動に必要なファイルを置く場合がある |
/var/www/html/iso/ | Ubuntu ISO | HTTP で installer に渡す |
/var/www/html/autoinstall/ | user-data / meta-data | NoCloud 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、UDP、DHCP、TFTP、PXE boot の前提となるネットワーク基礎を体系的に確認したい場合の参考書籍です。
Amazon で見る

