Instalação e Configuração do Bind Slave no Debian Wheezy

E ai galera, aqui eu vou disponibilizar um script para configuração do Bind 9 trabalhando como Slave no Debian Wheezy, aqui vocês precisam mudar o domínio e os endereços ips antes de rodar o script.

OBS: O servidor DNS Slave precisa ter dois endereços ips internos, pois aqui estou trabalhando com multi-view com isso cada view vai trabalhar por um endereço ip

Ele vai servir se for utilizado o script Instalação e Configuração do Bind Master no Debian Wheezy para configurar o Bind Master

#!/bin/sh
#=============================================================================#
# NOTA DE LICENCA                                                             #
#                                                                             #
# Este trabalho esta licenciado sob uma Licenca Creative Commons Atribuicao-  #
# Compartilhamento pela mesma Licenca 3.0 Brasil. Para ver uma copia desta    #
# licenca, visite http://creativecommons.org/licenses/by/3.0/br/              #
# ou envie uma carta para Creative Commons, 171 Second Street, Suite 300,     #
# San Francisco, California 94105, USA.                                       #
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - #
# Criado por :                                              #
#    Douglas Quintiliano dos Santos | douglas.q.santos@gmail.com 19/05/2013   #
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - #
#                                                                             #
# Funcao: Script para realizar configuração de servidores DNS SLAVE       #
# No Debian Wheezy
#                                                                             #
#=============================================================================#
### COMANDOS ##
APTITUDE="/usr/bin/aptitude"
CAT="/bin/cat"
CHMOD="/bin/chmod"
CHOWN="/bin/chown"
DATA="/bin/date"
CP="/bin/cp"
LN="/bin/ln"
MV="/bin/mv"
MKDIR="/bin/mkdir"
MKNOD="/bin/mknod"
SLEEP="/bin/sleep"
CUT="/bin/cut"
CP="/bin/cp"
IP=$(ifconfig eth0 | awk '/inet end/ {print $3}')
IP2=$(ifconfig eth1 | awk '/inet end/ {print $3}')
PACOTES_BIND="bind9 dnsutils"
PATH_BIND="/var/lib/named"

#MUDAR OS VALORES ABAIXO DE ACORDO COM A SUA NECESSIDADE
#DEFININDO O DOMINIO
DOMINIO="douglas.lan"
#DEFININDO A REDE
REDE="192.168.0.0/24"
#DEFININDO O IP DO NS1
NS1_IP=192.168.0.83
#DEFININDO O IP DO NS2 QUE VAI RECEBER A VIEW INTERNA
NS2_IP=${IP}
#DEFININDO O IP DO NS2 QUE VAI RECEBER A VIEW EXTERNA
NS2_IP2=${IP2}

#ESTRAINDO O REVERSO DO NS1
REV3=$(echo ${NS1_IP} | cut -d '.' -f 3)
REV2=$(echo ${NS1_IP} | cut -d '.' -f 2)
REV1=$(echo ${NS1_IP} | cut -d '.' -f 1)
IP_REVERSE=${REV3}.${REV2}.${REV1}

### INSTALACAO DO PACOTE ###
${APTITUDE} update
${APTITUDE} install ${PACOTES_BIND} -y

### Parar o serviço para podermos configurá-lo
/etc/init.d/bind9 stop


### ARVORE DE DIRETORIOS ###
${MKDIR} -p ${PATH_BIND}/etc
${MKDIR} -p ${PATH_BIND}/dev
${MKDIR} -p ${PATH_BIND}/var/log
${MKDIR} -p ${PATH_BIND}/var/cache/bind
${MKDIR} -p ${PATH_BIND}/var/cache/bind/slave
${MKDIR} -p ${PATH_BIND}/var/cache/bind/dynamic
${MKDIR} -p ${PATH_BIND}/var/run/bind/run

### CRIANDO OS DISPOSITIVOS NECESSARIOS ###
${MKNOD} ${PATH_BIND}/dev/null c 1 3
${MKNOD} ${PATH_BIND}/dev/random c 1 8
${MKNOD} ${PATH_BIND}/dev/zero c 1 5

### AJUSTANDO AS PERMISSOES ###
${CHMOD} 666 ${PATH_BIND}/dev/null
${CHMOD} 666 ${PATH_BIND}/dev/random
${CHMOD} 666 ${PATH_BIND}/dev/zero
${CHOWN} -R bind:bind ${PATH_BIND}/var/*

### AJUSTANDO A LOCALIZACAO DOS ARQUIVOS
${MV} /etc/bind ${PATH_BIND}/etc
${LN} -sf ${PATH_BIND}/etc/bind /etc/bind
${CP} /etc/localtime ${PATH_BIND}/etc

### AJUSTANDO AS PERMISSOES NOVAMENTE
${CHOWN} -R bind:bind ${PATH_BIND}/etc/bind
${CHOWN} -R bind:bind ${PATH_BIND}/var/cache/bind/dynamic
${CHMOD} -R 775 ${PATH_BIND}/var/cache/bind/dynamic



### AJUSTANDO O ARQUIVO /etc/default/bind9 ###
${CAT} <<EOF > /etc/default/bind9
#/etc/default/bind9
RESOLVCONF=yes
OPTIONS="-u bind -t ${PATH_BIND}"
EOF


### AJUSTANDO O ARQUIVO /etc/resolv.conf ###
${CAT} <<EOF > /etc/resolv.conf
domain ${DOMINIO}
nameserver ${NS2_IP}
EOF

### AJUSTANDO O ARQUIVO /srv/bind/etc/bind/named.conf.options ###
${CP} ${PATH_BIND}/etc/bind/named.conf.options ${PATH_BIND}/etc/bind/named.conf.options.bkp
${CAT} <<EOF > ${PATH_BIND}/etc/bind/named.conf.options
#/etc/bind/named.conf.options
options {
  directory "/var/cache/bind";
  managed-keys-directory "/var/cache/bind/dynamic";
  auth-nxdomain no;
  listen-on-v6 { any; };
  listen-on { 127.0.0.1/32; ${REDE}; };
  allow-query { any; };
  recursion no;
  version "Nao Disponivel";
  ### DNSSEC ###
  dnssec-enable no;
  dnssec-validation no;
  dnssec-lookaside auto;
};

#Controles
include "/etc/bind/rndc.key";
controls {
        inet 127.0.0.1 port 953 allow { 127.0.0.1; } keys { rndc-key; };
};

#LOGS
logging {
  channel xfer-log {
  file "/var/log/named.log";
  print-category yes;
  print-severity yes;
  print-time yes;
  severity info;
  };

  category xfer-in { xfer-log; };
  category xfer-out { xfer-log; };
  category notify { xfer-log; };

  channel update-debug {
  file "/var/log/named-update-debug.log";
  severity  debug 3;
  print-category yes;
  print-severity yes;
  print-time      yes;
  };

  channel security-info    {
  file "/var/log/named-auth-info.log";
  severity  info;
  print-category yes;
  print-severity yes;
  print-time      yes;
  };

  category update { update-debug; };
  category security { security-info; };
};

#Controle de ancoras de DNSSEC
include "/etc/bind/bind.keys";
EOF

### AJUSTANDO O ARQUIVO ${PATH_BIND}/etc/bind/named.conf.local ###
${CP} ${PATH_BIND}/etc/bind/named.conf ${PATH_BIND}/etc/bind/named.conf.bkp
${CAT} <<EOF > ${PATH_BIND}/etc/bind/named.conf
#/etc/bind/named.conf
include "/etc/bind/named.conf.options";
include "/etc/bind/named.conf.local";
include "/etc/bind/named.conf.internal-zones";
include "/etc/bind/named.conf.external-zones";
EOF



### AJUSTANDO O ARQUIVO DE ZONAS INTERNAS ###
${CAT} << EOF > ${PATH_BIND}/etc/bind/named.conf.internal-zones
#Vamos definir quem é o nosso servidor master
acl "dns_masters" {
 ${NS1_IP};
};

#Vamos definir quais são os nossos hosts internos
acl "internal_hosts" {
 ${REDE};
 127.0.0.0/32;
};

#Definição da View interna
view "internal" {

#Vamos definir quais são os clientes dessa view
 match-clients {
 internal_hosts;
 };

 #Os clientes dessa view vão poder efetuar consultas recursvas
 recursion yes;

 #Quais os servidores que vão ser noficados caso ocorra alterações nas zonas.
 allow-notify {
 dns_masters;
 };

 #Nao disponibiliza transferencia de zona do servidor SLAVE
 allow-transfer {
 none;
 };

 #Zona que define os root masters
 zone "." {
 type hint;
 file "/etc/bind/db.root";
 };

 #Zonas locais
 zone "localhost" {
 type master;
 file "/etc/bind/db.local";
 };

 zone "127.in-addr.arpa" {
 type master;
 file "/etc/bind/db.127";
 };

zone "0.in-addr.arpa" {
 type master;
 file "/etc/bind/db.0";
 };

 zone "255.in-addr.arpa" {
 type master;
 file "/etc/bind/db.255";
 };

 #Minha zona teste que vai ser replicada do servidor master na view interna.
 zone "${DOMINIO}" {
 type slave;
 masters { ${NS1_IP}; };
 transfer-source ${NS2_IP};
 file "slave/db.${DOMINIO}.internal";
 };

 zone "${IP_REVERSE}.in-addr.arpa" {
 type slave;
 masters { ${NS1_IP}; };
 transfer-source ${NS2_IP};
 file "slave/db.${IP_REVERSE}";
 };
};
EOF

### AJUSTANDO O ARQUIVO DE ZONAS EXTERNAS ###
${CAT} << EOF > ${PATH_BIND}/etc/bind/named.conf.external-zones
#Vamos definir quem é o nosso servidor master
acl "master" {
 ${NS1_IP};
};

#Vamos definir quais são os nossos hosts internos
acl "rede_local" {
 ${REDE};
 127.0.0.0/32;
};

#Definição da View externa
view "external" {

 #Definindo quais os clientes que podem efetuar consultas nessa view e quais não podem
 # o simbolo '' define que é uma negação então a rede local não pode pesquisar nessa view
 match-clients {
 !rede_local;
 any;
 };

 #Os clientes dessa zona não podem efetuar consultas recursivas
 recursion no;

 #Quem vai receber notificações de modificações dessa zona
 allow-notify {
 master;
 };

#meu dominio
 zone "${DOMINIO}" {
 type slave;
 masters { ${NS1_IP}; };
 transfer-source ${NS2_IP2};
 file "slave/db.${DOMINIO}.external";
 };
};
EOF


### REINCIANDO O BIND9 ###
/etc/init.d/bind9 start