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.