TFTP

From ArchWiki

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.

Note: Make sure not to start different TFTP implementations at the same time. They will fail with an error 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

Note: dnsmasq does not support file uploads.

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.