If you operate a home network, you know it can be a configuration headache. DNS can be particularly frustrating; a lot of folks take the easy way out and point their browsers at their ISP's DNS servers, rather than deal with BIND, the defacto standard Intenet name server program. Further, not much guidance exists for naming behind masquerade firewalls. Here, I want to take the opportunity to describe what I've done on my home networks, to include useful tools that I've both found and developed.
Also, as home appliances are increasingly network-aware, we need easy ways to manage their participation on our household networks. I'm also interested in using off-the-shelf LAN and internetworking technologies in model railroad control applications, where the tendency is to "roll-your-own" with RS-485 and proprietary standards.
Note: The following discussion assumes a Unix or Linux router. You Windows folks are on your own here... :-)
Using BIND for caching-only name serving is overkill. Also, it is tedious to configure to serve unregistered host names behind a firewall. Accordingly, there are alternative products that do the job more cleanly and simply. Of them, I am most partial to dnsmasq, written by Simon Kelley, available at http://thekelleys.org.uk/dnsmasq/doc.html. It is tailored specifically to the home LAN situation; it pretty much does it's thing with no extra configuration. It finds your off-site DNS servers from your resolv.conf, it adjusts its configuration based on your connection states, and it even collects host names from /etc/hosts and dhcpd.leases and serves them up under a domain name of your choice. That last capability is significant; no more tedious zone file maintenance!
I currently use dnsmasq behind a dialup network connection, so I configure it to to pick up DNS servers from my ppp configuration. I also specify a domain-suffix of "local," so all my host names can be got as either "host" or "host.local". I put all my static IP assignments in /etc/hosts, with the simple hostname first, and the host.local name last on the line. This is particularly important for a tool I'll describe later. I specify my router as the DNS server in my dhcpd.conf file, so anyone with a laptop using my network automatically gets the right configuration. I have multiple dialup connections, so this allows hosts behind the firewall to not concern themselves with network configurations; in fact, I've disconnected my router from one ISP and connected to another and (with the exception of brower proxy configurations, grrr....) the laptops never missed a packet. With dnsmasq, it is really that simple...
I believe that we will see more network-aware, web-enabled appliances in the next few years. Our routers and wireless access points are good examples - plug 'em into the network and point a browser at them to configure. With that in mind, I've begun to think about what it would take to effectively manage all the different things you could find hanging on your LAN: TVs, stereos, refrigerators, thermostats, security systems, the list is endless (I did stay away from the toaster...:-). DHCP and dnsmasq or any other home-scaled DNS server are critical pieces to making everything work - we should be able to plug a device into a LAN port (or just turn it on and have it find a WAP) and it configures itself to participate on the network.
Toward that end, I wrote a .cgi script to accompany dnsmasq that displays all the hosts served by the name server, either from /etc/hosts or dhcpd.leases. It also pings each host to make sure it's there, determines if a web server is listening on TCP port 80, and makes the hostname a link to the webserver. Here's an example of its output.
You can download it from here:
The script requires dnsmasq, Perl 5 or later, and a ping program. Just put the script in a directory where your web server can run it. You may have to mess with the configuration variables at the top of the program to make sure it can see the dnsmasq.conf file, and to properly execute the ping command; I configured it to use the ping accompanying SuSE Linux. You may have to put a path in front of "ping" if the web server path doesn't cover the executable's location.
Now, as I plug new computers into my network, they show up on the dnsmasq.cgi page. I was slightly disappointed with my Linksys WAP11 802.11b wireless access point; you can configure it to get its IP from a DHCP server, but it apparently does not supply its client name to the server. I had to give it a static address and put an entry in /etc/hosts. Network-aware device manufacturers need to get this right...
As of: 22:00 KST, 20 April 2003