Instalação e configuração do Bind Trabalhando com Views Master/Slave no CentOS 6
Configurando o DNS no CentOS 6 com MultiView do mesmo domínio e fazendo replicação. Problema: Quando era efetuado replicação e as zonas tinham o mesmo nome ele sempre replicava a zona da view interna ou o primeiro arquivo de referência dentro do named.conf.
Solução dentro de cada View vamos forçar para quem tem que ser a replica e no slave receber a replica que foi forçada por View. Precisamos de 2 endereços ip para o servidor Slave.
- IP do slave que vai receber a view interna: 10.0.0.27
- IP do slave que vai receber a view externa: 10.0.0.28
- IPS do servidor master 10.0.0.25.
Prepare o seu sistema com o seguinte script http://wiki.douglasqsantos.com.br/doku.php/confinicialcentos6_en para que não falte nenhum pacote ou configuração.
Vamos fazer um update dos repositórios e vamos atualizar o sistema primeiramente.
yum check-update && yum update -y
Agora vamos instalar os pacotes do bind
yum install bind-chroot bind-utils bind-libs -y
Agora vamos colocar ele na inicialização do sistema
chkconfig named on
Agora vamos reiniciar o serviço para que o named monte a sua jaula
/etc/init.d/named restartAgora vamos fazer um backup do arquivo de configuração do nosso bind.
cp -Rfa /etc/named.conf{,.bkp}Agora vamos deixar o arquivo /etc/named.conf como abaixo, aqui estou utilizando a rede 10.0.0.0/23 como minha rede local para exemplo, mude conforme necessário.
vim /etc/named.conf #Criando acl para definir as nossas redes internas. acl "trusted" { 10.0.0.0/23; 127.0.0.1; }; #Acl que define qual vai ser o slave que vai receber a view interna acl "internal_slave" { 10.0.0.27; }; #Acl que define qual vai ser o slave que vai receber a view externa acl "external_slave" { 10.0.0.28; }; #Algumas opções do Bind options { listen-on port 53 { 127.0.0.1; 10.0.0.0/23; }; directory "/var/named"; dump-file "/var/named/data/cache_dump.db"; statistics-file "/var/named/data/named_stats.txt"; memstatistics-file "/var/named/data/named_mem_stats.txt"; allow-query { any; }; recursion no; version "Não Disponível"; }; #Controles include "/etc/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; }; }; #Incluir os nossos arquivos externos que vão conter as configurações das Views include "/etc/named/named.conf.internal-zones"; include "/etc/named/named.conf.external-zones";
Agora vamos gerar a chave do rndc
rndc-confgen -a -c /etc/rndc.key -k rndc-key -b 256
Agora precisamos acertar as permissões dos arquivos
chown root:named /etc/rndc.key chmod 640 /etc/rndc.key
Agora vamos criar o nosso arquivo da View Interna /etc/named/named.conf.internal-zones onde somente os nossos clientes da rede local e o nosso servidor local vão poder consultar.
vim /etc/named/named.conf.internal-zones #Definindo a nossa View interna view "internal" { #Definindo quais clientes vão poder consultar esta view, então vão ser a nossa rede interna mesmo o servidor external_slave match-clients { !external_slave; trusted; }; #Definindo que os clientes dessa view vão poder efetuar consultas recursivas. recursion yes; #Qual servidor vai poder receber a replica dessa view allow-transfer { internal_slave; }; #Quem vai ser notificado aqui temos que informar os endereços ips. also-notify { 10.0.0.27; }; #Zona que define os endereços dos root Masters. zone "." IN { type hint; file "named.ca"; }; #Nosso domínio de teste. zone "douglasqsantos.com.br" { type master; file "db.douglasqsantos.com.br.internal"; }; #Este arquivo contem as zonas locais include "/etc/named.rfc1912.zones"; };
Agora vamos criar a nossa View Externa /etc/named/named.conf.external-zones aonde qualquer um vai poder consultar não sendo a nossa rede local e nem o nosso servidor local
vim /etc/named/named.conf.external-zones #Definição da nossa view Externa view "external" { #Definindo quais clientes vão poder consultar esta view match-clients { external_slave; !trusted; any; }; #Os clientes dessa view não poderão efetuar consultas recursivas recursion no; #Quam vai poder receber replica dessa view allow-transfer { external_slave; }; #Quem vai ser notificado aqui temos que informar o endereço ip also-notify { 10.0.0.28; }; #Nosso dominio de teste. zone "douglasqsantos.com.br" { type master; file "db.douglasqsantos.com.br.external"; }; };Agora vamos criar o arquivo que os nossos clientes internos vão consultar /var/named/chroot/var/named/db.douglasqsantos.com.br.internal
vim /var/named/chroot/var/named/db.douglasqsantos.com.br.internal $TTL 86400 @ IN SOA dns.douglasqsantos.com.br. root.dns.douglasqsantos.com.br. ( 2011061703 ; Serial 3600 ; Refresh 1800 ; Retry 1209600 ; Expire 3600 ) ; Minimum ; @ IN NS douglasqsantos.com.br. douglasqsantos.com.br. IN TXT "v=spf1 a mx ip4:10.0.0.0/23 -all" mail.douglasqsantos.com.br IN TXT "v=spf1 a -all" @ IN NS ns1.douglasqsantos.com.br. @ IN NS ns2.douglasqsantos.com.br. @ IN MX 0 mail.douglasqsantos.com.br. ;NAME SERVERS @ IN A 10.0.0.25 ns1 IN A 10.0.0.25 ns2 IN A 10.0.0.27 dns IN A 10.0.0.25 ;MAIL SERVERS mail IN A 10.0.0.25 imap IN CNAME mail pop IN CNAME mail smtp IN CNAME mail webmail IN CNAME mail ;WEB SERVERS www IN A 10.0.0.27 ftp IN CNAME www mailadmin IN CNAME www
Agora vamos criar o arquivo que os clientes externos vão consultar /var/named/chroot/var/named/db.douglasqsantos.com.br.external
vim /var/named/chroot/var/named/db.douglasqsantos.com.br.external $TTL 86400 @ IN SOA dns.douglasqsantos.com.br. root.dns.douglasqsantos.com.br. ( 2011061703 ; Serial 3600 ; Refresh 1800 ; Retry 1209600 ; Expire 3600 ) ; Minimum ; @ IN NS douglasqsantos.com.br. douglasqsantos.com.br. IN TXT "v=spf1 a mx ip4:200.200.200.0/23 -all" mail.douglasqsantos.com.br IN TXT "v=spf1 a -all" @ IN NS ns1.douglasqsantos.com.br. @ IN NS ns2.douglasqsantos.com.br. @ IN MX 0 mail.douglasqsantos.com.br. ;NAME SERVERS @ IN A 200.200.200.25 ns1 IN A 200.200.200.25 ns2 IN A 200.200.200.27 dns IN A 200.200.200.25 ;MAIL SERVERS mail IN A 200.200.200.25 imap IN CNAME mail pop IN CNAME mail smtp IN CNAME mail webmail IN CNAME mail ;WEB SERVERS www IN A 200.200.200.27 ftp IN CNAME www mailadmin IN CNAME www
Vamos agora ajustar o arquivo /etc/resolv.conf para que o nosso servidor consiga encontrar a zona do douglasqsantos.com.br
vim /etc/resolv.conf domain douglasqsantos.com.br nameserver 127.0.0.1
Vamos agora reiniciar o serviço e testar.
/etc/init.d/named restartAgora vamos fazer alguns testes.
Vamos consultar o endereço do host www
nslookup www Server: 127.0.0.1 Address: 127.0.0.1#53 Name: www.douglasqsantos.com.br Address: 10.0.0.27Agora vamos consultar o endereço do host mail.douglasqsantos.com.br aqui poderíamos consultar somente por mail dai ele completaria com o parâmetro domain do resolv.conf
nslookup mail.douglasqsantos.com.br Server: 127.0.0.1 Address: 127.0.0.1#53 Name: mail.douglasqsantos.com.br Address: 10.0.0.25Vamos consultar os registros do tipo A do nosso domínio.
dig -t A douglasqsantos.com.br ; <<>> DiG 9.7.0-P2-RedHat-9.7.0-6.P2.el5_6.2 <<>> -t A douglasqsantos.com.br ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 47736 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 3, ADDITIONAL: 2 ;; QUESTION SECTION: ;douglasqsantos.com.br. IN A ;; ANSWER SECTION: douglasqsantos.com.br. 86400 IN A 10.0.0.25 ;; AUTHORITY SECTION: douglasqsantos.com.br. 86400 IN NS ns1.douglasqsantos.com.br. douglasqsantos.com.br. 86400 IN NS douglasqsantos.com.br. douglasqsantos.com.br. 86400 IN NS ns2.douglasqsantos.com.br. ;; ADDITIONAL SECTION: ns1.douglasqsantos.com.br. 86400 IN A 10.0.0.25 ns2.douglasqsantos.com.br. 86400 IN A 10.0.0.27 ;; Query time: 1 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) ;; WHEN: Fri Jun 24 17:04:25 2011 ;; MSG SIZE rcvd: 130Vamos agora consultar todos os registros do nosso domínio.
dig -t axfr douglasqsantos.com.br ; <<>> DiG 9.7.0-P2-RedHat-9.7.0-6.P2.el5_6.2 <<>> -t axfr douglasqsantos.com.br ;; global options: +cmd douglasqsantos.com.br. 86400 IN SOA dns.douglasqsantos.com.br. root.dns.douglasqsantos.com.br. 2011061703 3600 1800 1209600 3600 douglasqsantos.com.br. 86400 IN MX 0 mail.douglasqsantos.com.br. douglasqsantos.com.br. 86400 IN A 10.0.0.25 douglasqsantos.com.br. 86400 IN NS ns1.douglasqsantos.com.br. douglasqsantos.com.br. 86400 IN NS ns2.douglasqsantos.com.br. douglasqsantos.com.br. 86400 IN NS douglasqsantos.com.br. douglasqsantos.com.br. 86400 IN TXT "v=spf1 a mx ip4:10.0.0.0/23 -all" mail.douglasqsantos.com.br.douglasqsantos.com.br. 86400 IN TXT "v=spf1 a -all" dns.douglasqsantos.com.br. 86400 IN A 10.0.0.25 ftp.douglasqsantos.com.br. 86400 IN CNAME www.douglasqsantos.com.br. imap.douglasqsantos.com.br. 86400 IN CNAME mail.douglasqsantos.com.br. mail.douglasqsantos.com.br. 86400 IN A 10.0.0.25 mailadmin.douglasqsantos.com.br. 86400 IN CNAME www.douglasqsantos.com.br. ns1.douglasqsantos.com.br. 86400 IN A 10.0.0.25 ns2.douglasqsantos.com.br. 86400 IN A 10.0.0.27 pop.douglasqsantos.com.br. 86400 IN CNAME mail.douglasqsantos.com.br. smtp.douglasqsantos.com.br. 86400 IN CNAME mail.douglasqsantos.com.br. webmail.douglasqsantos.com.br. 86400 IN CNAME mail.douglasqsantos.com.br. www.douglasqsantos.com.br. 86400 IN A 10.0.0.27 douglasqsantos.com.br. 86400 IN SOA dns.douglasqsantos.com.br. root.dns.douglasqsantos.com.br. 2011061703 3600 1800 1209600 3600 ;; Query time: 2 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) ;; WHEN: Fri Jun 24 17:04:44 2011 ;; XFR size: 20 records (messages 1, bytes 495)Como pode ser notado o nosso servidor estar funcionando corretamente em MultiView, agora vamos fazer os ajustes para ele efetuar a replicação como precisamos.
Agora vamos configurar o servidor Slave
Vamos fazer um update dos repositórios e vamos atualizar o sistema primeiramente.
yum check-update && yum update -y
Agora vamos instalar os pacotes do bind
yum install bind-chroot bind-utils bind-libs -y
Agora vamos colocar ele na inicialização do sistema
chkconfig named on
Agora vamos reiniciar o serviço para que o named monte a sua jaula
/etc/init.d/named restart
Agora vamos fazer um backup do arquivo de configuração do nosso bind.
cp -Rfa /etc/named.conf{,.bkp}
Agora vamos deixar o arquivo /etc/named.conf como abaixo, aqui estou utilizando a rede 10.0.0.0/23 como minha rede local para exemplo, mude conforme necessário.
vim /etc/named.conf #Criando acl para definir as nossas redes internas. acl "trusted" { 10.0.0.0/23; 127.0.0.1; }; #Acl que define qual vai ser o dns master acl "dns_master" { 10.0.0.25; }; #Algumas opções do Bind options { listen-on port 53 { 127.0.0.1; 10.0.0.0/23; }; directory "/var/named"; dump-file "/var/named/data/cache_dump.db"; statistics-file "/var/named/data/named_stats.txt"; memstatistics-file "/var/named/data/named_mem_stats.txt"; allow-query { any; }; recursion no; version "Não Disponível"; }; #Controles include "/etc/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; }; }; #Incluir os nossos arquivos externos que vão conter as configurações das Views include "/etc/named/named.conf.internal-zones"; include "/etc/named/named.conf.external-zones";
Agora vamos gerar a chave do rndc
rndc-confgen -a -c /etc/rndc.key -k rndc-key -b 256
Agora precisamos acertar as permissões dos arquivos
chown root:named /etc/rndc.key chmod 640 /etc/rndc.key
Agora vamos criar o arquivo da nossa View interna /etc/named/named.conf.internal-zones
vim /etc/named/named.conf.internal-zones #Definindo a nossa View interna view "internal" { #Definindo quais clientes vão poder consultar esta view, então vão ser a nossa rede interna mesmo o servidor external_slave match-clients { trusted; }; #Definindo que os clientes dessa view vão poder efetuar consultas recursivas. recursion yes; #Qual servidor vai poder receber a replica dessa view allow-notify { dns_master; }; #Nao disponibiliza transferencia de zona do servidor SLAVE allow-transfer { none; }; #Zona que define os endereços dos root Masters. zone "." IN { type hint; file "named.ca"; }; #Nosso domínio de teste. zone "douglasqsantos.com.br" { type slave; masters { 10.0.0.25; }; transfer-source 10.0.0.27; #Especificando qual transferencia do master que eu vou poder receber nessa view file "slaves/db.douglasqsantos.com.br.internal"; }; #Este arquivo contem as zonas locais include "/etc/named.rfc1912.zones"; };
Vamos agora configurar a View Externa /etc/named/named.conf.external-zones
vim /etc/named/named.conf.external-zones #Definição da nossa view Externa view "external" { #Definindo quais clientes vão poder consultar esta view match-clients { !trusted; any; }; #Os clientes dessa view não poderão efetuar consultas recursivas recursion no; #Quem vai ser notificado aqui temos que informar o endereço ip allow-notify { dns_master; }; #Nao disponibiliza transferencia de zona do servidor SLAVE allow-transfer { none; }; #Nosso dominio de teste. zone "douglasqsantos.com.br" { type slave; masters { 10.0.0.25; }; transfer-source 10.0.0.28; #Especificando qual transferencia do master que eu vou poder receber nessa view. file "slaves/db.douglasqsantos.com.br.external"; }; };Agora vamos ajustar o /etc/resolv.conf
vim /etc/resolv.conf search douglasqsantos.com.br nameserver 127.0.0.1
Agora vamos reiniciar o serviço
/etc/init.d/named restart
Agora podemos acompanhar os logs em
tail -f /var/named/chroot/var/log/named.log 27-Jun-2011 12:55:15.523 xfer-in: info: transfer of 'douglasqsantos.com.br/IN/internal' from 10.0.0.25#53: connected using 10.0.0.27#33882 27-Jun-2011 12:55:15.524 xfer-in: info: transfer of 'douglasqsantos.com.br/IN/internal' from 10.0.0.25#53: Transfer completed: 1 messages, 20 records, 495 bytes, 0.001 secs (495000 bytes/sec) 27-Jun-2011 12:55:15.524 notify: info: zone douglasqsantos.com.br/IN/internal: sending notifies (serial 2011061703) 27-Jun-2011 12:55:16.023 xfer-in: info: transfer of 'douglasqsantos.com.br/IN/external' from 10.0.0.25#53: connected using 10.0.0.28#34466 27-Jun-2011 12:55:16.026 xfer-in: info: transfer of 'douglasqsantos.com.br/IN/external' from 10.0.0.25#53: Transfer completed: 1 messages, 20 records, 500 bytes, 0.002 secs (250000 bytes/sec) 27-Jun-2011 12:55:16.027 notify: info: zone douglasqsantos.com.br/IN/external: sending notifies (serial 2011061703)Vamos conferir o arquivo com a zona interna.
cat /var/named/chroot/var/named/slaves/db.douglasqsantos.com.br.internal $ORIGIN . $TTL 86400 ; 1 day douglasqsantos.com.br IN SOA dns.douglasqsantos.com.br. root.dns.douglasqsantos.com.br. ( 2011061703 ; serial 3600 ; refresh (1 hour) 1800 ; retry (30 minutes) 1209600 ; expire (2 weeks) 3600 ; minimum (1 hour) ) NS ns1.douglasqsantos.com.br. NS ns2.douglasqsantos.com.br. NS douglasqsantos.com.br. A 10.0.0.25 MX 0 mail.douglasqsantos.com.br. TXT "v=spf1 a mx ip4:10.0.0.0/23 -all" $ORIGIN douglasqsantos.com.br. mail.douglasqsantos.com.br TXT "v=spf1 a -all" dns A 10.0.0.25 ftp CNAME www imap CNAME mail mail A 10.0.0.25 mailadmin CNAME www ns1 A 10.0.0.25 ns2 A 10.0.0.27 pop CNAME mail smtp CNAME mail webmail CNAME mail www A 10.0.0.27Agora vamos conferir o arquivo da zona Externa.
cat /var/named/chroot/var/named/slaves/db.douglasqsantos.com.br.external $ORIGIN . $TTL 86400 ; 1 day douglasqsantos.com.br IN SOA dns.douglasqsantos.com.br. root.dns.douglasqsantos.com.br. ( 2011061703 ; serial 3600 ; refresh (1 hour) 1800 ; retry (30 minutes) 1209600 ; expire (2 weeks) 3600 ; minimum (1 hour) ) NS ns1.douglasqsantos.com.br. NS ns2.douglasqsantos.com.br. NS douglasqsantos.com.br. A 200.200.200.25 MX 0 mail.douglasqsantos.com.br. TXT "v=spf1 a mx ip4:200.200.200.0/23 -all" $ORIGIN douglasqsantos.com.br. mail.douglasqsantos.com.br TXT "v=spf1 a -all" dns A 200.200.200.25 ftp CNAME www imap CNAME mail mail A 200.200.200.25 mailadmin CNAME www ns1 A 200.200.200.25 ns2 A 200.200.200.27 pop CNAME mail smtp CNAME mail webmail CNAME mail www A 200.200.200.27Vamos fazer alguns teste de consulta no servidor Slave.
Vamos consultar o endereço do host www
nslookup www Server: 127.0.0.1 Address: 127.0.0.1#53 Name: www.douglasqsantos.com.br Address: 10.0.0.27
Agora vamos consultar o endereço do host mail.douglasqsantos.com.br aqui poderíamos consultar somente por mail dai ele completaria com o parâmetro domain do resolv.conf
nslookup mail.douglasqsantos.com.br Server: 127.0.0.1 Address: 127.0.0.1#53 Name: mail.douglasqsantos.com.br Address: 10.0.0.25Vamos consultar os registros do tipo A do nosso domínio.
dig -t A douglasqsantos.com.br ; <<>> DiG 9.7.0-P2-RedHat-9.7.0-6.P2.el5_6.2 <<>> -t A douglasqsantos.com.br ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 40525 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 3, ADDITIONAL: 2 ;; QUESTION SECTION: ;douglasqsantos.com.br. IN A ;; ANSWER SECTION: douglasqsantos.com.br. 86400 IN A 10.0.0.25 ;; AUTHORITY SECTION: douglasqsantos.com.br. 86400 IN NS ns2.douglasqsantos.com.br. douglasqsantos.com.br. 86400 IN NS ns1.douglasqsantos.com.br. douglasqsantos.com.br. 86400 IN NS douglasqsantos.com.br. ;; ADDITIONAL SECTION: ns1.douglasqsantos.com.br. 86400 IN A 10.0.0.25 ns2.douglasqsantos.com.br. 86400 IN A 10.0.0.27 ;; Query time: 1 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) ;; WHEN: Mon Jun 27 13:02:28 2011 ;; MSG SIZE rcvd: 130Agora vamos consultar todos os registros do nosso domínio.
dig -t AXFR douglasqsantos.com.br ; <<>> DiG 9.7.0-P2-RedHat-9.7.0-6.P2.el5_6.2 <<>> -t AXFR douglasqsantos.com.br ;; global options: +cmd douglasqsantos.com.br. 86400 IN SOA dns.douglasqsantos.com.br. root.dns.douglasqsantos.com.br. 2011061703 3600 1800 1209600 3600 douglasqsantos.com.br. 86400 IN TXT "v=spf1 a mx ip4:10.0.0.0/23 -all" douglasqsantos.com.br. 86400 IN NS ns1.douglasqsantos.com.br. douglasqsantos.com.br. 86400 IN NS ns2.douglasqsantos.com.br. douglasqsantos.com.br. 86400 IN NS douglasqsantos.com.br. douglasqsantos.com.br. 86400 IN A 10.0.0.25 douglasqsantos.com.br. 86400 IN MX 0 mail.douglasqsantos.com.br. mail.douglasqsantos.com.br.douglasqsantos.com.br. 86400 IN TXT "v=spf1 a -all" dns.douglasqsantos.com.br. 86400 IN A 10.0.0.25 ftp.douglasqsantos.com.br. 86400 IN CNAME www.douglasqsantos.com.br. imap.douglasqsantos.com.br. 86400 IN CNAME mail.douglasqsantos.com.br. mail.douglasqsantos.com.br. 86400 IN A 10.0.0.25 mailadmin.douglasqsantos.com.br. 86400 IN CNAME www.douglasqsantos.com.br. ns1.douglasqsantos.com.br. 86400 IN A 10.0.0.25 ns2.douglasqsantos.com.br. 86400 IN A 10.0.0.27 pop.douglasqsantos.com.br. 86400 IN CNAME mail.douglasqsantos.com.br. smtp.douglasqsantos.com.br. 86400 IN CNAME mail.douglasqsantos.com.br. webmail.douglasqsantos.com.br. 86400 IN CNAME mail.douglasqsantos.com.br. www.douglasqsantos.com.br. 86400 IN A 10.0.0.27 douglasqsantos.com.br. 86400 IN SOA dns.douglasqsantos.com.br. root.dns.douglasqsantos.com.br. 2011061703 3600 1800 1209600 3600 ;; Query time: 1 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) ;; WHEN: Mon Jun 27 13:03:31 2011 ;; XFR size: 20 records (messages 1, bytes 495)