• I’m seeking a single-box solution for our fog servers used in our labs. Legacy BIOS is currently working great with the trunk builds, but I am trying to sort out a solution to support both BIOS and UEFI systems. Running DNSMasq on the fog server supports BIOS machines fine, but, as noted in previous threads, UEFI and BIOS cannot coexist with the version of DNSMasq I am using (on Fedora 23).

    The windows-based CloneDeploy proxy DHCP server, when run on windows client connected to the LAN, works as it should, supporting BIOS and UEFI machines that boot from the FOG server’s /tftpboot folder. However, I’d rather not have to worry about keeping track of this task on different hardware.

    My question is, is there something similar to this to run on the fog server instead of DNSMasq? Or does the most recent DNSMasq version solve the UEFI issue?

    I have tried using node-dhcproxy but it bombs out when a machine is discovered:

    [root@localhost node-dhcproxy]# node dhcproxy.js
    server listening:
    proxy listening:
    14 Jul 13:55:14 - Got DHCPDISCOVER from (54:04:a6:2f:3d:1e)  with packet length of 548 bytes
    Received DHCP DISCOVER
          throw new Error(
    Error: If encoding is specified then the first argument must be a string
        at new Buffer (buffer.js:69:13)
        at Packet.toBuffer (/root/git/node-dhcproxy/lib/packet.js:58:12)
        at DHCPServer._send (/root/git/node-dhcproxy/lib/server.js:47:19)
        at DHCPServer.offer (/root/git/node-dhcproxy/lib/server.js:75:15)
        at dhcpd.discover (/root/git/node-dhcproxy/lib/dhcpd.js:97:17)
        at emitTwo (events.js:106:13)
        at DHCPServer.emit (events.js:191:7)
        at DHCPServer._emitPacket (/root/git/node-dhcproxy/lib/server.js:60:15)
        at DHCPServer.<anonymous> (/root/git/node-dhcproxy/lib/server.js:24:20)
        at emitTwo (events.js:106:13)
    [root@localhost node-dhcproxy]# 

    Any suggestions or direction on approaching this would be greatly appreciated. Solving this ProxyDHCP issue is the last hurdle in my path towards simplified lab support ( I am a college art professor with no IT staff support…)

    Thanks, -kurt

  • @kurtblah way to go, and awesome work @Sebastian-Roth!

  • @Sebastian-Roth I had to reinstall node.js, but I followed a different set of directions than before, and wouldn’t you know, node-dhcproxy functions as it should. I’m guessing that I did not have node.js setup properly the last time I ran it. I’ve attached the dump file anyway.


    Thanks for your help on this, it is nice to have another option for our network environment should dnsmasq becomes unusable. -kurt

  • Moderator

    @kurtblah Would you be able to capture those dhcp packets using wireshark/tcpdump? Would be of great help to fix the node-dhcproxy code. Let me know if you need help with those tools. Display filter bootp with wireshark is very helpful. Options for tcpdump would be -i eth0 -o outfile.pcap udp, then open the pcap file in wireshark, display filter bootp and export that to a new pcap file. Please upload the PCAP file here.

  • @Sebastian-Roth yes, consistent behavior every time, and almost instantly when a the client starts up. That’s about all the info I can give you, along with the screen capture above. I quite liked the one from the CloneDeploy project and its debug mode, too bad it only came in the windows flavor. I also tried out PyPXE and proxyDHCPd.

  • Moderator

    @kurtblah Yeah, you are actually the first person I know who looked into using my node-dhcproxy. It’s been more like a proof of concept as not very many people use proxy DHCP and most of them are happy with dnsmasq.

    Would be still interesting to get this sorted for the future. Does it error out with the exact same stack trace on every received DHCP message?

  • That did it, problem solved. Thanks for the info on the new DNSMasq binary.


  • Grab the latest binary of dnsmasq. Support for UEFI in ProxyDHCP mode has been added. See here for details: