手当たり次第に書くんだ

飽きっぽいのは本能

Ubuntu 22.04 tftpd-hpa – PXE ブート用 TFTP サーバー構築

PXE ブートでは、DHCP が起動ファイルの場所を伝え、TFTP が bootloader や初期設定ファイルを配布します。Ubuntu 22.04 で PXE 検証を行う場合、tftpd-hpa は軽量な TFTP サーバーとして使いやすい選択肢です。

この記事では、Ubuntu 22.04 に tftpd-hpa を導入し、/srv/tftp/etc/default/tftpd-hpa、UDP 69 番、firewall、TFTP クライアントからの取得確認までを扱います。Ubuntu 22.04 は既存手順の保守対象として扱います。

関連する記事
この記事で確認すること
  • PXE 用 TFTP サーバーの役割
  • tftpd-hpa の導入
  • /srv/tftp/etc/default/tftpd-hpa の設定
  • UDP 69 番と firewall の確認
  • TFTP クライアントからの取得確認
参考
書籍
参考書籍

ストーリーで覚える Linux CLI 入門

Linux のコマンドライン操作を基礎から確認したい場合の参考書籍です。価格や在庫はリンク先で確認してください。

Amazon で見る

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

TFTP サーバーの役割

TFTP は認証や暗号化を持たない単純なファイル転送プロトコルです。PXE では、UEFI bootloader、GRUB 設定、kernel、initrd などを取得する入口として使われます。公開範囲は構築用ネットワークに限定します。

要素役割
DHCPnext-server と boot file を通知する
TFTPbootloader や設定ファイルを配布する
HTTPAutoinstall の user-data や ISO 関連ファイルを配布する
firewallUDP 69 番と戻り通信を許可する

パッケージをインストールする

tftpd-hpa を導入します。TFTP クライアント検証も同じホストで行う場合は tftp-hpa も入れておきます。

sudo apt update
sudo DEBIAN_FRONTEND=noninteractive apt-get install -y tftpd-hpa tftp-hpa
systemctl status tftpd-hpa --no-pager

TFTP root を作成する

ここでは TFTP root を /srv/tftp とします。TFTP で配布するファイルはこのディレクトリ配下に置きます。

sudo mkdir -p /srv/tftp
sudo chown tftp:tftp /srv/tftp
sudo chmod 755 /srv/tftp
ls -ld /srv/tftp

設定ファイルを作成する

/etc/default/tftpd-hpa で、実行ユーザー、TFTP root、待ち受けアドレス、オプションを指定します。書き込みを許可しない配布専用なら --create は付けません。

sudo tee /etc/default/tftpd-hpa >/dev/null <<'EOF'
TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/srv/tftp"
TFTP_ADDRESS=":69"
TFTP_OPTIONS="--secure"
EOF
sudo systemctl restart tftpd-hpa
systemctl status tftpd-hpa --no-pager

待ち受けを確認する

TFTP は UDP 69 番を使います。サービス状態だけでなく、実際に待ち受けているかを確認します。

sudo ss -lunp | grep ':69' || true
systemctl is-enabled tftpd-hpa
journalctl -u tftpd-hpa -n 50 --no-pager

テストファイルを配置する

まず小さなテストファイルを置き、TFTP クライアントから取得できることを確認します。

echo test | sudo tee /srv/tftp/test.txt >/dev/null
sudo chown tftp:tftp /srv/tftp/test.txt
ls -l /srv/tftp/test.txt

ローカルから取得確認する

同じサーバー上で TFTP クライアントを使い、TFTP root 配下のファイルを取得できるか確認します。

rm -f /tmp/test.txt
tftp 127.0.0.1 -m binary -c get test.txt /tmp/test.txt
cat /tmp/test.txt

別ホストから取得確認する

PXE 対象端末と同じネットワーク側から、TFTP サーバーのアドレスを指定して取得確認します。

tftp 192.0.2.10 -m binary -c get test.txt
ls -lh test.txt
rm -f test.txt

firewall を確認する

TFTP は UDP 69 番を使います。firewall を使っている場合は、PXE 用ネットワークからの UDP 69 番を許可します。

sudo ufw status verbose
sudo iptables -S | grep 69 || true
sudo nft list ruleset | grep 69 || true

PXE 用ファイルを配置する

PXE で使う bootloader や GRUB 設定を /srv/tftp 配下に配置します。ファイル名は DHCP 側で通知する boot file と合わせます。

sudo mkdir -p /srv/tftp/grub
sudo cp /usr/lib/grub/x86_64-efi-signed/grubnetx64.efi.signed /srv/tftp/grubx64.efi
sudo chown -R tftp:tftp /srv/tftp
find /srv/tftp -maxdepth 2 -type f -ls

DHCP 側との対応を見る

TFTP サーバーだけでは PXE は完結しません。DHCP 側の next-server と boot file が、TFTP サーバーのアドレスとファイル名に合っているか確認します。

grep -R "next-server\|filename" /etc/dhcp 2>/dev/null || true
ls -l /srv/tftp/grubx64.efi

ログを確認する

取得できない場合は、サービスログ、syslog、パケットを分けて確認します。TFTP はエラーが簡素なので、サーバー側とクライアント側の両方を見ます。

journalctl -u tftpd-hpa -n 100 --no-pager
grep -i tftp /var/log/syslog | tail -50 || true
sudo tcpdump -ni any udp port 69

書き込みを許可する場合

ネットワーク機器の設定バックアップなどで TFTP upload を受けたい場合だけ、--create を追加します。PXE 配布専用なら読み取り専用のままにします。

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 systemctl restart tftpd-hpa

不要になった場合は削除する

検証が終わり、TFTP サーバーを使わない場合は停止して削除します。/srv/tftp を消す前に、必要なファイルがないか確認します。

sudo systemctl disable --now tftpd-hpa
sudo apt purge -y tftpd-hpa
sudo apt autoremove -y
sudo rm -rf /srv/tftp

よくある失敗

TFTP は仕組みが単純な分、ファイル名、権限、TFTP root、firewall、DHCP の指定ずれで止まりやすいです。

  • DHCP の boot file と実ファイル名が違う
  • TFTP root が想定と違う
  • ファイル所有者や権限で読めない
  • firewall で UDP 69 番または戻り通信が落ちている
  • PXE 対象端末から TFTP サーバーへ経路がない

まとめ

Ubuntu 22.04 の tftpd-hpa は、PXE ブート用の TFTP サーバーとして使えます。/srv/tftp/etc/default/tftpd-hpa、UDP 69 番、firewall、TFTP クライアントからの取得確認を順に見れば、切り分けしやすくなります。

PXE / Autoinstall では、DHCP、TFTP、HTTP の役割を分けて確認することが重要です。TFTP で bootloader を取得できることを確認してから、DHCP の通知内容や Autoinstall の HTTP 配布へ進みます。

関連する記事
Ubuntu 22.04 tftpd-hpa – PXE ブート用 TFTP サーバー構築

コメントを残す

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

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

トップへ戻る