Configurando um Domínio no BIND9 com Debian 3.1

Publicado por Edson G. de Lima 26/11/2005

[ Hits: 10.927 ]

Download confdns.deb.sh




Este script permite configurar um Domínio local em um Servidor de Nomes com suporte aos principais Servidores apenas respondendo perguntas relativas à rede.

Este script foi feito especificamente para a instalação "default" do Bind9 no Debian 3.1 .
Com certeza, para outras Distros, serão necessárias adaptações.

Os arquivos gerados são comentados.
Ideal para estudo, tanto do Bind, quanto das riquezas do Bash!

  



Esconder código-fonte

#!/bin/bash

#------------------------------------------------------
echo
echo "Limpando a sua tela..."
sleep 1
clear
trap "echo \"Por algum motivo, você cancelou a execução!\" ; exit" 2 3
echo
echo "Este script foi \"exaustivamente\" testado COM SUCESSO em uma instalação"
echo "rodando Debian 3.1 (Sarge). Nesta versão, o Bind9 está instalado no"
echo "diretório /etc/bind e utiliza o arquivo /etc/bind/named.conf.local"
echo "para a criação das zonas dos Domínios Locais."
echo
echo "Neste script existe um LEIA-ME. Recomenda-se sua leitura antes de prosseguir."
echo
echo "Neste script existem algumas VARIÁVEIS referentes à localização dos"
echo "arquivos do Bind9."
echo "Certifique-se de que em sua \"Distro\" os arquivos estejam nestes locais."
echo "Caso estejam em locais diferentes, por favor, faça os ajustes necessários."
echo
echo "Este script poderá ser modificado, e seu código aproveitado/melhorado!"
echo "Caso queira entrar em contato: Xxoin arroba yahoo ponto com ponto br"
echo
echo "Em hipótese alguma, o autor poderá ser responsabilizado por qualquer"
echo "coisa que possa ocorrer de errado. Ainda que seja por falha provocada"
echo "pelo script.Isto significa que ao fazer uso, você concorda em assumir"
echo "toda a responsabilidade!" 
echo
read -n 1 -p "Tecle ENTER para continuar."
tput blink
echo
echo "IMPORTANTE:"
echo "-----------"
echo
tput sgr0
echo "Para o sucesso da execução, certifique-se de que o Bind9 com todas"
echo "as ferramentas e arquivos que o acompanham estejam instalados."
echo "Certifique-se também, de que sua rede já esteja configurada!"
echo
echo "FAÇA um BACKUP de todos os seus arquivos de configuração,"
echo "especialmente os do BIND9."
echo
echo "Ao final da execução deste script, o arquivo /etc/resolv.conf passará"
echo "a ter o IP desta máquina como \"nameserver\". Isto significa que, caso"
echo "você dê um stop no bind9, este arquivo terá que ser REeditado manualmente."
echo
echo "Deseja prosseguir?? s/n"
echo
read YN
if [ $YN = "s" ]; then
# Verificando se o usuário tem privilégios de root:
    if [ `id -un` != root ]; then
    echo
    echo "Você NÃO está com privilégios de root."
    echo "Será necessário logar-se como root e recomeçar." 
    echo
    fi
echo "OK, vamos prosseguir!"
echo
else
echo "OK, vamos parar!"
echo
echo "Saindo..."
echo
exit
fi
#
# Capturando as variáveis da rede:

# Pegando os dados para montar um Name-Server:
echo
echo "ATENÇÃO: --> Na hora de responder às perguntas, observe que:"
echo
echo "1) Sempre que aparecer um menu, faça a escolha numérica correspondente."
echo
echo "2) Hostname é apenas o nome do computador na rede; é diferente de FQDN."
echo "O FQDN inclui o hostname.domínio !!!"
echo
echo "Deseja montar um Name-Server nesta máquina? (s)sim | (n)não"
read YN
if [ $YN = "s" ]; then
    echo
    echo "Você respondeu [ sim ]. Parando o serviço NAMED..."
    echo
    /etc/init.d/bind9 stop
    echo
    echo "Farei um backup dos arquivos de seu BIND9 em /root/bkp_etcbind"
    mkdir /root/bkp_etcbind
    cp -rf /etc/bind /root/bkp_etcbind
    echo
    echo "Serão necessários alguns dados sobre sua rede..."
    echo
    echo "Qual o Domínio a que esta máquina pertence. Ex teste.local"
    read DM
    echo
    echo "Qual o IP da Rede? Coloque no formato 'addr.arpa'."
    echo "Ex. Se sua rede for 10.1.1.0 ficará 1.1.10" 
    read REDE
    echo
    echo "Qual o hostname (nome) desta máquina? Ex. Xxoin"
    echo "NÃO pode existir o caracter -ponto- (.) . NÃO pode ser apenas NS"
    read HOSTNS
    echo
    echo "Qual o IP desta máquina?"
    read IPNS
    echo
    echo "Crie um diretório temporário para armazenamento das variáveis."
    echo "Exemplo: /tmp/dnstmp"
    echo "Este diretório será excluído ao final da configuração"
    read DIRTMP
   
else 
echo
echo "Se sua intenção for montar um Servidor de DNS, digite \"s\" minúsculo."
echo
exit
fi   

#----------------------------------------------------------------------------
# --- LEIA-ME --- LEIA-ME --- LEIA-ME --- LEIA-ME --- LEIA-ME --- LEIA-ME ---

# Talvez seja necessário você ajustar estas variáveis em conformidade 
# com sua instalação:

# Definindo a localização dos arquivos do BIND:
# Todos os testes foram feitos utilizando a instalação "default" do Debian 3.1 .
# Nesta Distro, o Bind está instalado em /etc/bind e utiliza o arquivo
# /etc/bind/named.conf.local para criação de Domínios Locais.

# Diretório a ser a base no arquivo named.conf:
DIRBIND=/etc/bind
# Local onde o Bind deverá procurar o named.conf:
CONF=$DIRBIND/named.conf
# Local onde será gravado o registro.db de seu Domínio:
ARQDB=$DIRBIND/$DM.db
# Local onde será gravado o registro reverso de seu Domínio:
ARQREV=$DIRBIND/$DM.rev.db
# Arquivo named.conf.local:
NAMEDLOCAL=/$DIRBIND/named.conf.local
#------------------------------------------------------------------

#------------------------------------------------------------------
echo 
echo "Vamos gravar as configurações no diretório temporário acima..."
echo
# Escrevendo a rede em forma addr.arpa:
if [ ! -d $DIRTMP ]; then
mkdir $DIRTMP
echo $REDE > $DIRTMP/net.tmp
echo $IPNS > $DIRTMP/ns.tmp

else
echo
echo "O diretório temporário indicado já existe. Impossível continuar..."
echo "Será necessário recomeçar! Saindo sem fazer nada..."
echo
exit
fi

# Descrevendo as funções:

# ---------------Abrindo função master:----------------------------
MASTER()
{

# Editando o arquivo /etc/bind/named.conf.local:
echo > $NAMEDLOCAL
echo >> $NAMEDLOCAL
echo \# Criando a zona principal do domínio \"$DM\" >> $NAMEDLOCAL
echo >> $NAMEDLOCAL
echo zone \"$DM\" \{ >> $NAMEDLOCAL
echo type master\; >> $NAMEDLOCAL
echo file \"$ARQDB\"\; >> $NAMEDLOCAL
echo \}\; >> $NAMEDLOCAL

echo >> $NAMEDLOCAL
echo >> $NAMEDLOCAL
echo \# Criando a zona reversa do Domínio \"$DM\" >> $NAMEDLOCAL
echo >> $NAMEDLOCAL
echo zone \"$REDE.in-addr.arpa\" \{ >> $NAMEDLOCAL
echo type master\; >> $NAMEDLOCAL
echo file \"$ARQREV\"\; >> $NAMEDLOCAL
echo \}\; >> $NAMEDLOCAL
echo >> $NAMEDLOCAL

# Criando arquivo domínio.db:
echo \; Este arquivo refere-se à zona principal do Domínio \"$DM\". > $ARQDB
echo >> $ARQDB
echo \$TTL 43200 >> $ARQDB
echo @ IN SOA $HOSTNS.$DM. root.$DM. \( >> $ARQDB
echo `date +%Y%m%d01` \; serial >> $ARQDB
echo 3600 \; refresh >> $ARQDB
echo 900 \; retry >> $ARQDB
echo 1209600 \; expire >> $ARQDB
echo 43200 \; default ttl >> $ARQDB
echo \) >> $ARQDB
echo >> $ARQDB
echo \; Servidor DNS: >> $ARQDB
echo @ IN NS $HOSTNS.$DM. >> $ARQDB
echo $HOSTNS IN A $IPNS >> $ARQDB

# Criando arquivo de zona reversa:
echo \; Este arquivo refere-se à zona reversa do Domínio \"$DM\" > $ARQREV
echo >> $ARQREV
echo \$TTL 43200 >> $ARQREV
echo @ IN SOA $HOSTNS.$DM root.$DM \( >> $ARQREV
echo `date +%Y%m%d01` \; serial >> $ARQREV
echo 3600 \; refresh >> $ARQREV
echo 900 \; retry >> $ARQREV
echo 1209600 \; expire >> $ARQREV
echo 43200 \; default_ttl >> $ARQREV
echo \) >> $ARQREV
echo >> $ARQREV
echo \; Servidor DNS: >> $ARQREV
echo @ IN NS $HOSTNS.$DM. >> $ARQREV
echo $(cut -d. -f4 $DIRTMP/ns.tmp) IN PTR $HOSTNS.$DM. >> $ARQREV
echo
echo
echo "Atenção!"
echo "Atenção!!"
echo "Atenção!!!"
echo
echo "Registrando outros Servidores do Domínio..."
echo
    echo
    
    echo "Seu Domínio terá um Servidor de Nomes Secundário? s/n"
    read YN 
    if [ $YN = "s" ]; then
    echo "Qual o hostname (nome) do Servidor de Nomes Secundário?"
    echo "Não pode existir o caracter -ponto- (.) . Também NÃO pode ser NS"
    read HOSTNS02
    echo "Qual é o IP do Servidor de Nomes Secundário?"
    read IPNS02
    echo $IPNS02 > $DIRTMP/02.tmp  
    
    # Editando arquivo domínio.db e domínio.rev.db, referente ao NS02:
    echo >> $ARQDB
    echo \; Servidor NS2: >> $ARQDB
    echo @ IN NS $HOSTNS02.$DM. >> $ARQDB
    echo $HOSTNS02 IN A $IPNS02 >> $ARQDB
    echo >> $ARQREV
    echo \; Servidor NS2: >> $ARQREV
    echo @ IN NS $HOSTNS02.$DM. >> $ARQREV
    echo $(cut -d. -f4 $DIRTMP/02.tmp) IN PTR $HOSTNS02.$DM. >> $ARQREV
    
    else
    echo "Este DNS não está sendo configurado para trabalhar com um DNS_Slave."
    fi
    echo
    echo
    
    echo "Seu Domínio terá um Servidor de Correio? s/n"
    read YN
    if [ $YN = "s" ]; then
    echo "Qual o hostname (nome) do Servidor de Correio?"
    echo "NÃO pode existir o caracter -ponto- (.) ."
    read HOSTMAIL
    echo "Qual o IP do Servidor de Correio?"
    read IPMAIL
    echo $IPMAIL > $DIRTMP/mx.tmp

    # Editando arquivo domínio.db e domínio.rev.db, referente ao MailServer:"
    echo >> $ARQDB
    echo \; Servidor de e-mail: >> $ARQDB
    echo @ IN MX 5 $HOSTMAIL.$DM. >> $ARQDB
    echo $HOSTMAIL IN A $IPMAIL >> $ARQDB
    echo mail IN CNAME $HOSTMAIL >> $ARQDB
    echo >> $ARQREV
    echo \; Servidor de e-mail: >> $ARQREV
    echo $(cut -d. -f4 $DIRTMP/mx.tmp) IN PTR $HOSTMAIL.$DM. >> $ARQREV
    
    else
    echo "Este DNS não está sendo configurado para trabalhar com um MailServer."
    fi
    echo
    echo
    
    echo "Seu Domínio terá um Servidor Web? s/n"
    read YN
    if [ $YN = "s" ]; then
    echo "Qual o hostname (nome) do Servidor Web?"
    echo "NÃO pode existir o caracter -ponto- (.) ."
    read HOSTWEB
    echo "Qual o IP do Servidor Web?"
    read IPWEB
    echo $IPWEB > $DIRTMP/wb.tmp
    
    # Editando arquivo domínio.db e domínio.rev.db, referente ao WebServer:
    echo >> $ARQDB
    echo \; Servidor Web: >> $ARQDB
    echo $HOSTWEB IN A $IPWEB >> $ARQDB
    echo www IN CNAME $HOSTWEB >> $ARQDB
    echo >> $ARQREV
    echo \; Servidor Web: >> $ARQREV
    echo $(cut -d. -f4 $DIRTMP/wb.tmp) IN PTR $HOSTWEB.$DM. >> $ARQREV
    
    else
    echo "Este DNS não está sendo configurado para trabalhar com um WebServer."
    fi
    echo
    echo
    
    echo "Seu Domínio terá um Servidor de FTP? s/n"
    read YN
    if [ $YN = "s" ]; then
    echo "Qual o hostname (nome) do Servidor de FTP?"
    echo "Não pode existir o caracter -ponto- (.) ." 
    read HOSTFTP
    echo "Qual é o IP do Servidor FTP?"
    read IPFTP
    echo $IPFTP > $DIRTMP/ft.tmp
    
    # Editando arquivo domínio.db e domínio.rev.db, referente ao Ftpserver:
    echo >> $ARQDB
    echo \; Servidor FTP: >> $ARQDB
    echo $HOSTFTP IN A $IPFTP >> $ARQDB
    echo ftp IN CNAME $HOSTFTP >> $ARQDB
    echo >> $ARQDB
    echo >> $ARQREV
    echo \; Servidor FTP: >> $ARQREV
    echo $(cut -d. -f4 $DIRTMP/ft.tmp) IN PTR $HOSTFTP.$DM. >> $ARQREV
    echo >> $ARQREV
    else
    echo "Este DNS não está sendo configurado para trabalhar com um FtpServer."
    fi
    echo

}
#------------- Fechada a função master-------------------------------


#------------------- Abrindo função slave:----------------------------

SLAVE()
{

echo "Esta configuração requer o IP do Servidor Primário..."
echo "Digite o IP do Servidor de nomes principal:"
read MASTER

#Permitindo que o Servidor Primário grave os registros:
chown -R named $DIRBIND
chgrp -R named $DIRBIND

# Criando arquivo named.conf.local:
# Editando o arquivo /etc/bind/named.conf.local:
echo > $NAMEDLOCAL
echo >> $NAMEDLOCAL
echo \# Criando a zona principal do domínio \"$DM\" >> $NAMEDLOCAL
echo >> $NAMEDLOCAL
echo zone \"$DM\" \{ >> $NAMEDLOCAL
echo type slave\; >> $NAMEDLOCAL
echo file \"$ARQDB\"\; >> $NAMEDLOCAL
echo masters \{ $MASTER\; \}\; >> $NAMEDLOCAL
echo \}\; >> $NAMEDLOCAL

# Editando o arquivo /etc/bind/named.conf.local:
echo >> $NAMEDLOCAL
echo >> $NAMEDLOCAL
echo \# Criando a zona reversa do Domínio \"$DM\" >> $NAMEDLOCAL
echo >> $NAMEDLOCAL
echo zone \"$REDE.in-addr.arpa\" \{ >> $NAMEDLOCAL
echo type slave\; >> $NAMEDLOCAL
echo file \"$ARQREV\"\; >> $NAMEDLOCAL
echo masters \{ $MASTER\; \}\; >> $NAMELOCAL
echo \}\; >> $NAMEDLOCAL
echo >> $NAMEDLOCAL

}
#------------- Fechada a função slave -------------------------------


# Execução:
echo
echo "Você deseja configurar um servidor master, ou slave?"
echo
read NAME
echo
echo "Aguarde"
echo "apenas"
echo "alguns"
echo "segundos"
echo "..."
sleep 2
echo
if [ $NAME = "slave" ]; then

SLAVE
/etc/init.d/bind9 start
echo nameserver $IPNS > /etc/resolv.conf
rm -Rf $DIRTMP
echo
echo "Arquivo named.conf.local:"
echo "-------------------------"
named-checkconf $NAMEDLOCAL
echo
echo "Zona reversa:"
echo "-------------"
named-checkzone $REDE.in-addr.arpa $ARQREV
echo
echo "Zona principal:"
echo "---------------"
named-checkzone $DM $ARQDB
echo 
echo "Verifique ACIMA se não há erros nos arquivos."
echo   

else 
MASTER
/etc/init.d/bind9 start
echo nameserver $IPNS >> /etc/resolv.conf
rm -Rf $DIRTMP
echo
echo "Arquivo named.conf.local:"
echo "-------------------------"
named-checkconf $NAMEDLOCAL
echo
echo "Zona reversa:"
echo "-------------"
named-checkzone $REDE.in-addr.arpa $ARQREV
echo
echo "Zona principal:"
echo "---------------"
named-checkzone $DM $ARQDB
echo 
echo "Verifique ACIMA se não há erros nos arquivos."
echo   
    
fi
# -----------------------------------------
# Desenvolvido por Edson Gonçalves de Lima
#    Campo Grande, MS, novembro de 2005
# ------------------------------------------

Scripts recomendados

Teste de desempenho com números primos em BASH

Load Balance

Script - Realizando relatório do servidor

Criação de usuario / gerando senha automatica

cal2svg gerador de calendários em formato vetorial SVG


  

Comentários
[1] Comentário enviado por joneskill em 02/01/2006 - 13:54h

Parabesn Edson Gonsalves, otimo script, assim como poucos scripts este funcionou de primeira. Foi colocar responder as perguntas e prontinho. Apos so atualizei no registro.br (aceitou na hora). e parti para o Abraco.. Parabens novamente ....

[2] Comentário enviado por Cassi_Jones em 13/01/2006 - 06:00h

Cara você é meu ídolo!!! :D ... não tava mais aguentando conferir os arquivos e dando erro no restart!!! Valew cara!!!

[3] Comentário enviado por leoberbert em 03/02/2006 - 16:21h

Ótimo script e de excelente qualidade.. Muito bom msm.

Parabèns e continue assim.

[4] Comentário enviado por agk em 09/03/2006 - 20:50h

Excelente script, vai facilitar bastante as coisas. Valeu, [ ]'s.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts