#!/bin/bash # dnsreport.sh # Check all DNS servers for my domains and verify SOA serial number. # Written by FrankB@FrankB.us 08/27/07, last update 09/15/07 domain_list="domain1.com domain2.com domain3.com" # list of domains to do DNS checks for seperated by SPACES email=user@domain.invalid # email address to send reports to report=0 # 0=report only if NS doesn't respond or has out of date serial number # 1=always mail report ################## no edits needed below here echo "`date +%a` `date +%D` `date +%r` DNS check" > /tmp/dns-results$$ echo "Server: Serial:" >> /tmp/dns-results$$ for domain in $domain_list; do master_server=`dig $domain soa | grep SOA | grep -v "^;" | awk '{print $5}'` master_serial=`dig @$master_server $domain soa | grep SOA | grep -v "^;" | awk '{print $7}'` dig @$master_server $domain ns | grep NS | grep -v "^;" | awk '{print $5}' > /tmp/ns-list$$ echo "" >> /tmp/dns-results$$ echo "Domain: $domain" >> /tmp/dns-results$$ for server in `cat /tmp/ns-list$$`; do echo -n " $server " >> /tmp/dns-results$$ serial=`dig @$server $domain soa | grep SOA | grep -v "^;" | awk '{print $7}'` if [ -z $serial ]; then report=1 if [ -u /usr/bin/fping ]; then echo "no response, `fping $server`" >> /tmp/dns-results$$ else echo "no response" >> /tmp/dns-results$$ fi elif [ $master_serial = $serial ]; then echo $serial >> /tmp/dns-results$$ else echo "$serial Out of Sync" >> /tmp/dns-results$$ report=1 fi done /bin/rm -f /tmp/ns-list$$ done if [ $report = 1 ]; then mutt -s "DNS check `date +%a` `date +%D` `date +%r`" $email < /tmp/dns-results$$ fi /bin/rm -f /tmp/dns-results$$