Per Ninux Basilicata abbiamo implementato un server DNS utilizzando BIND 9 su una debian 7 a 64bit.
Dal punto di vista hardware abbiamo una VM con 1 GB di ram, 1 CPU e 20 GB di hard disk (più che sufficienti)
Iniziamo a vedere la configurazione per il nostro TLD “.nbas”
Dopo l’installazione il primo passo è fare un aggiornamento del sistema operativo, quindi con i comandi
apt-get update && apt-get dist-upgrade
Prima di riavviare inserimamo nel nostro file /etc/resolv.conf le seguenti righe
search nbas nameserver 10.27.0.5 nameserver 8.8.8.8
Ora possiamo riavviare il nostro sistema.
Insalliamo i nostri pacchetti:
apt-get install bind9 dnsutils
Spostiamoci nella cartella /etc/bind
Premessa: non siamo su internet e non abbiamo messo il DNS in chroot
Ricordiamo che la LAN della Basilicata è 10.27.0.0/16
Per poter risolvere i DNS esterni abilitiamo il forward nel file /etc/bind/named.conf.options (usiamo quelli di google)
forwarders {
8.8.8.8;
8.8.4.4;
};
Adesso passiamo a creare il nostro TLD “.nbas” creando 2 file “db.nbas” e “db.27.10”
Premessa: l’IP del DNS è 10.27.0.5, quello del nostro server web è 10.27.0.6
Nel file db.nbas ci inseriamo questo contenuto:
;
; BIND data file for TLD ".nas"
;
$TTL 604800
@ IN SOA nbas. root.nbas. (
2 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
;
@ IN NS ns1.nbas.
@ IN NS ns2.nbas.
@ IN A 10.27.0.5
dns IN A 10.27.0.5
ns1 IN A 10.27.0.5
ns2 IN A 10.27.0.5
Adesso nel file db.27.10 inseriamo questo contenuto:
;
; BIND reverse data file for TLD ".nbas"
;
$TTL 604800
@ IN SOA nbas. root.nbas. (
1 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
;
@ IN NS ns1.nbas.
@ IN NS ns2.nbas.
5.0 IN PTR ns1.nbas.
5.0 IN PTR ns2.nbas.
5.0 IN PTR dns.nbas.
Adesso editiamo il nostro file named.conf.default-zones aggiungendo alla fine se seguenti righe:
zone "nbas." {
type master;
file "/etc/bind/db.nbas";
allow-transfer { any;};
allow-query { any;};
};
zone "27.10.in-addr.arpa" {
type master;
notify no;
file "/etc/bind/db.27.10";
};
Fatto tutto questo possiamo fare dei check
named-checkconf # esegue un controllo sulla configurazione generale
named-checkzone nbas. /etc/bind/db.nabs # esegue un controllo sulla configurazione della zona
Dando un semplice
/etc/init.d/bind9 restart
oppure un più moderno comando
service bind9 restart
possiamo fare un test pingando ns1.nbas
Il risultato dovrebbe essere positivo.
Passaggio finale:
Creiamo una cartella
mkdir /etc/bind/zones
ora spostiamoci nella nostra root con un bel…
cd
e creiamo 2 file “ins.dns.sh” e “rem-dns.sh”
Nel primo ci mettiamo questo:
#!/bin/bash
if [ $# -ne 1 ];then
echo "Usage: ins-dns.sh <domainname>"
exit 1
fi
## Domain name
MYDOMAIN=$1
ZONECONFIG="/etc/bind/named.conf.default-zones"
if [ `sed -n '/^zone "'${MYDOMAIN}'."/p' ${ZONECONFIG}|wc -l` -eq 1 ];then
echo "[ERROR] Entry for ${MYDOMAIN} already exists"
exit 1
fi
## Nameservers
NAMESERVER1="ns1.nbas"
NAMESERVER2="ns2.nbas"
echo "IP ZONA:"
read IP_ZONA
## Apache and ftp service are running on the same host
WWW_IP=$IP_ZONA
##Mail server
MAIL_IP=$IP_ZONA
## DB Server
MYSQL_IP=$IP_ZONA
## Create zone file
cat > /etc/bind/zones/${MYDOMAIN} << EOF
\$TTL 86400
@ IN SOA ns.${MYDOMAIN}. admin.${MYDOMAIN}. (
1378789827 ; Serial
10800 ; Refresh
3600 ; Retry
604800 ; Expire
10800 ) ; Minimum
${MYDOMAIN}. IN NS ${NAMESERVER1}.
${MYDOMAIN}. IN NS ${NAMESERVER2}.
${MYDOMAIN}. IN A ${WWW_IP}
mail.${MYDOMAIN}. IN A ${MAIL_IP}
mysql.${MYDOMAIN}. IN A ${MYSQL_IP}
${MYDOMAIN}. IN MX 10 mail.${MYDOMAIN}.
${MYDOMAIN}. IN TXT "v=spf1 a mx ip4:${WWW_IP} ~all"
www.${MYDOMAIN}. IN CNAME ${MYDOMAIN}.
pop.${MYDOMAIN}. IN CNAME mail.${MYDOMAIN}.
imap.${MYDOMAIN}. IN CNAME mail.${MYDOMAIN}.
smtp.${MYDOMAIN}. IN CNAME mail.${MYDOMAIN}.
EOF
clear
echo "[*] Created zone file for ${MYDOMAIN}"
cat /etc/bind/zones/${MYDOMAIN}
cat >> ${ZONECONFIG} << EOF
zone "${MYDOMAIN}." {
type master;
file "/etc/bind/zones/${MYDOMAIN}";
};
EOF
echo ""
echo "++++++++++++++++++++++++++++++++++++++++++++++"
echo ""
echo "[*] Added zone entry for ${MYDOMAIN} in bind configuration"
cat $ZONECONFIG
Nel secondo questo
#!/bin/bash
if [ $# -ne 1 ];then
echo "Usage: rem-dns.sh <domainname>"
exit 1
fi
## Domain name
DOMAIN=$1
ZONECONFIG="/etc/bind/named.conf.default-zones"
if [ `sed -n '/^zone "'${DOMAIN}'."/p' /etc/bind/named.conf.default-zones|wc -l` -eq 1 ];then
##Remove entries from dns configuration file
sed -i -e '/^zone "'${DOMAIN}'."/,/^};/d' ${ZONECONFIG}
sed -i '$d' ${ZONECONFIG}
echo "[*] Removed zone entries from bind configuration"
else
echo "[ERROR] ${DOMAIN} not present in bind configuration"
exit 1
fi
#Remove zone file if it exists
if [ -f /etc/bind/zones/${DOMAIN} ];then
rm -f /etc/bind/zones/${DOMAIN}
echo "[*] Removed zone db file"
fi
Per aggiungere una nuova zona, esempio: ninuxbas.nbas usare il comando
./ins.dns.sh ninuxbas.nbas
Ok, non è ancora perfezionato. Quando aggiungete una nuova zona ricordatevi di aggiungere nel reverse (db.27.0) la zona, es:
6.0 IN PTR ninuxbas.nbas.
