SSDZ (Shell Script for DNS zones) is a useful shell script that I developed to automatize DNS zone management operations. The main functions:
Download
The archive contains 3 files:
ssdz.sh – Shell Script for DNS zones
named.conf – a named.conf file, for testing purposes. I will use it to show how the script works
dnstemplate.txt – the basic template for zone file
Before to use the script, you should perform script configuration. Open the file and alter the basic variables: named.conf location, zones directory and zonefile template location. The defaults are:
namedconf=/home/dima/work/named.conf dnstemplate=/home/dima/work/dnstemplate.txt zonesdir=/home/dima/work/zonesdb
If the above variables will be incorrect, the script will generate the errors on run:
dima@gentoo-nb ~/work $ ./ssdz.sh
Path to named.conf is incorrect.
Specify correct path ('namedconf variable'). Exiting...
dima@gentoo-nb ~/work $ ./ssdz.sh
Path to zonefile template is incorrect.
Specify correct path ('dnstemplate' variable). Exiting...
dima@gentoo-nb ~/work $ ./ssdz.sh
Path to zones directory is incorrect.
Specify correct path ('zonesdir' variable). Exiting...
Examples for normal usage when adding a zone:
dima@gentoo-nb ~/work $ ./ssdz.sh domainadd domain.com 182.17.33.240
Domain domain.com with ip address 182.17.33.240 added
dima@gentoo-nb ~/work $ cat named.conf |grep domain.com
zone "domain.com" { type master; file "/home/dima/work/zonesdb/domain.com.db"; };
dima@gentoo-nb ~/work $ cat zonesdb/domain.com.db
$TTL 14400
domain.com. IN SOA ns1.domain.com. dnsadm.domain.com. (
2008103000 ; Serial
10800 ; Refresh after 3 hours
3600 ; Retry after 1 hour
2600000 ; Expire after 1 week
1800 ) ; Time To Live
@ IN NS ns2.domain.com.
@ IN NS ns1.domain.com.
@ IN MX 10 domain.com.
@ IN A 182.17.33.240
* IN CNAME domain.com.
dima@gentoo-nb ~/work $ ./ssdz.sh domainadd domain2.com 182.17.34.240
Domain domain2.com with ip address 182.17.34.240 added
dima@gentoo-nb ~/work $ cat named.conf |grep domain2.com
zone "domain2.com" { type master; file "/home/dima/work/zonesdb/domain2.com.db"; };
dima@gentoo-nb ~/work $ cat zonesdb/domain2.com.db
$TTL 14400
domain2.com. IN SOA ns1.domain2.com. dnsadm.domain2.com. (
2008103000 ; Serial
10800 ; Refresh after 3 hours
3600 ; Retry after 1 hour
2600000 ; Expire after 1 week
1800 ) ; Time To Live
@ IN NS ns2.domain2.com.
@ IN NS ns1.domain2.com.
@ IN MX 10 domain2.com.
@ IN A 182.17.34.240
* IN CNAME domain2.com.
Examples for normal usage when removing a zone:
dima@gentoo-nb ~/work $ cat named.conf |grep domain2.com
zone "domain2.com" { type master; file "/home/dima/work/zonesdb/domain2.com.db"; };
dima@gentoo-nb ~/work $ ./ssdz.sh domaindrop domain2.com 182.17.34.240
/bin/rm: remove regular file `/home/dima/work/zonesdb/domain2.com.db'? y
Domain domain2.com with ip address 182.17.34.240 removed
dima@gentoo-nb ~/work $ cat named.conf |grep domain2.com
dima@gentoo-nb ~/work $ ls -la zonesdb/
total 12
drwxr-xr-x 2 dima dima 4096 2008-10-30 09:39 .
drwxr-xr-x 3 dima dima 4096 2008-10-30 09:39 ..
-rw-r--r-- 1 dima dima 552 2008-10-30 09:36 domain.com.db
dima@gentoo-nb ~/work $ ./ssdz.sh domaindrop domain.com 182.17.33.240
/bin/rm: remove regular file `/home/dima/work/zonesdb/domain.com.db'? y
Domain domain.com with ip address 182.17.33.240 removed
dima@gentoo-nb ~/work $ cat named.conf |grep domain.com
dima@gentoo-nb ~/work $ ./ssdz.sh domainadd domain.com 182.17.33.240
Domain domain.com with ip address 182.17.33.240 added
dima@gentoo-nb ~/work $ ./ssdz.sh domainadd domain2.com 182.17.34.240
Domain domain2.com with ip address 182.17.34.240 added
dima@gentoo-nb ~/work $ ./ssdz.sh domaindrop domain2.com 182.17.34.241
IP address for domain domain2.com in zonefile is not 182.17.34.241.
Nothing to remove. Exiting...
dima@gentoo-nb ~/work $ ./ssdz.sh domaindrop domain3.com 182.17.34.240
Zonefile don't exists. Nothing to remove. Exiting...
dima@gentoo-nb ~/work $ ./ssdz.sh domaindrop domain2.com 182.17.34.240
/bin/rm: remove regular file `/home/dima/work/zonesdb/domain2.com.db'? y
Domain domain2.com with ip address 182.17.34.240 removed
dima@gentoo-nb ~/work $ ./ssdz.sh domaindrop domain.com 182.17.33.240
/bin/rm: remove regular file `/home/dima/work/zonesdb/domain.com.db'? y
Domain domain.com with ip address 182.17.33.240 removed
The script will not remove the domain if it's name is incorrect. Also, the domain will not be removed if the IP address provided differs from that specified in zonefile.
Below are several examples for error handling:
dima@gentoo-nb ~/work $ ./ssdz.sh Usage: ./ssdz.sh [domainadd|domaindrop] Missing action. Specify 'domainadd' or 'domaindrop'. Exiting... dima@gentoo-nb ~/work $ ./ssdz.sh domainadd Usage: ./ssdz.sh [domainadd|domaindrop] Missing domain. Specify domain in form 'domain.com'. Exiting... dima@gentoo-nb ~/work $ ./ssdz.sh domainadd domain.com Usage: ./ssdz.sh [domainadd|domaindrop] Missing IP address. Specify correct IP address. Exiting... dima@gentoo-nb ~/work $ ./ssdz.sh domainadd domain.com 182.17.33.270 Usage: ./ssdz.sh [domainadd|domaindrop] Invalid IP address. Specify correct IP address. Exiting...