The DHCP server must send the address of the TFTP or HTTP server and the filename of the initial boot loader to the ESXi host.
When the target machine first boots, it broadcasts a packet across the network requesting information to boot itself. The DHCP server responds. The DHCP server must be able to determine whether the target machine is allowed to boot and the location of the initial boot loader binary. For PXE boot, the location is a file on a TFTP server. For UEFI HTTP boot, the location is a URL.
There are many DHCP servers that you can use. The following examples are for an ISC DHCP server. If you are using a version of DHCP for Microsoft Windows, see the DHCP server documentation to determine how to pass the next-server and filename arguments to the target machine.
Example of Booting Using PXE and TFTP with IPv4
This example shows how to configure an ISC DHCP server to PXE boot ESXi using a TFTP server at IPv4 address xxx.xxx.xxx.xxx.
# # ISC DHCP server configuration file snippet. This is not a complete # configuration file; see the ISC server documentation for details on # how to configure the DHCP server. # allow booting; allow bootp; option client-system-arch code 93 = unsigned integer 16; class "pxeclients" { match if substring(option vendor-class-identifier, 0, 9) = "PXEClient"; next-server xxx.xxx.xxx.xxx; if option client-system-arch = 00:07 or option client-system-arch = 00:09 { filename = "mboot.efi"; } else { filename = "pxelinux.0"; } }
When a machine attempts to PXE boot, the DHCP server provides an IP address and the location of the pxelinux.0 or mboot.efi binary file on the TFTP server.
Example of Booting Using PXE and TFTP with IPv6
This example shows how to configure an ISC DHCPv6 server to PXE boot ESXi using a TFTP server at IPv6 address xxxx:xxxx:xxxx:xxxx::xxxx.
# # ISC DHCPv6 server configuration file snippet. This is not a complete # configuration file; see the ISC server documentation for details on # how to configure the DHCP server. # allow booting; allow bootp; option dhcp6.bootfile-url code 59 = string; option dhcp6.bootfile-url "tftp://[xxxx:xxxx:xxxx:xxxx::xxxx]/mboot.efi";
When a machine attempts to PXE boot, the DHCP server provides an IP address and the location of the mboot.efi binary file on the TFTP server.
Example of Booting Using iPXE and HTTP with IPv4
This example shows how to configure an ISC DHCP server to boot ESXi by loading iPXE from a TFTP server at IPv4 address xxx.xxx.xxx.xxx.
# # ISC DHCP server configuration file snippet. This is not a complete # configuration file; see the ISC server documentation for details on # how to configure the DHCP server. # allow booting; allow bootp; option client-system-arch code 93 = unsigned integer 16; class "pxeclients" { match if substring(option vendor-class-identifier, 0, 9) = "PXEClient"; next-server xxx.xxx.xxx.xxx; if option client-system-arch = 00:07 or option client-system-arch = 00:09 { if exists user-class and option user-class = "iPXE" { # Instruct iPXE to load mboot.efi as secondary bootloader filename = "mboot.efi"; } else { # Load the snponly.efi configuration of iPXE as initial bootloader filename = "snponly.efi"; } } else { if exists user-class and option user-class = "iPXE" { # Instruct iPXE to load pxelinux as secondary bootloader filename = "pxelinux.0"; } else { # Load the undionly configuration of iPXE as initial bootloader filename = "undionly.kpxe"; } }
When a machine attempts to PXE boot, the DHCP server provides an IP address and the location of the undionly.kpxe or snponly.efi binary file on the TFTP server. In the legacy BIOS case, iPXE then asks the DHCP server for the next file to load, and the server returns pxelinux.0 as the filename. In the UEFI case, iPXE then asks the DHCP server for the next file to load, and this time the server returns mboot.efi as the filename. In both cases, iPXE is resident and the system has HTTP capability. As a result, the system can load additional files from an HTTP server.
Example of Booting Using iPXE and HTTP with IPv6
This example shows how to configure an ISC DHCPv6 server to boot ESXi by loading iPXE from a TFTP server at IPv6 address xxxx:xxxx:xxxx:xxxx::xxxx.
# # ISC DHCPv6 server configuration file snippet. This is not a complete # configuration file; see the ISC server documentation for details on # how to configure the DHCP server. # allow booting; allow bootp; option dhcp6.bootfile-url code 59 = string; if exists user-class and option user-class = "iPXE" { # Instruct iPXE to load mboot.efi as secondary bootloader option dhcp6.bootfile-url "tftp://[xxxx:xxxx:xxxx:xxxx::xxxx]/mboot.efi"; } else { # Load the snponly.efi configuration of iPXE as initial bootloader option dhcp6.bootfile-url "tftp://[xxxx:xxxx:xxxx:xxxx::xxxx]/snponly.efi"; }
When a machine attempts to PXE boot, the DHCP server provides an IP address and the location of the snponly.efi (iPXE) binary file on the TFTP server. iPXE then asks the DHCP server for the next file to load, and this time the server returns mboot.efi as the filename. iPXE is resident and the system has HTTP capability. As a result, the system can load additional files from an HTTP server.
Example of Booting Using UEFI HTTP with IPv4
This example shows how to configure an ISC DHCP server to boot ESXi by using native UEFI HTTP over IPv4 from Web server www.example.com.
# # ISC DHCP server configuration file snippet. This is not a complete # configuration file; see the ISC server documentation for details on # how to configure the DHCP server. # allow booting; allow bootp; option client-system-arch code 93 = unsigned integer 16; class "httpclients" { match if substring(option vendor-class-identifier, 0, 10) = "HTTPClient"; option vendor-class-identifier "HTTPClient"; if option client-system-arch = 00:10 { # x86_64 UEFI HTTP client filename = http://www.example.com/esxi/mboot.efi; } }
Example of Booting Using UEFI HTTP with IPv6
This example shows how to configure an ISC DHCPv6 server to boot ESXi by using native UEFI HTTP over IPv6 from Web server www.example.com.
# # ISC DHCPv6 server configuration file snippet. This is not a complete # configuration file; see the ISC server documentation for details on # how to configure the DHCP server. # allow booting; allow bootp; option dhcp6.bootfile-url code 59 = string; option dhcp6.user-class code 15 = { integer 16, string }; option dhcp6.vendor-class code 16 = { integer 32, integer 16, string }; if option dhcp6.client-arch-type = 00:10 { # x86_64 HTTP clients option dhcp6.vendor-class 0 10 "HTTPClient"; option dhcp6.bootfile-url "http://www.example.com/esxi/mboot.efi"; }