A home network overengineered: dhcpd, tsig keys, ddns
I started to write this post, explaining how I upgraded my home network setup with a dhcpd server, multiple dns servers communicating securely via tsig keys along with dynamic dns, but the post became unwieldy and would have been thousands of words. Instead, I'll post some links and gotcha's and hints on how to make it work a lot easier.
Links scoured and re-read in the process:
- Securing zone tranfers with TSIG
- Bind Security: Transaction Signatures (TSIG) Configuration
- Security Zone Transfers With Bind 9
Manage the key files distributed to each of your DNS servers with some sort of config management system (I use Puppet). That way if you ever need to change a key or add a new one, it makes things a heck of a lot easier.
Don't stick the TSIG key files inside your named.conf. This posses a security risk because anyone who can read your named.conf, now has access to your TSIG keys and can potentially update your zones. Instead, put them in their own files inside your bind etc directory, mark their perms as 640 (bind:bind, or the like) and use an include statement to get them into your named.conf
Following on that last point, use dns's allow-update statement inside zone definitions on the master. You can either lock things down via IP (less secure) or via Key (more secure) so that only authorized processes or people can update your zones.
If you have FreeBSD clients, don't forget the ‘hostname’ parameter in /etc/rc.conf. Otherwise you'll request a lease from the dhcp server, but never tell your hostname, and therefore won't get a record added to the ddns zone.
Yes, this is a completely over-engineered solution on how to run a home network. It came to be because I play around with lots of VM's at home, and to pique my curiosity bug, wanted to try to get things working end to end. Being able to ssh into the various Linux/OpenBSD/FreeBSD VMs by name made it a lot easier.