手当たり次第に書くんだ

飽きっぽいのは本能

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

この記事の位置づけ

tftpd-hpa で TFTP サーバーを構築する記事です。PXE ブートでは DHCP が案内したブートローダーや GRUB 設定、vmlinuz、initrd などを TFTP で配布するため、PXE 構成の中核部品として扱います。

Ubuntu 22.04 サーバー構築・運用メモへ戻る

TFTP が PXE で配布するもの

TFTP は PXE クライアントが初期起動時に参照するファイルを配布します。HTTP や SSH のような認証・暗号化を持たないため、信頼できる LAN 内で、PXE 用途に限定して使うのが基本です。

ファイル役割
UEFI ブートローダーPXE クライアントが最初に取得する起動ファイル
grub.cfg起動メニュー、kernel パラメータ、Autoinstall 参照先を定義する
vmlinuzUbuntu Server インストーラーの Linux カーネル
initrdインストーラー起動に必要な初期 RAM ディスク

運用上の注意

  • TFTP は UDP/69 を使うため、ファイアウォールや経路で遮断されやすい。
  • アップロードを許可する場合は書き込み範囲と権限を最小化する。
  • PXE 用途では、DHCP の filename と TFTP ルート配下のファイル名を一致させる。
  • ISO や Autoinstall の user-data は HTTP 側に置き、TFTP に大きなファイルを寄せすぎない。

DHCP 側の設定は Ubuntu 22.04 isc-dhcp-server DHCP サーバー構築、PXE / Autoinstall 全体の流れは Ubuntu 22.04 PXE と Autoinstall を使用したインストールの自動化 で確認します。

TFTP サーバーの役割

TFTP(Trivial File Transfer Protocol)は、ネットワークを介してファイルを転送するための軽量なプロトコルです。RFC 1350 で定義されており、UDP(ポート番号 69)を使用します。FTP と比べて機能は限定的ですが、シンプルな構造ゆえに小規模なシステムや組込み機器での利用に適しています。

通信仕様については「TFTP の仕組みとファイアウォール設計上の考慮点」も参考にして下さい。

主な用途

  • ネットワーク機器(ルーター、スイッチなど)のファームウェア更新
  • PXE(Preboot Execution Environment)によるネットワークブート
  • 組込み機器での初期設定ファイルの配布

TFTP の特徴

  • 軽量で実装が容易(UDP ベースで制御が単純)
  • 認証や暗号化を持たない(非セキュア)
  • ファイル転送はブロック単位(512 バイト)で ACK 応答を伴う再送制御方式
  • データ転送量が少なく、低リソース環境でも利用可能

利用時の注意点

TFTP は暗号化・認証機構を持たないため、セキュリティの観点から信頼された LAN 内でのみ利用することが推奨されます。外部公開は避け、必要に応じて VPN や SSH トンネルなどのセキュアチャネル上で運用します。

前提条件

  • 基本設定が完了していること。
  • Ubuntu 標準リポジトリを利用します。

3. Installation & Uninstallation

この章では、TFTP サーバーを提供する tftpd-hpa のインストールおよびアンインストール手順を示します。導入後の基本的なファイル配置を確認し、環境を初期状態から整備します。

インストールする

tftpd-hpa をインストールします。

sudo apt update
sudo apt install tftpd-hpa

インストール完了後、自動的に tftpd-hpa サービスが有効化・起動されます。動作状態を確認します。

systemctl status tftpd-hpa

3.2 主な関連ファイル・ディレクトリ

tftpd-hpa の主な設定ファイルおよび関連ディレクトリは以下の通りです。
設定ファイルとデータディレクトリは密接に関連しており、どちらも初期構築段階で確認しておくことが推奨されます。

種別パス用途
設定ファイル/etc/default/tftpd-hpaサービスのメイン設定ファイル。実行ユーザー、ルートディレクトリ、起動オプションなどを定義します。
初期スクリプト/etc/init.d/tftpd-hpasystemd 経由で呼び出される初期スクリプト。通常は直接編集しません。
データディレクトリ/srv/tftpTFTP のルートディレクトリ。転送対象のファイルを配置します。

ルートディレクトリが存在しない場合は、以下のように作成します。

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

3.3. アンインストール

tftpd-hpa を削除する場合は以下を実行します。

sudo systemctl stop tftpd-hpa
sudo apt remove --purge tftpd-hpa
sudo rm -rf /srv/tftp

設定ファイル /etc/default/tftpd-hpa も削除され、再インストール時には初期状態で再生成されます。

4. Configuration

tftpd-hpa の設定は /etc/default/tftpd-hpa に記述されています。このファイルでは、サービスの実行ユーザー、ルートディレクトリ、ポート番号、起動オプションなどを定義します。

4.1 デフォルト設定

インストール直後の設定内容は以下の通りです。

# /etc/default/tftpd-hpa

TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/srv/tftp"
TFTP_ADDRESS=":69"
TFTP_OPTIONS="--secure"

この状態ではファイルのダウンロードのみが許可されており、アップロードはできません。

4.2 設定変更

本環境の例では --create オプションを追加し、新しいファイルのアップロードを許可しています。設定ファイルを以下の内容に書き換えます。

sudo tee /etc/default/tftpd-hpa <<"EOF"
TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/srv/tftp"
TFTP_ADDRESS=":69"
TFTP_OPTIONS="--secure --create"
EOF

4.3 設定項目の説明

パラメータ意味備考
TFTP_USERNAMEサービス実行ユーザー。セキュリティ上、root ではなく専用ユーザー tftp を使用。通常変更不要。
TFTP_DIRECTORY転送ルートディレクトリ。ここに置かれたファイルのみ転送対象となる。/srv/tftp を推奨。
TFTP_ADDRESSサーバーの待受アドレスとポート番号。:69 はすべてのインターフェースで待受。
TFTP_OPTIONS実行時オプション。--secure はルート外アクセス禁止、--create はアップロード許可。必要に応じて他のオプションも追加可能。

4.4 推奨パーミッション

アップロードを許可する場合、書き込み先ディレクトリの権限を確認します。通常、デフォルトの状態で書き込み可能となっています。

sudo chown -R tftp:tftp /srv/tftp
sudo chmod 755 /srv/tftp

5. Activation

設定変更を反映させるため、tftpd-hpa サービスを再起動します。systemd により管理されているため、一般的な systemctl コマンドで制御可能です。

5.1 サービスの再起動

sudo systemctl restart tftpd-hpa.service

再起動後、状態を確認します。

systemctl status tftpd-hpa.service

5.2 エラー確認

設定変更後に起動しない場合、journalctl でエラー内容を確認します。

journalctl -u tftpd-hpa.service -xe

6. Verification

tftpd-hpa サービス側の起動状態とログ出力を確認します。実際のファイル転送テストについては「TFTP クライアント」を参照してください。

6.1 サービス状態の確認

systemctl status tftpd-hpa.service

出力例:

● tftpd-hpa.service - LSB: HPA's tftp server
     Loaded: loaded (/etc/init.d/tftpd-hpa; generated)
     Active: active (running) since Sat 2025-10-11 13:24:32 JST; 22h ago
       Docs: man:systemd-sysv-generator(8)
    Process: 1425 ExecStart=/etc/init.d/tftpd-hpa start (code=exited, status=0/SUCCESS)
      Tasks: 1 (limit: 4527)
     Memory: 608.0K
        CPU: 5ms
     CGroup: /system.slice/tftpd-hpa.service
             └─1487 /usr/sbin/in.tftpd --listen --user tftp --address :69 --secure --create /srv/tftp

Oct 11 13:24:32 ubuntu systemd[1]: Starting LSB: HPA's tftp server...
Oct 11 13:24:32 ubuntu tftpd-hpa[1425]:  * Starting HPA's tftpd in.tftpd
Oct 11 13:24:32 ubuntu tftpd-hpa[1425]:    ...done.
Oct 11 13:24:32 ubuntu systemd[1]: Started LSB: HPA's tftp server.

6.2 ルートディレクトリの確認

ls -ld /srv/tftp

出力例:

drwxr-xr-x 4 tftp tftp 4096 Nov  2  2024 /srv/tftp

6.3 ログの確認

cat /var/log/syslog | grep tftpd-hpa

以下はサービス再起動時の出力例です。

Oct 12 12:08:04 ubuntu tftpd-hpa[44349]:  * Stopping HPA's tftpd in.tftpd
Oct 12 12:08:04 ubuntu tftpd-hpa[44349]:    ...done.
Oct 12 12:08:04 ubuntu systemd[1]: tftpd-hpa.service: Deactivated successfully.
Oct 12 12:08:04 ubuntu systemd[1]: tftpd-hpa.service: Unit process 1487 (in.tftpd) remains running after unit stopped.
Oct 12 12:08:04 ubuntu tftpd-hpa[44354]:  * Starting HPA's tftpd in.tftpd
Oct 12 12:08:04 ubuntu tftpd-hpa[44354]:    ...done.

7. Notes

7.1 特定ユーザーに書き込み権限を付与(オプション)

特定ユーザーが、TFTP で公開するファイルを SCP などで配置する必要がある場合、以下のように設定ます。

sudo usermod -aG tftp test
sudo chmod 775 /srv/tftp
  • tftp グループに所属するユーザーは /srv/tftp に対して書き込み可能。
  • その他のユーザーは読み取り専用。

TFTP サーバーを公開する範囲

TFTP サーバーは認証や暗号化を持たないため、PXE ブートに必要なファイルを配る用途に限定して使います。公開ディレクトリに余計なファイルを置かず、必要なネットワークからだけアクセスできるようにします。

PXE 構成では、DHCP がブート先を指示し、TFTP がブートローダーや初期ファイルを配布し、HTTP が大きなファイルや Autoinstall 設定を配布する、という役割分担で考えると整理しやすくなります。

次に読む記事

Ubuntu 22.04 サーバー構築・運用メモへ戻る

参考書籍

参考書籍
参考書籍

Advanced Ubuntu Administration and Management Best Practices

Ubuntu Server の運用項目を体系的に確認したい場合の参考書籍です。価格や在庫はリンク先で確認してください。

Amazon で見る

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

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

コメントを残す

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

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

トップへ戻る