Diretórios e arquivos usados
Com o comando acima saberemos onde encontrar os pacotes instalados, mas precisaremos dos arquivos que foram instalados em /etc/bind, isso na distribuição Debian. Não vou me alongar na explicação devido ao grande material que temos na internet onde contém a explicação destes arquivos, mas o que usaremos e que são os mais importantes são os: Named.conf, named.conf.local, named.conf.options e o rndc.key.
- named.conf: Ele é o arquivo principal da instalação do bind nele contém as zonas existentes e o caminho de seus arquivos de configuração.
- named.conf.local: Nele fica as configurações das zonas que serão criadas e o caminho de seus arquivos de configuração. No arquivo named.conf tem um include que aponta para este arquivo trazendo assim suas configurações de zona sem ter que alterar o arquivo principal.
- named.conf.options: Nele é possível incluirmos opções para o servidor como esconder a versão por segurança do servidor, se ele será recursivo ou não, entre outras opções.
- rndc.key: Neste arquivo fica a chave criptográfica do servidor.
Criação das zonas
Estou usando os dados de minha rede, não esqueça de alterar para rede a ser usada. Para criarmos as zonas de nosso servidor usaremos o arquivo named.conf.local, pois como disse acima a arquivo named.conf faz referências a este arquivo. Ficaria assim:
include "/etc/bind/zones.rfc1918";
// ## minhas zonas ##
zone "pasquajf.com.br" IN {
type master;
file "/etc/bind/db.pasquajf.com.br";
allow-update { pdc; };
allow-transfer { none; };
};
// ## zona reversa ##
zone "50.168.192.in-addr.arpa IN" {
type master;
file "/etc/bind/db.50.168.192";
allow-update { pdc; };
allow-transfer { none; };
};
// ## fim das minhas zonas ##
Criação dos arquivos das zonas
Após criado as zonas temos que criar os arquivos de configuração das zonas. Como podemos ver eles foram criados dentro do caminho especificado em file. Ficando assim o db.pasquajf.com.br:
$TTL 604800
@ IN SOA pasquajf.com.br. rafael.pasquajf.com.br (
2011012701
8h
1h
3d
3d )
pasquajf.com.br IN A 192.168.50.245
www IN A xxx.xx.xx.xx
mail IN A xxx.xx.xx.xx
smtp IN A xxx.xx.xx.xx
pop3 IN A xxx.xx.xx.xx
@ IN MX 10 teste.dominio.com.br
@ IN NS pasquajf.com.br.
E por fim a zona reversa:
$TTL 604800
@ IN SOA pasquajf.com.br. rafael.pasquajf.com.br (
2011012701
8h
1h
3d
3d )
@ IN NS pasquajf.com.br.
245 IN PTR pasquajf.com.br.
Explicação dos dados descritos nos arquivos
- $TTL = parâmetro que indica o tempo de vida da informação desta zona, ou seja, neste caso ela será relida por outro servidor somente após 1 dia (lembre-se que os servidores guardam informações em domínios.
- @ = a melhor leitura para o caractere "@" é "este servidor" e/ou "esta zona";
- IN = em;
- SOA = Start Of Authority - Indica qual o servidor responsável pelo domínio desta zona;
- rafael.pasquajf.com.br - e-mail do responsável pelo servidor (note a ausência de @);
- ( ) = parâmetros adicionais;
- Serial = número de série das informações do servidor;
- Refresh = tempo no qual o servidor DNS aguardará para replicar suas informações;
- Retry = tempo para espera de uma nova tentativa de replicação (se a anterior falhar);
- Expire = tempo de vida da autoridade do servidor;
- Minimun = tempo mínimo para armazenar a zona em cachê;
- 245 IN PTR = Apontador que significa o último octeto do IP do servidor DNS;
- A = Significa a relação/ip direta.
Integração com o Active Directory
Tive um problema após a implementação do servidor, pois ele respondia, resolvia os nomes da minha rede e também nomes da internet, mas quando eu ia colocar qualquer micro no meu domínio ele apresentava erros de DNS. Depois de procurar obtive no VOL um artigo que me ajudou muito com a integração entre o AD e o DNS. Vamos ao que interessa.
Para que nosso DNS interaja com o AD e responda pelo domínio precisamos acrescentar mais algumas zonas, isso fica fácil descobrir se olharmos no DNS da Microsoft. Essas zonas são padrão e temos que acrescentar no named.conf.local:
// ## zonas usadas pelo AD
zone "_msdcs.pasquajf.com.br" IN {
type master;
file "/var/lib/named/etc/bind/_msdcs.pasquajf.com.br";
allow-update { pdc; };
allow-transfer { none; };
};
zone "_sites.pasquajf.com.br" IN {
type master;
file "/var/lib/named/etc/bind/_sites.pasquajf.com.br";
allow-update { pdc; };
allow-transfer { none; };
};
zone "_tcp.pasquajf.com.br" IN {
type master;
file "/var/lib/named/etc/bind/_tcp.pasquajf.com.br.zone";
allow-update {pdc; };
allow-transfer { none; };
};
zone "_udp.pasquajf.com.br" IN {
type master;
file "/var/lib/named/etc/bind/_udp.pasquajf.com.br.zone";
allow-update { pdc; };
allow-transfer { none; };
};
include "/etc/bind/zones.rfc1918";
Para questão de estudos; type: significa se ele será master ou slave, file: caminho para os dados da zona, allow-update: quem pode fazer update nas zonas, no caso meu antigo servidor DNS e allow-transfer: para fazer transferências de zona.
O pdc foi declarado dentro do arquivo named.conf.options:
## ACL que indica o AD
acl "pdc" { 192.168.50.220; };
Após feito isso basta criar os arquivos com os dados das zonas, as zonas necessárias para esta integração são: _tcp, _udp, _sites e _msdcs.
Vou colocar a criação do arquivo _msdcs.pasquajf.com.br depois basta apenas copiar o arquivo e alterar os nomes dos mesmos.
$ORIGIN .
$TTL 604800
_msdcs.pasquajf.com.br IN SOA @ rafael.pasquajf.com.br. (
2011012601
8h
1h
3d
3d )
NS @
$ORIGIN _msdcs.pasquajf.com.br
Após isto, altere o:
_msdcs.pasquajf.com.br
Por:
_udp.pasquajf.com.br
E os outros que faltam. Com isso já podemos interagir com o AD sem problemas.
Implementando o chroot
Esta parte foi retirado do script descrito neste artigo e como eu já tinha meu servidor sendo executado eu apenas implementei o chroot. Segue o script alterado.
#!/bin/bash
######################################### CRIACAO E MODIFICACAO DO SCRIPT
##################################################
echo Sistema de execucao do Chroot
echo Desenvolvido por Douglas Q. dos Santos e Modificado por Rafael da Silva Rosa
######################################## COMANDOS UTILIZADOS NO SCRIPT
######################################################
APTITUDE=$(which aptitude)
CAT=$(which cat)
CHMOD=$(which chmod)
CHOWN=$(which chown)
DATA=$(which date)
LN=$(which ln)
MKDIR=$(which mkdir)
MKNOD=$(which mknod)
MV=$(which mv)
SLEEP=$(which sleep)
CUT=$(which cut)
VAR="pasquajf.com.br"
########################################### CAMINHO DA JAULA DO BIND
########################################################
PATH_BIND="/var/lib/named"
########################################### CRIAÃÃO DA ÃRVORE DE DIRETÃRIO
##################################################
${MKDIR} -p ${PATH_BIND}/etc
${MKDIR} -p ${PATH_BIND}/dev
${MKDIR} -p ${PATH_BIND}/var/cache/bind
${MKDIR} -p ${PATH_BIND}/var/run/bind/run
${MKNOD} ${PATH_BIND}/dev/null c 1 3
${MKNOD} ${PATH_BIND}/dev/random c 1 8
########################################### AJUSTANDO PERMISSÃES
############################################################
${CHMOD} 666 ${PATH_BIND}/dev/null ${PATH_BIND}/dev/random
${CHOWN} -R bind:bind ${PATH_BIND}/var/*
${MV} /etc/bind ${PATH_BIND}/etc
${LN} -s ${PATH_BIND}/etc/bind /etc/bind
${CHOWN} -R bind:bind ${PATH_BIND}/etc/bind
########################################## AJUSTANDO O ARQUIVO /ETC/DEFAULT/BIND9
###########################################
${CAT} <<EOF > /etc/default/bind9
#/etc/default/bind9
RESOLVCONF=yes
# startup options for the server
#OPTIONS="-u bind"
OPTIONS="-u bind -t ${PATH_BIND}"
EOF
############################################ AJUSTANDO O ETC/RESOLV.CONF
####################################################
${CAT} <<EOF > /etc/resolv.conf
domain ${VAR}
nameserver 127.0.0.1
EOF
############################################## INICIANDO OS SERVIÃOS
########################################################
/etc/init.d/bind9 stop
/etc/init.d/bind9 start
################################################ MENSAGEM FINAL
#############################################################
echo "INSTALACAO FINALIZADA"
echo "Faca os ajustes necessarios e reinicie o servico *bind9*"
echo "Os Logs serao gerados no arquivo /var/log/syslog"
exit 0
Para fazer os testes execute o comando:
# ps aux |grep bind
Se aparecer como está abaixo é sinal que está sendo executado em chroot:
bind 3004 0.0 3.5 51076 18148 ? Ssl 14:17 0:05 /usr/sbin/named -u bind -t /var/lib/named
Teste no servidor
Para fazermos os teste do serviço de DNS podemos usar várias ferramentas, segue algumas:
- named-checkconf: Checa o arquivo named;
- named-checkzone domínio db.dominio: Checa o arquivo do db da zona;
- Comando dig: A execução deste comando serve para sabermos se nosso servidor está realmente resolvendo os nomes.