跳转至内容

TFTP

来自 ArchWiki
(从 Tftpd server 重定向而来)

简单文件传输协议 (TFTP) 提供了一种最小化的文件传输方式。它通常用作 PXE 引导的一部分,或者用于更新内存有限的设备(如路由器、IP电话和打印机)的配置和固件。

服务器

有几种 TFTP 服务器实现,其中一些列在下面。

注意 确保不要同时运行不同的 TFTP 实现。它们会因为“got more than one socket”的错误而失败,因为只有一个可以监听默认的 TFTP 端口 69

tftp-hpa

安装 tftp-hpa,然后 启动 tftpd.service

要修改服务参数,请编辑 /etc/conf.d/tftpd

URL重写

该服务器通过 --map-file 选项(某些版本中为 --mapfile)提供了一个有用的 URL 重写功能。它允许通过正则表达式修改请求,因此服务器上的文件不必与客户端看到的文件视图匹配,并且即使不同客户端请求同一个文件,也可以返回不同的文件。

通过将 --map-file /etc/tftpd.map 添加到 /etc/conf.d/tftpd 并创建类似这样的文件来配置映射:

/etc/tftpd.map
# Add the remote IP address as a folder on the front of all requests.
r ^ \i/

这个示例文件将导致每个 TFTP 请求都被远程 IP 地址作为前缀。例如,如果 IP 地址为 192.168.0.1 的机器请求“boot.bin”,并且 TFTP 服务器根目录是 /srv/tftp,那么将返回文件 /srv/tftp/192.168.0.1/boot.bin(如果服务器监听的是 IPv6 端口,则为 /srv/tftp/::ffff:192.168.0.1/boot.bin)。

可用的映射文件选项在 in.tftpd(8) § FILENAME REMAPPING 中有说明。

调试

可以使用 --verbosity 5 选项打开所有调试消息。这对于诊断机器为何无法成功从网络启动非常有用,因为调试消息列出了所有文件请求,是否使用了重写规则,文件是从文件系统的哪里读取的,以及请求是否成功。

无法将消息记录到 stdout/stderr,因为它只支持 syslog。这意味着消息可以通过 journalctl 或类似工具查看。

atftp

安装 atftp,然后 启动 atftpd.service

要修改服务参数,请编辑 /etc/conf.d/atftpd

uftpd

uftpdAUR 是一个 简单的 (T)FTP 服务器,可以从命令行运行。

# uftpd -n -o ftp=0,tftp=69 /tmp/tftp

选项 -o ftp=0 会禁用 FTP 服务器,只运行 TFTP。服务器默认以只读模式运行,传递 -o writable 允许客户端将文件上传到服务器。在默认端口的情况下,-o tftp=69 是多余的,但它展示了选择其他端口的方式。

dnsmasq

注意 dnsmasq 不支持文件上传。

参见 dnsmasq#TFTP server

客户端

tftp-hpa

安装 tftp-hpa,然后尽情 TFTP 吧!

$ tftp

atftp

软件包 atftp 包含服务器和客户端,支持交互式和批量模式。客户端二进制文件是 atftp,支持获取和上传文件。

curl

标准的 curl 可以通过以下方式连接到 TFTP 服务器并上传文件:

$ curl -T FILE tftp://HOST

下载文件

$ curl -o DESTINATION tftp://HOST/file

其中 file 是相对于 TFTP 根目录的。