Netgate Discussion Forum
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Search
    • Register
    • Login

    'Register DHCP static mappings in DNS forwarder' somewhat lacking

    Scheduled Pinned Locked Moved 2.1 Snapshot Feedback and Problems - RETIRED
    28 Posts 9 Posters 8.3k Views
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • N
      NOYB
      last edited by

      Submitted a similar request last year.  But it was rejected for being LAN interface specific and needed to be more "generic".  Does yours addresses that issue?

      DNS Forwarder DHCP Domain Name FIX - /etc/inc/system.inc
      https://github.com/pfsense/pfsense/pull/185

      Then there is also possibly an issue with getting dhcpleases / dnsmasq a few lines further down to work with multiple domains.  I was never able to get it too anyway.

      Here is the code I currently patch with.  It uses the DHCP interface configured domain name.  But it will apply the first one to all I think.

      
      --- /etc/inc/system.inc	2012-08-29 14:11:57.000000000 -0700
      +++ /etc/inc/system.inc.DNSForwarderDHCPDomainName.FIX.Patched	2012-08-30 11:48:47.000000000 -0700
      @@ -274,10 +274,16 @@
       		}
       		if (isset($dnsmasqcfg['regdhcpstatic']) && is_array($config['dhcpd'])) {
       			foreach ($config['dhcpd'] as $dhcpif => $dhcpifconf)
      -				if(is_array($dhcpifconf['staticmap']) && isset($dhcpifconf['enable']))
      +				if(is_array($dhcpifconf['staticmap']) && isset($dhcpifconf['enable'])) {
      +					if ($config['dhcpd'][$dhcpif]['domain'])
      +						$dyndhcpifdomainname = $config['dhcpd'][$dhcpif]['domain'];	// Use Services DHCP Interface Domain Name
      +					else
      +						$dyndhcpifdomainname = $syscfg['domain'];									// Use System General Domain Name
      +
       						foreach ($dhcpifconf['staticmap'] as $host)
       							if ($host['ipaddr'] && $host['hostname'])
      -								$dhosts .= "{$host['ipaddr']}	{$host['hostname']}.{$syscfg['domain']} {$host['hostname']}\n";
      +								$dhosts .= "{$host['ipaddr']}	{$host['hostname']}.{$dyndhcpifdomainname} {$host['hostname']}\n";
      +				}
       		}
       		if (isset($dnsmasqcfg['regdhcpstatic']) && is_array($config['dhcpdv6'])) {
       			foreach ($config['dhcpdv6'] as $dhcpif => $dhcpifconf)
      @@ -281,10 +287,16 @@
       		}
       		if (isset($dnsmasqcfg['regdhcpstatic']) && is_array($config['dhcpdv6'])) {
       			foreach ($config['dhcpdv6'] as $dhcpif => $dhcpifconf)
      -				if(is_array($dhcpifconf['staticmap']) && isset($dhcpifconf['enable']))
      +				if(is_array($dhcpifconf['staticmap']) && isset($dhcpifconf['enable'])) {
      +					if ($config['dhcpdv6'][$dhcpif]['domain'])
      +						$dyndhcpifdomainname = $config['dhcpdv6'][$dhcpif]['domain'];	// Use Services DHCP Interface Domain Name
      +					else
      +						$dyndhcpifdomainname = $syscfg['domain'];									// Use System General Domain Name
      +
       						foreach ($dhcpifconf['staticmap'] as $host)
       							if ($host['ipaddrv6'] && $host['hostname'])
      -								$dhosts .= "{$host['ipaddrv6']}	{$host['hostname']}.{$syscfg['domain']} {$host['hostname']}\n";
      +								$dhosts .= "{$host['ipaddrv6']}	{$host['hostname']}.{$dyndhcpifdomainname} {$host['hostname']}\n";
      +				}
       		}
      
       		if (isset($dnsmasqcfg['dhcpfirst']))
      @@ -327,8 +339,17 @@
       			@touch("{$g['dhcpd_chroot_path']}/var/db/dhcpd.leases");
       		if (isvalidpid("{$g['varrun_path']}/dhcpleases.pid"))
       			sigkillbypid("{$g['varrun_path']}/dhcpleases.pid", "HUP");
      -		else
      -			mwexec("/usr/local/sbin/dhcpleases -l {$g['dhcpd_chroot_path']}/var/db/dhcpd.leases -d {$config['system']['domain']} -p {$g['varrun_path']}/dnsmasq.pid -h {$g['varetc_path']}/hosts");
      +		else {
      +//			foreach ($config['dhcpd'] as $dhcpif => $dhcpifconf) {
      +			$dhcpif = 'lan';
      +				if ($config['dhcpd'][$dhcpif]['domain']) {
      +					$dyndhcpifdomainname = $config['dhcpd'][$dhcpif]['domain'];		// Use Services DHCP Interface Domain Name
      +				} else {
      +					$dyndhcpifdomainname = $config['system']['domain'];				// Use System General Domain Name
      +				}
      +				mwexec("/usr/local/sbin/dhcpleases -l {$g['dhcpd_chroot_path']}/var/db/dhcpd.leases -d {$dyndhcpifdomainname} -p {$g['varrun_path']}/dnsmasq.pid -h {$g['varetc_path']}/hosts");
      +//			}
      +		}
       	} else {
       		sigkillbypid("{$g['varrun_path']}/dhcpleases.pid", "TERM");
       		@unlink("{$g['varrun_path']}/dhcpleases.pid");
      
      
      1 Reply Last reply Reply Quote 0
      • R
        razzfazz
        last edited by

        @NOYB:

        Submitted a similar request last year.  But it was rejected for being LAN interface specific and needed to be more "generic".  Does yours addresses that issue?

        DNS Forwarder DHCP Domain Name FIX - /etc/inc/system.inc
        https://github.com/pfsense/pfsense/pull/185

        Then there is also possibly an issue with getting dhcpleases / dnsmasq a few lines further down to work with multiple domains.  I was never able to get it too anyway.

        I think the complaint about being too LAN-specific is related to the dhcpleases part, which I assume makes this work for dynamic leases as well? The code suggested by TechSmurf does not have this issue because it only deals with static assignments.

        1 Reply Last reply Reply Quote 0
        • R
          razzfazz
          last edited by

          FWIW, the proposed change has been merged into master and RELENG_2_1.

          1 Reply Last reply Reply Quote 0
          • T
            TechSmurf
            last edited by

            Hooray to no more patching ;)

            1 Reply Last reply Reply Quote 0
            • A
              adam65535
              last edited by

              Nice job :).  This probably should be mentioned in the release notes for the final 2.1 that this is a behavior change.  Just in case someone set the DHCP scope domain to something different than the firewall domain for whatever reason.  It would be nice to let them know to check it in case they depend on internal DNS names registered by the DNS Forwarder for resolution.  If they didn't set the DHCP scope domain at all then it will still work as it did before.

              EDIT: rewrote this to make more sense.

              1 Reply Last reply Reply Quote 0
              • M
                msi
                last edited by

                adam, I stumbled acros this thread out of interet in doing so - that means that in the upcoming snapshots I should be able to do the following?

                I'd not want to register in DNS <hostname>. <pfsensedomain.example.org>but wanted to register <hostname>.<network-vlanname>. <pfsense|anyotherdomain.example.org>What would be then be the correct thing to do? Set a domain in the DHCP server for that port dhcpd runs on and "just" tell the DNS server to register it?
                (or is there any other black magic required)

                If so that would a great opportunity to re-jump on a new build :-)</pfsense|anyotherdomain.example.org></network-vlanname></hostname></pfsensedomain.example.org></hostname>

                1 Reply Last reply Reply Quote 0
                • R
                  razzfazz
                  last edited by

                  Yes, but note that this will only work for static leases at this point.

                  1 Reply Last reply Reply Quote 0
                  • K
                    kejianshi
                    last edited by

                    I'm afraid of new things :o

                    1 Reply Last reply Reply Quote 0
                    • First post
                      Last post
                    Copyright 2025 Rubicon Communications LLC (Netgate). All rights reserved.