TFTP
The Trivial File Transfer Protocol (TFTP) provides a minimalistic means for transferring files. It is generally used as a part of PXE booting or for updating configuration and firmware on devices which have limited memory such as routers, IP phones and printers.
Server
There are several TFTP server implementations, some of which are listed below.
got more than one socket
, because only one may listen to the default TFTP port 69
.tftp-hpa
Install tftp-hpa and then start tftpd.service
.
To modify service parameters edit /etc/conf.d/tftpd
.
URL rewriting
This server includes a useful URL rewriting feature via the --map-file
option (--mapfile
in some versions). It allows requests to be altered via regular expressions so the files on the server do not have to match the view the client sees, and different files can be returned to different clients even if they request the same file.
Configure a map by adding --map-file /etc/tftpd.map
to /etc/conf.d/tftpd
and creating a file such as this:
/etc/tftpd.map
# Add the remote IP address as a folder on the front of all requests. r ^ \i/
This example file will result in each TFTP request being prefixed with the remote IP address. For example if the machine at 192.168.0.1 requests "boot.bin" and the TFTP server root is /srv/tftp
then the file /srv/tftp/192.168.0.1/boot.bin
will be returned (or /srv/tftp/::ffff:192.168.0.1/boot.bin
if the server is listening on an IPv6 port).
The available map file options are documented in in.tftpd(8) § FILENAME REMAPPING.
Debugging
The --verbosity 5
option can be used to turn on all debugging messages. This is very useful for diagnosing why a machine will not successfully boot from the network, as the debug messages list all requests for files, whether rewrite rules were used, where the files were read from on the filesystem and whether the request was successful or not.
It is not possible to log messages to stdout/stderr, as only syslog is supported. This means the messages can be viewed with journalctl or similar.
atftp
Install atftp and then start atftpd.service
.
To modify service parameters edit /etc/conf.d/atftpd
.
uftpd
uftpdAUR is a simple (T)FTP server that can be run from the command line:
# uftpd -n -o ftp=0,tftp=69 /tmp/tftp
The option -o ftp=0
disables the FTP server and only runs TFTP. The server runs in read-only mode by default and passing -o writable
allows clients to put files on the server. The -o tftp=69
is redundant in the case of default port, but shows a way to select a different one.
dnsmasq
See dnsmasq#TFTP server.
Client
tftp-hpa
Install tftp-hpa and then tftp your day away!
$ tftp
atftp
The package atftp contains both a server and a client with interactive and batch mode. The client binary is atftp
and supports both getting and putting files.
curl
Standard curl has an ability to connect to a TFTP server and upload a file via:
$ curl -T FILE tftp://HOST
Download a file:
$ curl -o DESTINATION tftp://HOST/file
Where file
is relative to the TFTP root directory.