[CentOS] UEFI and PXE

Fri Apr 26 04:59:05 UTC 2019
Steven Tardy <sjt5atra at gmail.com>

On Thu, Apr 25, 2019 at 8:46 PM Chris Adams <linux at cmadams.net> wrote:

> Once upon a time, Steven Tardy <sjt5atra at gmail.com> said:
> > The “ICMP unreachable” should be a dead giveaway. . .
> You cut out the part of the email where the OP said that the UEFI system
> was ignoring the next-server part of the DHCP reply and trying to TFTP
> to the DHCP server instead of the TFTP server.  Of course that got ICMP
> unreachable, but it isn't a firewall problem.
> To the OP: can you post a full tcpdump decode of the DHCP offer?  I
> seem to remember having some issue with ISC DHCP in the past not getting
> the next server set correctly - maybe a packet will jog some memory (and
> I'll go try to grab the same from my dnsmasq DHCP for comparison).

Just set up ISC DHCP on fresh CentOS 7 install and followed the redhat
guide linked in this thread.
Did what I thought was correct and duplicated the OPs problem.
/me scratches head. . . off to `tcpdump -vv -nn -i ens192`. . . packets
never lie. . .
            Vendor-Class Option 60, length 32:

d'oh; I did _lower case_ a string in dhcpd.conf line on accident while
                match if substring (option vendor-class-identifier, 0, 9) =

Changed it to follow redhat guide CAMELCase and poof,
                match if substring (option vendor-class-identifier, 0, 9) =

PXEClient tried to reach out "next-server".
00:42:24.606544 IP >  50 RRQ
"pxelinux/bootx64.efi" octet tsize 0 blksize 1468

If the OP still can't get this working, packet captures really do help. (;

[root at DHCPServer ~]# cat /etc/dhcp/dhcpd.conf
option arch code 93 = unsigned integer 16; #RFC 4578
subnet netmask {
        option routers;
        class "pxeclients" {
                match if substring (option vendor-class-identifier, 0, 9) =
                if option arch = 00:06 {
                        filename = "pxelinux/bootia32.efi";
                } else if option arch = 00:07 {
                        filename = "pxelinux/bootx64.efi";
                } else {
                        filename = "pxelinux/pxelinux.0";