I wrote a CLI “wizard” that steps you thought it, use parts of it if you find
useful. It creates a Debian style structure where you can enable/disable
available zones if you want, which makes it easier to manage. You create a
db.example.com example zone, and then the script copies and modifies it to
become a real zone file, so just create what you want for an example that has
all your normal stuff in it. It also runs dig later to see if it worked. This
is just itch/scratch stuff, guaranteed to do nothing in particular, and
certainly not vetted, but very handy. Of course, if you find it
useless/confusing/crap code, ignore it and use something else. It’s been very
handy for us. I just called it newdomain.sh and put it in /usr/src, then
symlinked to it so you can just type “newdomain”.
———
#!/bin/bash
## get your IP and domain information
#
cd /usr/src/
echo "Enter domain name to create, then hit [Enter]: "
read domain
echo "."
echo "What IP is the www server for this domain? [Enter]: "
read ip
echo "What IP is the MAIL server for this domain? [Enter]: "
read mail
## okay, modifying the template file and writing it to the
# /etc/bind/zones/file
cp /usr/src/db.example.com /etc/bind/zones/db.$domain
echo "changing the domain name in the example file to $domain"
sed -i -e "s/example.com/$domain/g" /etc/bind/zones/db.$domain
echo "changing IP's in default file for www..."
sed -i -e "s/1.2.3.4/$ip/g" /etc/bind/zones/db.$domain
sed -i -e "s/5.6.7.8/$mail/g" /etc/bind/zones/db.$domain
echo "."
echo "ok, your config file now looks like this...look sane?"
cat /etc/bind/zones/db.$domain
echo "."
echo "now creating the zone include file in /etc/bind/zones.enabled"
## now building the zone link file and putting it in
# /etc/bind/zones.enabled so we can can enable it later
cp /usr/src/zoneinclude /etc/bind/zones.enabled/zone.$domain
sed -i -e "s/example.com/$domain/g" /etc/bind/zones.enabled/zone.$domain
echo ""
echo "now linking the domain so bind will see it"
## link new domain into /etc/bind/named.conf.local so it will load
echo 'include "/etc/bind/zones.enabled/zone.'$domain'";' >>
/etc/bind/named.conf.local
echo "."
echo "if that all worked, you need to reload bind, do you want to try it now?
[y/n]"
read input
case "$input" in
[yY] | [yY][eE][sS])
echo "Okay, reloading bind9"
/etc/init.d/bind9 reload
;;
[nN] | [nN][oO])
echo "You should manually reload bind later" ;;
*) echo "Your input was officially odd '$input'" ;;
esac
chown -R bind.bind /etc/bind/*
echo "here's what the zone looks like on the local server now"
dig $domain @localhost
echo "done..."
—