People always say that "tftp is anything but trivial" and if you've implemented it, you know how true this is. We have multiple Citrix XenDesktop and Provisioning Server farms were looking for a simple highly avaialble solution to provide TFTP to a dozen or more vlans. Each PVS farm services 5+ or more vlans and used the solution outlined here to stream to multiple networks from one PVS server. But how do you provide the TFTP boot file to all these networks?
Along came Infoblox TFTP and this is how we did it:
Infoblox TFTP Configuration and Setup (Recommend Infoblox version 6.6.5 or higher)
- One TFTP service in each datacenter (total of 3)
- Globally Load Balance URL using DNS Topology which would direct the client to typically request the boot file (ardbp32.bin) from the local TFTP server.
- Created a virtual directory for each vlan/subnet (make sure to keep the folder name at 13 character or less - known bug.)
- Create the ARDBP32.BIN files for each network using the Provisioning Services Console by:
- Going to Servers > Right click on a Server > Select Configure Bootstrap > Config as needed and click Ok.
- Then grab the ARDBP32.BIN file from C:\ProgramData\Citrix\Provisioning Services\Tftpboot to upload to the Infoblox TFTP virtual directory.
- Repeat for each network.
- Note: Another option is to rename the file and place in the root virtual directory (i.e. ARDBP32_123.BIN)
- TFTP virtual directories replicate to other members in the Grid so you only need to upload to one virtual directory.
Infoblox DHCP Configuration and Setup (Recommend Infoblox version 6.7.3 or higher)
- For each DHCP Scope, setup the following:
- General > Advanced Tab > check off Ignore DHCP Client Unique Identifier
(UID) when a new lease is requested if not inherited from Grid
- IPv4 DHCP Options > Basic tab
- Lease time should be at minimum of 1 day
- IPv4 DHCP Options > Advanced Tab
- Check off the Ignore optionlist requested by client
and return all defined options if not inherited from Grid (Note: This resolves known issues with PVS targets having two preferred ip addresses.)
- IPv4 BOOTP/PXE > Basic tab
- Under BootP Settings
- Boot File = ARDBP32.BIN (Note: This is case sensitive and needs to match the case used for the file in the TFTP virutal directory)
- Next Server = GTM/GSLB alias/url (i.e. tftp.yourdomain.com) Note: you could simply testing by entered an IP address of the Infoblxo TFTP servers as well but that won't get you HA!)
- In the Infoblox Grid Properties or Member Properties for DHCP, select the DNS Resolver tab, and then select Enable DNS Resolver. This allows DHCP to resolve the tftp.yourdomain.com alias and past an IP address to the client in the Next Server field.
A bunch of network traces and even a case or two and finally have it all working - Highly Available TFTP for PVS! Below is an example of how it all could work.
Note: If Infoblox is not at 6.7 or higher you may see these PXE errors on boot if your virtual directories are longer than 13 characters.
PXE-T04 Request not null-terminated
PXE-E36 Error received from TFTP server
PXE-M0F: Exiting Intel PXE ROM