Building a Dynamic DNS Server for Your Enterprise?
Biff98 asks: "We manage thousands of hostnames for field gear with DynDNS.org. It's always been our intention of configuring our own DDNS server and bring it in-house. Given the recent DynDNS outage due to a DDOS attack, resulting in the inability to resolve names for multiple days, there has been 'encouragement' from management to move forward on bringing DDNS in-house. Here's the problem: I can't find any easy-to-use, scalable software to accomplish this task! BIND doesn't scale well, and I don't consider MintDNS an option due to the required platform (Windows Server w/ AD & IIS). Has anyone out there solved this problem before?"
I'm sorry, but are you discounting MintDNS because it's a Windows application, or because it would cost too much to implement? Only one of those two choices is fiscally responsible...
Compare the total cost of using any software, including Windows-based software, with the cost of rolling your own.
tasks(723) drafts(105) languages(484) examples(29106)
Exactly what do you think runs the bulk of the internet? That is like saying Linux or Solaris or sendmail do not scale well.
I prefer the "u" in honour as it seems to be missing these days.
Why don't you give PowerDNS a try?
.TK TLD.
:)
It has an authoritive component and a recursive one, both work extremely well and are in use by some big companies, as well as the Wikipedia and the
As for flexibility: PowerDNS uses backends to retrieve its zone data, so you can use one that's already available (MySQL, BIND zone files, SQLite, ODBC, etc.) or write one yourself.
Oh and it's opensource
BIND does indeed not scale well. Down, that is.
http://www.powerdns.com/
:/
I used it when I was running an ISP a few years ago. Used a replicated MySQL backend behind three authoritative servers. Also used dnscache for recursors in front of all the customers.
All your zone data is stored in DB tables, so it's easy to hack together a frontend, or integrate with CRM or whatever. I wish Rails had existed back then for all the CRUD that I wrote by hand.
A host is a host from coast to coast...
Unless it's down, or slow, or fails to POST!
In my opinion, BIND doesn't fit well here primarily because of its zone transfer mechanism, before even getting to scalability, security, or other issues. Look at tinydns. It's a DNS server that makes no assumptions about where your zone data comes from, how it's transferred, or how often it's updated -- all it does is serve requests from a simple flat-file database that can be regenerated from source data and replaced atomically. It does this correctly, securely, and efficiently.
Now, you've got a DNS server that goes out of its way to stay out of yours. All you need to do is feed it data. Pick whatever leverages your existing infrastructure: maybe you build a PHP/PostgreSQL application to deploy to your existing load-balanced web farm, maybe you have all your field equipment make TCP connections to a service you deploy, whatever. `tinydns-data`, the program that builds said flat-file database, would do what you want with data like: Feed it a bunch of those on standard input, close, and you're done -- the DNS server will start serving your new data. You could write a script to do this on each of your DNS servers independently, all sourcing directly off your backend, no zone transfers needed.
I've done this on a small scale. It took me about five minutes to set everything up, client and server. I added an account to the clients and the server and set up SSH public key authentication. The clients periodically ssh into the server by cron, the server looks up their public key and runs my updater with the appropriate parameters (e.g. `/home/dyndns/update sensor-a.someclient.ny.us`). The updater reads the $SSH_CLIENT environment variable to find the IP that's it's connected to, writes it to the appropriate file (~/data/hostname), and calls `make`. The makefile there simply `cat`s the data/* together into a single file which gets replicated onto a half dozen nameservers. Easy as pie, and all it needs is `ssh` and `cron`.
what is x to BIND, that is PHP/Perl/Python/etc. to apache. ...
seems to be a fillable lucrative void
maybe someone can make a "swarm" version of DNS.
they did it for FTP.
There is no DNS problem that djbdns cannot solve. None! None I tell you! Don't listen to the heathens....
By definition, the 2'nd fattest girl is skinny. Skinny and fat are relative in terms of what we accept. For example, many ppl accept Calista Flockhart as being skinny. But if somebody from Ethiopia say 10 years ago saw her, they would have considered positively FAT.
I prefer the "u" in honour as it seems to be missing these days.
Have you looked at DJB's tinydns with dynamic capabilities wrapped around it? I know for a fact djbdns scales, but I dunno how well scripts wrapped around it work.
"TinyDYN
In a nutshell, TinyDYN consists of a set of scripts that allow you to run your own dynamic dns services (similar to dyndns.org) on your own network. The services use strong authentication via GnuPG, and is designed to work with djbdns's tinydns for name service."
http://www.technocage.com/~caskey/tinydyn/
Here's to the crazy ones
I'm just throwing this out here, but why not contact the people at DynDNS.org and ask about licensing their software (or process, or however they do it) for your internal use. It could solve your problem (and maybe quicker than rolling your own solution), and at the same time potentially create a new revenue stream for them.
Have you considered an appliance solution?
I have several colleagues that have InfoBlox appliances in production and love the devices. I believe that they do a 30 day free evaul. Their units are reasonably priced and very feature full. Pre-sales engineering is pretty good too from what I've been told.
Rule of Life Number 2: Remember, it can all go to hell at any minute. --Jimmy Buffet
http://www.dns.net/dnsrd/servers/unix.html
With Incognito's DNS Commander authoritative server, you can use DDNS to populate millions of records. I think this should solve the scalability issue that you were concerned about. And if you prefer non-windows centric software, DNS Commander also runs on Linux/Solaris. Also, I'm pretty sure it uses a binary database instead of text files, and it doesn't require dbms. Are you integrating this with OSS? DNS Commander offers a CORBA API for 3rd party integration, if necessary.. Have a look at www.incognito.com
http://ryanc.org/nic/update.php.txt
I wrote this a while ago, it runs with MyDNS. It works with ddclient and probably other software for updating dyndns hosts.
The software is as-is, but feel free to do whatever you want with it. Enjoy.
- Ryan Castellucci
I've been using MaraDNS quite happily. Never a problem on FreeBSD, Slackware or OS X. The developer is very responsive, and the documenation is very very good, unlike that for some other alternative DNS daemons *cough*tinydns*cough*
The zone syntax and config file structure is worlds ahead of BIND and actually makes setting up DNS fun (no, I'm not kidding. Well-written software is always a pleasure to use).
Nothing is inexplicable; only unexplained -Tom Baker, Doctor Who
We too manage a lot of customer sites behind dynamic IP connections. We have the advantage of there being servers at every location where we can run our own code. We have a simple (PERL) program run out of cron once an hour to connect to one of our servers on a high port and pass through some information unique to the site. On the server end is another program (PERL again) that receives the messages, does an in-RAM check (a simple associative array) to see if this IP is any different than the last one we saw for this site, runs nsupdate (yes BIND is working fine for us) to push the new IP into the zone if it has changed.
So now when I want to connect to a particular customer site via ssh, vnc, rdp, whatever.. I just connect to customername.customerstate.customertype and never worry with what the IP is.
Oh, and if BIND has scalability issues, I suspect it's somewhat beyond your "few thousand hostnames" point. We're dynamically updating a few hundred names in a server that is managing a few thousand hostnames without taxing it much at all.
I must have completely missed this outage. According to their status page there were some attacks against their update system, but I never had any issues resolving names, either for my domains hosted with them, or with my free hosts.
DUDE!! take a look at GnuDIP. It's do-it-yourself GPL and free Dynamic DNS system. It interfaces with a standard BIND installation so you basically register a domain, then add hosts to your domain, and they can automatically update from a client installed on remote equipment. Give it a try. http://gnudip2.sourceforge.net/
With simple recipes available that offer an implementation of DNS: http://aspn.activestate.com/ASPN/Cookbook/Python/R ecipe/491264 one could easily plug it into any one of a number of databases. Add a very simple HTTP front end for updating name/IP information in the database, and you are done.
>PNRP... Makes me wonder what Apple will come up with next in that field.
How about Zeroconf (Bonjour)?
You can already use Zeroconf to replace DNS, DHCP, and SMB(NMB) and uPNP... among other things. It's a broadcast discovery and configuration service. Now of course broadcast does not directly run across router links/subnets unless you make it so (on the other hand, any chatty P2P can be routinely blocked by admins).
Zeroconf is not an Apple-only solution.. lots of the tier-one printer companies and consumer-level NAS hardware providers have products or projects which employ zeroconf.
It's funny how work began on PNRP after Bonjour landed in the hands of Apple testers, and almost 4 years after Apple's publication of their working group specs. This is just Microsoft catching up...
Well i own a Macbook Pro since last Saturday, sure i've heard about Bonjour and Zeroconf but from what i have learned about it Microsoft seems to take its PNRP thing one step further, even using it do distribute computing tasks as they say in some introduction video i've seen.
Thats why i wonder how apple will respond to it and if we might be on the verge of a whole new personal computing era where you can contribute parts of your laptops computing power to the local super computing cluster grid.
Btw. avahid has some rather peculiar hard limits on the amount of mdns messages it passes through as a friend found out on a 300 people gathering we ran the network for - there's still much work to do in the field i fear.
"morning is a state of mind
But one of the main *points* of building a system like that, (other than expressing one's personal crabbiness about the rest of the world :-) is that by building components with limited functionality and using pre-existing standard tools to do the things that pre-existing standard tools already do well, you can restrict the security exposure of your new components, and can design them to use only the privileges and powers they need to get their jobs done, generally be small enough to debug, and be small enough to fix bugs in without introducing significant new vulnerabilities. The Unix design philosophy of building small tool components that you can use together as opposed to large monoliths was valuable two decades ago when we were still using Vaxen and Sun-3s, and it's still valuable today.
Most of the time you don't *need* anywhere near 10% of the features of BIND - usually you don't even need 50% of the features of DJBDNS either. BIND isn't quite the Mos Eisely kitchen sink of network protocol applications, because that honor goes to Sendmail, and both of those systems *have* improved a lot in the last few years, but it has justly acquired a reputation of having been a quick hack from two decades ago that's grown into an ancient shambling horror of creeping features.
There are small applications where something simple like DJBDNS is enough. There are a reasonable range of applications where it's not, and for some of them BIND is a good choice, or some of the newer alternatives. And then there are applications that are complex, as opposed to large, where what you need is really a relational database system with some front-ends to provide DNS-lookup interfaces, and for those you might want to roll your own if there aren't good tools available already - otherwise you'll find yourself writing hunks of perl scripts to extract data from the database and turn it into BIND input and vice versa.
Bill Stewart
New Fast-Compression-only CPR http://preview.tinyurl.com/dy575ks