Registering linux hostnames on windows DNS

How do I register DHCP linux client's hostnames in a windows server DNS?

I have a small-business mixed network with:

  • DCHP Windows workstations (Example hostname: win1)
    • About 10 machines
    • Machines are on the domain, no special config.
  • DHCP Linux (Debian stretch) workstations (Example hostname: lin1)
    • About 20 machines
    • Connected to domain with sssd using realm join
    • Can use AD credentials on any machine
    • /etc/nsswitch.conf contains hosts: files dns which I think means that linux clients can import hostnames from the DNS
  • DHCP/DNS server running Windows Server at a static IP

From any machine I can ping win1, but can't ping lin1 which tells us:

  • all machines use the DNS fine (can ping win1)
  • windows hostnames are automatically registered
  • linux hostnames are not automatically registered

Rejected solutions:

  • hosts: We don't have static IPs so I'm not going to manually maintain a master copy of the hosts file and distribute it whenever a new DHCP lease is issued.
  • Adding A records to DNS: Again, I don't want to manually update records when new DHCP leases are issued.
  • avahi: The windows clients can't see the linux ones.

Things I haven't tried:

  • likewise: I'd rather not abandon sssd and reconfigure all 20 machines from scratch like this. But if lw-register-dns would solve the problem and wouldn't conflict with sssd, then that could be a solution. Still find it weird that clients would need to create a cron-job to modify the DNS, I optimally want to limit DNS write-access.
  • winbind, also seems to replace sssd completely. I tried the linked suggestion, but saw no differences after restarting the client's networking service.
  • nmbd. The workstations already use smbclient, do they really need to become full-fledged samba servers too?
  • net ads dns register -P. I'll need to get access to the DNS to enable insecure updates.

Solution 1:

/etc/nsswitch.conf contains hosts: files dns which I think means that linux clients can import hostnames from the DNS

The assumption you've made is incorrect. That line indicates how the system will try to lookup the hostname or domain name you've entered. For example when pinging a domain name, or when typing a url in the browser. files refer's to /etc/hosts and is where you can manually specify domain to ip bindings. dns refer's to the DNS servers that are in use by your system. So with your config, if you were to type in ping google.com the system would look for google.com and an associated ip in files (/etc/hosts) first, then it would check DNS if it didn't find a match in /etc/hosts.

When the Windows machines join the domain they become a trusted resource. At the time of joining the domain a DNS record is created for them if that service is installed on the Domain and managed by AD. To allow non-windows machines to register their hostnames in DNS the zone must be configured to allow updates. The non-windows machine also needs to have the correct domain configured in the /etc/hostname file so that it matches the domain name of your AD environment.

Solution 2:

So the final answer was not on the linux-client side at all, but on the DHCP configuration.

On "Windows Server 2016 Standard" I had to do the following to get this working.

  1. Open the "DHCP" desktop app
  2. Select the DNS tab
  3. Expand the node representing your domain
  4. Right click on "IPv4"
  5. Select "Properties" from the context menu
  6. Check "Enable DNS dynamic updates according to the settings below:"
    1. Select "Always dynamically update DNS records"
  7. Check "Dynamically update DNS records for DHCP clients that do not request updates"

The results were not immediate. Rebooting machines did not force the update. I made the change on Friday, and by Wednessday all Linux clients seemed to be listed in the DNS.

I was able to confirm the additions by viewing the "DNS Manager" on the same server.