Bug #13573
closedDHCP Server generates an invalid configuration for static mappings when defining network booting and UEFI HTTPBoot URL
100%
Description
If I go down to Network Booting, check enable, and add a UEFI HTTPBoot URL pfSense adds an option for every static mapping
host s_lan_0 {
hardware ethernet ...
fixed-address ...
option host-name ...
option custom-s_lan_0-0 "HTTPClient";
}
On service restart logs show Oct 18 09:46:13 dhcpd 2326 /etc/dhcpd.conf line 43: unknown option dhcp.custom-s_lan_0-0
for each static lease and then the server crashes.
I nuked all these on the CLI and restarted the server with /usr/local/sbin/dhcpd -user dhcpd -group _dhcp -chroot /var/dhcpd -cf /etc/dhcpd.conf -pf /var/run/dhcpd.pid
and everything worked as expected until the next service restart when the config was overwritten.
If I disable network booting and restart these are removed and the server starts.
Related issues
Updated by Jason Montleon about 2 years ago
May be the same or related to https://redmine.pfsense.org/issues/13554, but this was referencing vlan configuration instead of static mappings, so I am not certain.
Updated by Kris Phillips about 2 years ago
I'm unable to reproduce this in pfSense Plus 23.01. Can you please test this on the latest development version to verify it's fixed?
I did the following:
1. Added static mapping
2. Enabled Network Booting, set a "Next Server IP", and a HTTPBoot path.
3. Saved, applied, and restarted dhcpd
The service seems to have started each time without issue.
Updated by Jason Montleon almost 2 years ago
This still happens for me on 23.01-RELEASE.
Feb 16 21:48:55 dhcpd 35012 exiting.
Feb 16 21:48:55 dhcpd 35012 process and the information we find helpful for debugging.
Feb 16 21:48:55 dhcpd 35012 before submitting a bug. These pages explain the proper
Feb 16 21:48:55 dhcpd 35012 bugs on either our web page at www.isc.org or in the README file
Feb 16 21:48:55 dhcpd 35012 than a configuration issue please read the section on submitting
Feb 16 21:48:55 dhcpd 35012 If you think you have received this message due to a bug rather
Feb 16 21:48:55 dhcpd 35012 Configuration file errors encountered -- exiting
Feb 16 21:48:55 dhcpd 35012 ^
Feb 16 21:48:55 dhcpd 35012 option custom-s_lan_34-0 "HTTPClient"
Feb 16 21:48:55 dhcpd 35012 /etc/dhcpd.conf line 319: unknown option dhcp.custom-s_lan_34-0
...
If I uncheck 'Enable network booting' and save the server starts up as expected.
Updated by Jason Montleon almost 2 years ago
Commenting this line causes it to work as expected.
https://github.com/pfsense/pfsense/blob/master/src/etc/inc/services.inc#L1388
Updated by Jim Pingle almost 2 years ago
- Project changed from pfSense Plus to pfSense
- Category changed from DHCP Server (IPv4) to DHCP (IPv4)
- Status changed from Feedback to New
- Target version set to 2.7.0
- Affected Plus Version deleted (
22.05) - Plus Target Version set to 23.05
Updated by Jim Pingle over 1 year ago
- Has duplicate Bug #13554: Configuration file error caused by setting UEFI HTTPBoot URL in DHCP Service added
Updated by Jim Pingle over 1 year ago
- Status changed from New to In Progress
- Assignee set to Jim Pingle
I was able to replicate this from a stock config with just three changes:
- Network booting checked
- HTTPBoot URL defined
- One static mapping entry on the interface
Without a static mapping, there was no error.
It appears to be trying to reuse the global numbered options for the static mapping but forming the name incorrectly or failing to re-define it. Not exactly clear yet.
Here is the entire generated configuration:
option domain-name "home.arpa"; option ldap-server code 95 = text; option domain-search-list code 119 = text; option arch code 93 = unsigned integer 16; # RFC4578 option custom-lan-0 code 60 = text; default-lease-time 7200; max-lease-time 86400; log-facility local7; one-lease-per-client true; deny duplicates; update-conflict-detection false; authoritative; class "s_lan" { match pick-first-value (option dhcp-client-identifier, hardware); } subnet 192.168.1.0 netmask 255.255.255.0 { pool { range 192.168.1.100 192.168.1.199; } option routers 192.168.1.1; option domain-name-servers 192.168.1.1; ping-check true; option custom-lan-0 "HTTPClient"; if substring (option vendor-class-identifier, 0, 10) = "HTTPClient" { filename "http://10.34.0.55:1234/tftp/ipxe.efi"; } } host s_lan_0 { hardware ethernet 90:ec:77:47:5e:58; fixed-address 192.168.1.9; option host-name "blah"; option custom-s_lan_0-0 "HTTPClient"; } subclass "s_lan" 1:90:ec:77:47:5e:58;
Note that in the definition at the top and on the interface it's custom-lan-0
but in the static mapping the name is option custom-s_lan_0-0
.
Looking at the code it appears to be using the wrong variables for that section, it's checking the pool config when it should be checking the static mapping config.
Updated by Jim Pingle over 1 year ago
- Subject changed from Adding a UEFI HTTPBoot URL and enabling network booting with static mappings causes dhcpd to crash to DHCP Server generates an invalid configuration for static mappings when defining network booting and UEFI HTTPBoot URL
So not only was this breaking HTTPBoot in general with static mappings, but it also was preventing that option from being used on a per-mapping basis. Fix coming momentarily that addresses both.
Updated by Jim Pingle over 1 year ago
- Status changed from In Progress to Feedback
- % Done changed from 0 to 100
Applied in changeset e5e1e8f9c498e1e5094394a049bb62d09ec8e034.
Updated by Jason Montleon over 1 year ago
I added a custom system patch with this and it works for me. Thank you!
Updated by Lev Prokofev over 1 year ago
Able to reproduce on
23.01-RELEASE (amd64) built on Fri Feb 10 20:06:33 UTC 2023 FreeBSD 14.0-CURRENT
After the patch, I can start the DHCP server normally.