5.

TFTP (Trivial File Transfer Protocol) 完全ガイド

編集
この記事の要点
  • TFTP (Trivial File Transfer Protocol, RFC 1350)UDP/69 上で動く軽量ファイル転送プロトコル
  • 認証なし・暗号化なし。組込み機器のファームウェア更新 / Cisco 設定保存 / PXE Boot で広く利用
  • デフォルト最大サイズは 32MB(block 番号 16bit × 512 byte)→ RFC 7440 の Windowsize で拡張可
  • Linux は tftpd-hpa、Windows は SolarWinds TFTP Server / Tftpd64 が定番
  • 現代では セキュリティリスクのため公開ネットワーク非推奨、置換候補は SFTP / SCP / HTTPS

TFTP とは

TFTP (Trivial File Transfer Protocol) は、1981 年 RFC 783、現行版 RFC 1350 で定義された極めて軽量なファイル転送プロトコルです。UDP/69 上で動き、認証や暗号化を持たず、コードサイズが非常に小さいためROM に直接焼けるほどです。

項目TFTPFTPSFTP
プロトコルUDP/69TCP/21 (制御), 20 (データ)TCP/22 (SSH)
認証無しパスワード / 匿名SSH 鍵 / パスワード
暗号化無し無しあり
コード規模★ 極小
用途組込み・PXEファイル共有安全な転送

TFTP の利用シーン

  • PXE (Preboot Execution Environment) Boot: ネットワークから OS をブート(DHCP 経由で next-server / filename を取得 → TFTP でロード)
  • ネットワーク機器: Cisco / Juniper の設定ファイル (running-config / startup-config) のバックアップ / リストア
  • 組込み機器のファームウェア更新: WAP / VoIP 電話 / プリンタ
  • VoIP 電話 (Cisco IP Phone): 起動時に SEP<MAC>.cnf.xml を TFTP 取得
  • シンクライアント: イメージのダウンロード

プロトコル詳細

TFTP は 5 種類のパケット (オペコード) で構成されます。

Opcode名前用途
1RRQ (Read Request)クライアント → サーバ。ファイル取得要求
2WRQ (Write Request)クライアント → サーバ。ファイル送信要求
3DATA512 byte ブロック (最後だけ 0-511 byte)
4ACK各 DATA への確認応答
5ERRORエラー通知

転送シーケンス例 (Read)

Client                              Server (UDP/69)
   |  RRQ "boot.img" "octet"          |
   |--------------------------------->|
   |  DATA block#1 (512 byte)         |  (動的ポート, 以後 UDP/N で通信)
   |<---------------------------------|
   |  ACK block#1                     |
   |--------------------------------->|
   |  DATA block#2 (512 byte)         |
   |<---------------------------------|
   |  ACK block#2                     |
   |--------------------------------->|
   |             ...                  |
   |  DATA block#N (< 512 byte)       |  ← 最後のブロックは 512 未満
   |<---------------------------------|
   |  ACK block#N                     |
   |--------------------------------->|

サイズ制限と拡張

ブロック番号が 16bit で 1 ブロック 512 byte のため、最大 65535 × 512 ≒ 32MB。これを超えるファイルは原則送れません。

拡張RFC機能
blksize オプションRFC 2348ブロックサイズを 512 → 65464 まで拡大
timeout オプションRFC 2349タイムアウト値交渉
tsize オプションRFC 2349ファイルサイズ事前通知
windowsizeRFC 7440複数 DATA をまとめて送ってから ACK = スループット向上

Linux での TFTP サーバ構築 (tftpd-hpa)

# インストール
sudo apt-get install tftpd-hpa tftp-hpa

# 設定ファイル
sudo vi /etc/default/tftpd-hpa
# TFTP_USERNAME="tftp"
# TFTP_DIRECTORY="/srv/tftp"
# TFTP_ADDRESS=":69"
# TFTP_OPTIONS="--secure --create"   # --create で WRQ 受付

# 公開ディレクトリ
sudo mkdir -p /srv/tftp
sudo chown tftp:tftp /srv/tftp
sudo chmod 755 /srv/tftp

# サービス起動
sudo systemctl restart tftpd-hpa
sudo systemctl enable tftpd-hpa

# 動作確認 (クライアント)
tftp 192.168.1.10
tftp> get boot.img
tftp> put config.txt
tftp> quit

# ファイアウォール
sudo ufw allow 69/udp

xinetd 版 (古い RHEL 系)

sudo yum install xinetd tftp-server
sudo vi /etc/xinetd.d/tftp
# disable = no
# server_args = -s /var/lib/tftpboot
sudo systemctl restart xinetd

Windows での TFTP サーバ

ソフト特徴
SolarWinds TFTP Server無償。GUI 設定。商用機器ベンダー推奨多数
Tftpd64 / Tftpd32軽量。DHCP / Syslog 機能も統合
WinAgents TFTP Server商用、Windows サービス化
Windows 標準 TFTP クライアント「プログラムと機能」→ Windows 機能の有効化 で追加

Cisco 機器での TFTP 活用

# 設定をバックアップ
Router# copy running-config tftp:
Address or name of remote host []? 192.168.1.10
Destination filename [router-confg]? r1-2026-06-11.cfg

# 設定を投入
Router# copy tftp: running-config
Address or name of remote host []? 192.168.1.10
Source filename []? r1-2026-06-11.cfg

# IOS イメージのアップグレード
Router# copy tftp: flash:
Source filename []? c2900-universalk9-mz.SPA.157-3.M5.bin

# 失敗時の確認
Router# debug tftp
Router# show version

セキュリティの問題

リスク内容
認証なし同一ネットワークから誰でもファイル取得可
平文転送盗聴で全データ漏洩
UDP のため改ざん検知弱中間者攻撃が容易
WRQ 受付時の上書き悪意ある設定ファイル投入

対策: 管理 LAN セグメントに限定 / ファイアウォール厳格化 / 一時的起動のみ / 機微情報は置かない

代替プロトコル

用途推奨代替
機器設定転送SCP / SFTP (SSH ベース)
大量ファイルSFTP / HTTPS
PXE Boot 強化iPXE 経由で HTTPS Boot
組込み更新HTTPS + 署名検証

FAQ

Q: TFTP が「Timeout」で繋がらない
A: 多くはファイアウォール。TFTP は最初 UDP/69 → サーバが動的ポートで応答する特殊仕様のため、conntrack 用ヘルパーモジュール (nf_conntrack_tftp) を読み込まないと NAT 越えで失敗します。

Q: ファイルが 32MB を超えて転送できない
A: blksize オプションでブロックサイズを上げる、または windowsize 拡張対応サーバ / クライアントを使います。Cisco IOS は基本的に対応。

Q: TFTP と FTP の名前は似ているが互換性はある?
A: ありません。FTP は TCP 認証ありの全く別プロトコル。TFTP は名前のとおり「Trivial (簡素化)」版で別仕様です。

編集
Post Share
子ページ

子ページはありません

同階層のページ
  1. HTTP
  2. HTTPS
  3. DNS
  4. FTP
  5. TFTP
  6. DHCP
  7. SMTP
  8. SNMP
  9. POP3
  10. Telnet
  11. NTP
  12. SSH

最近更新/作成されたページ