Another option, outside of BIND is TinyDNS, AKA djbdns. Kloxo has an option to run under this as well.
There are pros and not very many cons to using TinyDNS over BIND. For instance, it isn't as targeted for vulnerabilities, it can pretty much do anything BIND can with a much smaller memory footprint, it comes packaged with scripts to do different things (i.e add-host, add-mx, add-ns, etc), or if you are like me and would prefer to edit the files manually, the syntax for the configuration file is much, much simpler.
Here is a working example that I use for websites... with the IP and the domains changed.
Code:
#SOA
Zexample.com:example.com.:example.com.:2011110511:28800:7200:604800:3600:3600
#name servers
&example.com::ns1.example.com.:3600
&example.com::ns2.example.com.:3600
#Domain
=example.com:255.255.255.255:3600
#MX Record
@mail.example.com:255.255.255.255:a::60
#Subdomains
+mail.example.com:255.255.255.255:3600
+ns1.example.com:255.255.255.255:3600
+ns2.example.com:255.255.255.255:3600
+www.example.com:255.255.255.255:3600
+winning.example.com:255.255.255.255:3600
I think I'll write a tut for setting that up as well.
Links:
http://tinydns.org/ - TinyDNS information.
http://cr.yp.to/djbdns.html - djbdns home page & installation instructions.
http://www.revival.stormshadow.com/unix/djbdns/ - Quick install instructions (requires GCC)