Network booting via TFTP (Trivial File Transfer Protocol) offers a flexible and efficient way to deploy operating systems, perform system recovery, and manage diskless workstations. By centralizing boot images on a Tftp Boot Server, administrators can streamline system provisioning and maintenance across a network. This guide provides a comprehensive walkthrough on how to set up a TFTP boot server, focusing on key configurations and best practices for an English-speaking audience seeking to implement network booting solutions.
If your environment requires booting machines over a local area network, utilizing a TFTP server is a viable solution. This method involves booting a client machine from boot files hosted on a remote server. To achieve this, you’ll need to configure a designated machine as a TFTP server, and in many cases, a DHCP (Dynamic Host Configuration Protocol) or BOOTP (Bootstrap Protocol) server to facilitate the boot process for your target machines.
BOOTP and DHCP are IP protocols that automatically assign IP addresses to network devices and inform them about the location of boot images on the network. DHCP is essentially an enhanced, backward-compatible version of BOOTP, offering more features and flexibility. While some legacy systems might rely on BOOTP, DHCP is generally preferred for modern network environments.
The TFTP server then steps in to serve the necessary boot image files to the client machine initiating the network boot. In theory, any server operating system capable of running these protocols can be configured as a TFTP boot server. This guide will provide configuration examples primarily for GNU/Linux environments, which are widely used for server deployments.
For Debian GNU/Linux server environments, tftpd-hpa
is highly recommended as a TFTP server solution. Developed by the same author as the syslinux
bootloader, it is known for its reliability and minimal issues. atftpd
is also a robust alternative to consider.
Configuring a DHCP Server
A DHCP server is crucial for network booting in most modern networks. It dynamically assigns IP addresses and provides essential network configuration details to client machines, including the location of the TFTP server and the boot file. ISC dhcpd
is a popular and feature-rich DHCP server software. For Debian GNU/Linux distributions, the isc-dhcp-server
package is the recommended choice.
Below is a sample configuration file (/etc/dhcp/dhcpd.conf
) for ISC dhcpd
, illustrating a typical setup for network booting:
option domain-name "example.com";
option domain-name-servers ns1.example.com;
option subnet-mask 255.255.255.0;
default-lease-time 600;
max-lease-time 7200;
server-name "servername";
subnet 192.168.1.0 netmask 255.255.255.0 {
range 192.168.1.200 192.168.1.253;
option routers 192.168.1.1;
}
host clientname {
filename "/tftpboot.img";
server-name "servername";
next-server servername;
hardware ethernet 01:23:45:67:89:AB;
fixed-address 192.168.1.90;
}
In this configuration example:
servername
acts as the DHCP server, TFTP server, and network gateway.- You’ll need to customize
domain-name
options to match your network environment. - Adjust
server-name
and clienthardware ethernet
address accordingly. - The
filename
option specifies the boot file (/tftpboot.img
in this case) that the client will download via TFTP.
After modifying the dhcpd.conf
file, restart the DHCP server service to apply the changes:
/etc/init.d/isc-dhcp-server restart
Enabling PXE Boot via DHCP
Pre-boot Execution Environment (PXE) boot is a widely adopted industry standard for network booting. PXE allows a client machine to boot directly from the network interface, retrieving the boot image via TFTP. To enable PXE boot in your DHCP configuration, you’ll need to adjust the dhcpd.conf
file.
Here’s an example of a dhcp.conf
configuration snippet configured for PXE booting:
option domain-name "example.com";
default-lease-time 600;
max-lease-time 7200;
allow booting;
allow bootp;
subnet 192.168.1.0 netmask 255.255.255.0 {
range 192.168.1.200 192.168.1.253;
option broadcast-address 192.168.1.255;
option routers 192.168.1.1;
option domain-name-servers 192.168.1.3;
}
group {
next-server 192.168.1.3;
host tftpclient {
hardware ethernet 00:10:DC:27:6C:15;
filename "pxelinux.0";
}
}
Key points in this PXE configuration:
allow booting; allow bootp;
directives enable booting and BOOTP support.next-server 192.168.1.3;
specifies the TFTP server IP address.filename "pxelinux.0";
indicates thatpxelinux.0
is the boot loader to be retrieved via TFTP.pxelinux.0
is a common boot loader used for PXE booting systems with BIOS firmware.
For machines using UEFI (Unified Extensible Firmware Interface) instead of BIOS, you need to specify a UEFI-compatible boot loader in the DHCP configuration. For example:
group {
next-server 192.168.1.3;
host tftpclient {
hardware ethernet 00:10:DC:27:6C:15;
filename "debian-installer/amd64/bootnetx64.efi";
}
}
In this UEFI example, debian-installer/amd64/bootnetx64.efi
is used as the filename. This is a UEFI boot loader suitable for AMD64 architecture, commonly used for Debian installer network booting. Adjust the path and filename according to your specific boot environment and architecture.
Setting up a BOOTP Server
While DHCP is generally preferred, BOOTP can still be used for network booting, especially in simpler network environments or when dealing with older hardware. GNU/Linux offers several BOOTP server options, including CMU bootpd
and ISC dhcpd
(which can also function as a BOOTP server). In Debian GNU/Linux, bootpd
is available in the bootp
package and isc-dhcp-server
in its respective package.
To use CMU bootpd
, first ensure it’s enabled in /etc/inetd.conf
. In Debian, you can use the following commands:
update-inetd --enable bootps
/etc/init.d/inetd reload
For systems other than Debian, the relevant line in /etc/inetd.conf
should resemble:
bootps dgram udp wait root /usr/sbin/bootpd bootpd -i -t 120
Next, create or edit the /etc/bootptab
file. This file, similar to older BSD configuration files, contains BOOTP configuration entries. You’ll need the client’s hardware (MAC) address for this configuration. Here’s an example /etc/bootptab
entry:
client:
hd=/tftpboot:
bf=tftpboot.img:
ip=192.168.1.90:
sm=255.255.255.0:
sa=192.168.1.1:
ha=0123456789AB:
In this example:
ha=0123456789AB
must be replaced with the client’s hardware address.bf=tftpboot.img
specifies the boot file to be retrieved via TFTP.hd=/tftpboot
defines the server’s TFTP root directory.
Using ISC dhcpd
as a BOOTP server is often simpler. It treats BOOTP clients as a special case of DHCP clients. For many setups, adding allow bootp
directive to the subnet configuration block in /etc/dhcp/dhcpd.conf
and restarting dhcpd
is sufficient:
subnet 192.168.1.0 netmask 255.255.255.0 {
# ... other options ...
allow bootp;
}
Then restart the DHCP server:
/etc/init.d/isc-dhcp-server restart
Enabling the TFTP Server
To make the TFTP server operational, ensure that the tftpd
service is enabled and running.
With tftpd-hpa
, the service can be run in two modes: on-demand via inetd
or as a standalone daemon. The mode is typically selected during package installation and can be changed by reconfiguring the package.
Historically, /tftpboot
was the standard directory for TFTP server images. However, modern Debian GNU/Linux packages, like tftpd-hpa
, may use different directories, such as /srv/tftp
, to comply with the Filesystem Hierarchy Standard. Adjust your configurations according to the directory used by your TFTP server.
Most in.tftpd
implementations in Debian log TFTP requests to system logs by default. Some support the -v
(verbose) option for increased logging detail. Checking these logs is crucial for troubleshooting boot issues and diagnosing error causes.
Moving TFTP Images into Place
Finally, you need to place the necessary TFTP boot images in the TFTP server’s root directory. These images are typically found as described in resources detailing installation file locations for network booting.
For PXE booting, the netboot/netboot.tar.gz
archive usually contains all required files. Simply extract this archive into your TFTP server’s root directory (e.g., /srv/tftp
or /tftpboot
). Ensure your DHCP server is configured to provide pxelinux.0
(or the appropriate boot loader) as the filename to the TFTP server for booting.
For UEFI-based machines, ensure you are providing the correct EFI boot image filename in your DHCP configuration, such as /debian-installer/amd64/bootnetx64.efi
, and that this file is present in the TFTP server’s directory structure.
By correctly setting up DHCP or BOOTP, enabling the TFTP server, and placing the boot images in the appropriate location, you’ll establish a functional TFTP boot server environment, ready to network boot your client machines. Remember to consult your specific operating system and network environment documentation for any adjustments or specific configurations that may be required.