
Table of Contents
Installation
The installation is very simple and easy, login to your server via SSH and run:
apt-get install bind9
Configuration
Open the /etc/bind/named.conf.options file and add the following lines on the top of the file.
acl trusted {
127.0.0.1;
};
and in the options block add :
allow-recursion {trusted; };
Restart the service
service bind9 restart
Administration
The following script can be used to create new DNS zone files.
#!/usr/bin/env bash
#
# Create Zone file
# Variables
BIND_LOCAL='/etc/bind/named.conf.local'
ZONE_DIR='/etc/bind/zones/'
BIND_USER='bind'
NAME_SERVER_1="ns1.your_nameserver.com"
NAME_SERVER_2="ns2.your_nameserver.com"
SERIAL=$(date +"%Y%m%d")01
# Functions
ok() { echo -e '\e[32m'$1'\e[m'; } # Green
error() { echo -e '\e[1;31m'$1'\e[m'; } # Red
usage () {
ok "[*] Usage: $0 [ -i ip ] [ -d domain ] [ -h ]"
}
# Sanity check
if [[ $EUID -ne 0 ]]
then
error "[*] Script must be run as root"
fi
# Get arguments
while getopts ":hd:i:" option; do
case "$option" in
d) DOMAIN="$OPTARG" ;;
i) IP="$OPTARG" ;;
h) usage
exit 0
;;
:) error "[*] Error: -$OPTARG requires an argument"
usage
exit 1
;;
?) error "[*] Error: unknown option -$OPTARG"
usage
exit 1
;;
esac
done
if [[ -z "$DOMAIN" || -z "$IP" ]]; then
error "[*] Error: you must specify a Domain Name using -d and IP Address using -i"
usage
exit 1
fi
# Create zones directory
mkdir -p $ZONE_DIR
# Check if exist
grep "zone \"${DOMAIN}\"" ${BIND_LOCAL} > /dev/null
if [[ 0 -eq $? ]]
then
error "[*] Error: ${DOMAIN} is already added!" >&2
exit 1
else
# Create zone file
cat > ${ZONE_DIR}db.${DOMAIN} << _EOF_
\$ORIGIN ${DOMAIN}.
\$TTL 86400; expire in 1 day.
@ IN SOA ${NAME_SERVER_1}. admin.${DOMAIN}. (
${SERIAL} ; serial
10800 ; Refresh
3600 ; Retry
604800 ; Expire
300 ; Negative Response TTL
)
; DNS Servers
@ IN NS ${NAME_SERVER_1}.
@ IN NS ${NAME_SERVER_2}.
; A Records
@ IN A ${IP}
localhost IN A 127.0.0.1
host IN A ${IP}
mail IN A ${IP}
; MX Records
@ IN MX 10 ${DOMAIN}.
@ IN MX 20 mail.${DOMAIN}.
; TXT Records
@ IN TXT "v=spf1 a mx -all"
; Aliases
ftp IN CNAME ${DOMAIN}.
_EOF_
# Add record
cat >> ${BIND_LOCAL} << _EOF_
zone "${DOMAIN}" {
type master;
file "${ZONE_DIR}db.${DOMAIN}";
};
_EOF_
fi
ok "${DOMAIN} has been successfully added."
These instructions should work on any Debian based distribution such as Ubuntu, Mint, Elementary OS and others.
Of course you don’t have to do any of this if you use one of our Linux VPS Hosting services, in which case you can simply ask our expert Linux admins to install this for you. They are available 24×7 and will take care of your request immediately.
PS. If you liked this post please share it with your friends on the social networks using the buttons on the left or simply leave a reply below. Thanks.
I really enjoyed the article. Recommended. I wonder if you can do an article on reverse zone, in this way, with administration script.
Now, appreciate the attention.