Instalando Servidor DNS trabalhando com Multi View no Debian Wheezy
Configurando o DNS no Debian Squeeze 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: 192.168.1.122
- IP do slave que vai receber a view externa: 192.168.1.123
- IP do servidor master 192.168.1.120
- Redes: 10.0.0.0/23, 10.100.0.0/24, 10.101.0.0/24, 10.200.0.0/24, 172.16.0.0/24, 192.168.1.0/24
Prepare o seu sistema com o seguinte script Easy-Debian para que não falte nenhum pacote ou configuração.
Vamos primeiro configurar o Servidor Master
Instalando os pacotes
aptitude update aptitude install bind9 dnsutils -y
Agora vamos parar o nosso Bind para poder efetuar as modificações
/etc/init.d/bind9 stop
Agora vamos ter que criar a nossa jaula
mkdir -p /var/lib/named/etc/bind/zones/{disabled,external,internal} mkdir -p /var/lib/named/dev mkdir -p /var/lib/named/var/log mkdir -p /var/lib/named/var/cache/bind/{disabled,dynamic,master,slave} mkdir -p /var/lib/named/var/run/bind/run mknod /var/lib/named/dev/null c 1 3 mknod /var/lib/named/dev/random c 1 8 mknod /var/lib/named/dev/zero c 1 5
Agora vamos ajustar as permissões
chmod 666 /var/lib/named/dev/{null,random,zero} chown -R bind:bind /var/lib/named/var/*
Agora vamos ajustar as configurações
mv /etc/bind/* /var/lib/named/etc/bind/ rm -rf /etc/bind ln -sf /var/lib/named/etc/bind /etc/bind cp /etc/localtime /var/lib/named/etc chown -R bind:bind /var/lib/named/etc/bind chown -R root:bind /var/lib/named/var/cache/bind/dynamic chmod -R 775 /var/lib/named/var/cache/bind/dynamic
Agora vamos ajustar o arquivo de configuração do bind para ele reconhecer a jaula vamos editar o arquivo /etc/default/bind9
vim /etc/default/bind9 RESOLVCONF=yes OPTIONS="-u bind -t /var/lib/named"
Agora vamos ajustar o /etc/resolv.conf o arquivo tem que ficar como abaixo
vim /etc/resolv.conf nameserver 127.0.0.1Vamos acertar o arquivo /etc/bind/named.conf.options deixe ele como abaixo eu estou definindo a minha rede interna como 192.168.1.0/24 mude ela conforme a necessidade
vim /etc/bind/named.conf.options #/etc/bind/named.conf.options acl "internal_hosts" { 127.0.0.1/32; 10.0.0.0/23; 10.100.0.0/24; 10.101.0.0/24; 10.200.0.0/24; 172.16.0.0/24; 192.168.1.0/24; }; acl "internal_slave" { 192.168.1.122; }; acl "external_slave" { 192.168.1.123; }; 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; 192.168.1.0/24; }; forwarders { 8.8.8.8; 8.8.4.4; }; allow-query { any; }; recursion no; version "Nao Disponivel"; dnssec-enable no; dnssec-validation no; dnssec-lookaside auto; empty-zones-enable yes; }; 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; }; }; include "/etc/bind/bind.keys";
Agora vamos acertar o nosso arquivo /etc/bind/named.conf deixe ele como abaixo
vim /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";
Agora vamos configurar a nossa view interna o arquivo /etc/bind/named.conf.internal-zones como já comentado estou utilizando a rede 192.168.1.0/24 para a minha rede interna mude conforme a necessidade.
vim /etc/bind/named.conf.internal-zones #/etc/bind/named.conf.internal-zones view "internal" { #DEFININDO QUAIS CLIENTES VÃO PODER CONSULTAR ESSA VIEW match-clients { !external_slave; internal_hosts; }; #O NOSSOS CLIENTES DA VIEW INTERNA VÃO PODER EFETUAR CONSULTAS RECURSIVAS recursion yes; #PARA QUAL SERVIDOR VAI SER LIBERADO A TRANSFERENCIA DESSA VIEW. allow-transfer { internal_slave; }; #QUEM O BIND VAI NOTIFICAR EM CASO DE ALTERAÇÕES DE ZONA. allow-notify { internal_slave; }; #ARQUIVOS CONTENDO AS ZONAS MASTER, SLAVE E FORWARD INTERNAS include "/etc/bind/zones/internal/named.conf.internal.master-zones"; include "/etc/bind/zones/internal/named.conf.internal.slave-zones"; include "/etc/bind/zones/internal/named.conf.internal.forward-zones"; };
Agora vamos configurar a View Externa /etc/bind/named.conf.external-zones
vim /etc/bind/named.conf.external-zones #/etc/bind/named.conf.external-zones view "external" { #DEFINIÇÃO DOS CLIENTES QUE VÃO PODER CONSULTAR ESSA VIEW match-clients { external_slave; !internal_hosts; any; }; #OS CLIENTES DESSA VIEW NÃO VÃO PODER EFETUAR CONSULTAS RECURSIVAS recursion no; #PARA QUAL SERVIDOR VAI SER LIBERADA A TRANSFERENCIA DESSA VIEW allow-transfer { external_slave; }; #QUEM O BIND VAI NOTIFICAR QUANDO FOR EFETUADA ALGUMA ALTERAÇÃO NAS ZONAS allow-notify { external_slave; }; #INCLUI ARQUIVOS DE CONFIGURACOES PARA ZONAS MASTER,SLAVE E FORWARD EXTERNAS include "/etc/bind/zones/external/named.conf.external.master-zones"; include "/etc/bind/zones/external/named.conf.external.slave-zones"; include "/etc/bind/zones/external/named.conf.external.forward-zones"; };
Agora vamos ajustar o arquivo de controle de zonas master internas
vim /etc/bind/zones/internal/named.conf.internal.master-zones #/etc/bind/zones/internal/named.conf.internal.master-zones zone "." { type hint; file "/etc/bind/db.root"; }; 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"; }; zone "douglasqsantos.com.br" { type master; file "master/db.douglasqsantos.com.br-internal"; };
Agora vamos ajustar o arquivo de controle de zonas slave internas, aqui eu vou utilizar uma zona ficticia chamada douglasqsantos.lan pois um servidor master também pode slave de outra zona, caso não queira utilizar uma zona slave deixe o arquivo somente com a primeira linha.
vim /etc/bind/zones/internal/named.conf.internal.slave-zones #/etc/bind/zones/internal/named.conf.internal.slave-zones zone "douglasqsantos.lan" { type slave; masters { 172.32.0.120; }; transfer-source 172.32.0.122; file "slave/db.douglasqsantos.lan-internal"; };
Agora vamos ajustar o arquivo de controle de zonas master externas
vim /etc/bind/zones/external/named.conf.external.master-zones #/etc/bind/zones/external/named.conf.external.master-zones zone "douglasqsantos.com.br" { type master; file "master/db.douglasqsantos.com.br-external"; };
Em redes interligadas ou quando a aquisição de novas empresas podemos ter multiplos domínios com isso podemos utilizar o recuso de forward de dns aonde podemos especificar para o nosso servidor de dns aonde ele pode consultar a zona solicitada.
vim /etc/bind/zones/internal/named.conf.internal.forward-zones #/etc/bind/zones/internal/named.conf.internal.forward-zones zone "confiservsolucoes.com.br" { type forward; forwarders { 172.32.0.120; 172.32.0.122; }; };
Aqui no exemplo acima quando pesquisarmos confiservsolucoes.com.br o nosso servidor já vai requisitar a reposta da consulta do cliente para o servidor 172.32.0.120 e caso ele não esteja on ele vai solicitar para o 172.32.0.122
Vamos criar o arquivo de zona de forward para a zona externa
vim /etc/bind/zones/external/named.conf.external.forward-zones #/etc/bind/zones/external/named.conf.external.forward-zones
Vamos comente criar o arquivo de zona slave externa
vim /etc/bind/zones/external/named.conf.external.slave-zones #/etc/bind/zones/external/named.conf.external.slave-zones
Agora que já temos as zonas configuradas precisamos dos arquivos de controles das zonas
Vamos agora criar os arquivos das zonas /var/lib/named/var/cache/bind/master/db.douglasqsantos.com.br-internal
vim /var/lib/named/var/cache/bind/master/db.douglasqsantos.com.br-internal $TTL 86400 @ IN SOA dns.douglasqsantos.com.br. root.dns.douglasqsantos.com.br. ( 2014101801 ; Serial 3600 ; Refresh 1800 ; Retry 1209600 ; Expire 3600 ) ; Minimum ; @ IN NS douglasqsantos.com.br. douglasqsantos.com.br. IN TXT "v=spf1 a mx ip4:192.168.1.0/24 -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 192.168.1.94 ns1 IN A 192.168.1.120 ns2 IN A 192.168.1.122 dns IN A 192.168.1.120 ;MAIL SERVERS mail IN A 192.168.1.242 imap IN CNAME mail pop IN CNAME mail smtp IN CNAME mail webmail IN CNAME mail ;WEB SERVERS www IN A 192.168.1.94 ftp IN CNAME www mailadmin IN CNAME www
Agora vamos configurar o arquivo da view externa /var/lib/named/var/cache/bind/master/db.douglasqsantos.com.br-external
vim /var/lib/named/var/cache/bind/master/db.douglasqsantos.com.br-external $TTL 86400 @ IN SOA dns.douglasqsantos.com.br. root.dns.douglasqsantos.com.br. ( 2014101801 ; 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/28 -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
Agora já podemos reiniciar o nosso bind
/etc/init.d/bind9 restart
Vamos dar uma olhada nos logs
tail -f /var/log/syslog Oct 18 11:58:16 dns01 named[4028]: command channel listening on 127.0.0.1#953 Oct 18 11:58:16 dns01 named[4028]: zone 0.in-addr.arpa/IN/internal: loaded serial 1 Oct 18 11:58:16 dns01 named[4028]: zone 127.in-addr.arpa/IN/internal: loaded serial 1 Oct 18 11:58:16 dns01 named[4028]: zone 255.in-addr.arpa/IN/internal: loaded serial 1 Oct 18 11:58:16 dns01 named[4028]: zone douglasqsantos.com.br/IN/internal: loaded serial 2014101801 Oct 18 11:58:16 dns01 named[4028]: zone localhost/IN/internal: loaded serial 2 Oct 18 11:58:16 dns01 named[4028]: managed-keys-zone ./IN/internal: loaded serial 3 Oct 18 11:58:16 dns01 named[4028]: zone douglasqsantos.com.br/IN/external: loaded serial 2014101801 Oct 18 11:58:16 dns01 named[4028]: managed-keys-zone ./IN/external: loaded serial 3 Oct 18 11:58:16 dns01 named[4028]: running
Vamos efetuar alguns teste de consultas
Vamos consultar o registro www do domínio douglasqsantos.com.br
nslookup www.douglasqsantos.com.br Server: 127.0.0.1 Address: 127.0.0.1#53 Name: www.douglasqsantos.com.br Address: 192.168.1.94
Vamos agora consultar o registro ns1.douglasqsantos.com.br
nslookup ns1.douglasqsantos.com.br Server: 127.0.0.1 Address: 127.0.0.1#53 Name: ns1.douglasqsantos.com.br Address: 192.168.1.120
Ajustando o logrotate para o bind
vim /etc/logrotate.d/named /var/lib/named/var/log/*.log { weekly missingok rotate 7 postrotate /etc/init.d/bind9 reload > /dev/null endscript compress notifempty }
Configuração do Servidor Slave
Instalando os pacotes
aptitude update aptitude install bind9 dnsutils -y
Agora vamos parar o nosso Bind para poder efetuar as modificações
/etc/init.d/bind9 stop
Agora vamos ter que criar a nossa jaula
mkdir -p /var/lib/named/etc/bind/zones/{disabled,external,internal} mkdir -p /var/lib/named/dev mkdir -p /var/lib/named/var/log mkdir -p /var/lib/named/var/cache/bind/{disabled,dynamic,master,slave} mkdir -p /var/lib/named/var/run/bind/run mknod /var/lib/named/dev/null c 1 3 mknod /var/lib/named/dev/random c 1 8 mknod /var/lib/named/dev/zero c 1 5
Agora vamos ajustar as permissões
chmod 666 /var/lib/named/dev/{null,random,zero} chown -R bind:bind /var/lib/named/var/*
Agora vamos ajustar as configurações
mv /etc/bind/* /var/lib/named/etc/bind/ rm -rf /etc/bind ln -sf /var/lib/named/etc/bind /etc/bind cp /etc/localtime /var/lib/named/etc chown -R bind:bind /var/lib/named/etc/bind chown -R root:bind /var/lib/named/var/cache/bind/dynamic chmod -R 775 /var/lib/named/var/cache/bind/dynamic
Agora vamos ajustar o arquivo /etc/default/bind9 de configuração do bind para ele reconhecer a jaula
vim /etc/default/bind9 RESOLVCONF=yes OPTIONS="-u bind -t /var/lib/named"
Agora vamos ajustar o /etc/resolv.conf o arquivo tem que ficar como abaixo
vim /etc/resolv.conf nameserver 127.0.0.1
Vamos acertar o arquivo /etc/bind/named.conf.options deixe ele como abaixo eu estou definindo a minha rede interna como 192.168.1.0/24 mude ela conforme a necessidade
vim /etc/bind/named.conf.options #/etc/bind/named.conf.options acl "internal_hosts" { 127.0.0.1/32; 10.0.0.0/23; 10.100.0.0/24; 10.101.0.0/24; 10.200.0.0/24; 172.16.0.0/24; 192.168.1.0/24; }; acl "dns_master" { 192.168.1.120; }; 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; 192.168.1.0/24; }; forwarders { 8.8.8.8; 8.8.4.4; }; allow-query { any; }; recursion no; version "Nao Disponivel"; dnssec-enable no; dnssec-validation no; dnssec-lookaside auto; empty-zones-enable yes; }; 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; }; }; include "/etc/bind/bind.keys";
Agora vamos acertar o nosso arquivo /etc/bind/named.conf deixe ele como abaixo
vim /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";
Agora vamos configurar a nossa view interna /etc/bind/named.conf.internal-zones como já comentado estou utilizando a rede 192.168.1.0/24 para a minha rede interna mude conforme a necessidade.
vim /etc/bind/named.conf.internal-zones #/etc/bind/named.conf.internal-zones view "internal" { #DEFININDO QUAIS CLIENTES VAO PODER CONSULTAR ESSA VIEW match-clients { internal_hosts; }; #O NOSSOS CLIENTES DA VIEW INTERNA VAO PODER EFETUAR CONSULTAS RECURSIVAS recursion yes; #PARA QUAL SERVIDOR VAI SER LIBERADO A TRANSFERENCIA DESSA VIEW. allow-transfer { none; }; #QUEM O BIND VAI NOTIFICAR EM CASO DE ALTERACOES DE ZONA. allow-notify { dns_master; }; #ARQUIVOS CONTENDO AS ZONAS MASTER, SLAVE E FORWARD INTERNAS include "/etc/bind/zones/internal/named.conf.internal.master-zones"; include "/etc/bind/zones/internal/named.conf.internal.slave-zones"; include "/etc/bind/zones/internal/named.conf.internal.forward-zones"; };
Agora vamos configurar a view externa /etc/bind/named.conf.external-zones
vim /etc/bind/named.conf.external-zones #/etc/bind/named.conf.external-zones view "external" { #DEFINICAO DOS CLIENTES QUE VAO PODER CONSULTAR ESSA VIEW match-clients { !internal_hosts; any; }; #OS CLIENTES DESSA VIEW NAO VAO PODER EFETUAR CONSULTAS RECURSIVAS recursion no; #PARA QUAL SERVIDOR VAI SER LIBERADA A TRANSFERENCIA DESSA VIEW allow-transfer { none; }; #QUEM O BIND VAI NOTIFICAR QUANDO FOR EFETUADA ALGUMA ALTERACAO NAS ZONAS allow-notify { dns_master; }; #ARQUIVOS CONTENDO AS ZONAS MASTER, SLAVE E FORWARD EXTERNAS include "/etc/bind/zones/external/named.conf.external.master-zones"; include "/etc/bind/zones/external/named.conf.external.slave-zones"; include "/etc/bind/zones/external/named.conf.external.forward-zones"; };
Agora vamos ajustar os arquivos das zonas pois estamos utilizando arquivos externos a configuração principal.
Vamos ajustar as zonas internas master
vim /etc/bind/zones/internal/named.conf.internal.master-zones #/etc/bind/zones/internal/named.conf.internal.master-zones zone "." { type hint; file "/etc/bind/db.root"; }; 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"; };
Vamos ajustar as zonas internas slave
vim /etc/bind/zones/internal/named.conf.internal.slave-zones #/etc/bind/zones/internal/named.conf.internal.slave-zones zone "douglasqsantos.com.br" { type slave; masters { 192.168.1.120; }; #Ip do nosso servidor master transfer-source 192.168.1.122; #Especificando qual transferencia do master que eu vou poder receber nessa view file "slave/db.douglasqsantos.com.br-internal"; };
Vamos ajustar as zonas externas slave
vim /etc/bind/zones/external/named.conf.external.slave-zones #/etc/bind/zones/external/named.conf.external.master-zones zone "douglasqsantos.com.br" { type slave; masters { 192.168.1.120; }; #Definindo quem é o nosso servidor master transfer-source 192.168.1.123; #Especificando qual transferencia do master que eu vou poder receber nessa view file "slave/db.douglasqsantos.com.br-external"; };
Agora precisamos criar alguns arquivos para o bind não gerar erro, esses arquivos vão ser utilizamos para armazenar dados de zonas quando necessários.
Arquivo que vai armazenas as zonas forward para a view interna
vim /etc/bind/zones/internal/named.conf.internal.forward-zones #/etc/bind/zones/internal/named.conf.internal.forward-zones
Arquivo que vai armazenas as zonas forward para a view externa
vim /etc/bind/zones/external/named.conf.external.forward-zones #/etc/bind/zones/external/named.conf.external.forward-zones
Arquivo que vai armazenar as zonas master para a view externa
vim /etc/bind/zones/external/named.conf.external.master-zones #/etc/bind/zones/external/named.conf.external.master-zones
Agora já podemos reiniciar o nosso bind
/etc/init.d/bind9 restart
Vamos dar uma olhada nos logs
tail -f /var/log/syslog Oct 18 12:13:41 dns02 named[3982]: zone 127.in-addr.arpa/IN/internal: loaded serial 1 Oct 18 12:13:41 dns02 named[3982]: zone 255.in-addr.arpa/IN/internal: loaded serial 1 Oct 18 12:13:41 dns02 named[3982]: zone localhost/IN/internal: loaded serial 2 Oct 18 12:13:41 dns02 named[3982]: managed-keys-zone ./IN/internal: loaded serial 0 Oct 18 12:13:41 dns02 named[3982]: managed-keys-zone ./IN/external: loaded serial 0 Oct 18 12:13:41 dns02 named[3982]: running Oct 18 12:13:41 dns02 named[3982]: zone douglasqsantos.com.br/IN/external: Transfer started. Oct 18 12:13:41 dns02 named[3982]: zone douglasqsantos.com.br/IN/external: transferred serial 2014101801 Oct 18 12:13:42 dns02 named[3982]: zone douglasqsantos.com.br/IN/internal: Transfer started. Oct 18 12:13:42 dns02 named[3982]: zone douglasqsantos.com.br/IN/internal: transferred serial 2014101801
Como pode ser notado esta tudo ok
Vamos efetuar alguns teste de consultas
Vamos consultar o registro www do domínio douglasqsantos.com.br
nslookup www.douglasqsantos.com.br Server: 127.0.0.1 Address: 127.0.0.1#53 Name: www.douglasqsantos.com.br Address: 192.168.1.94
Vamos consultar o registro ns1.douglasqsantos.com.br
nslookup ns1.douglasqsantos.com.br Server: 127.0.0.1 Address: 127.0.0.1#53 Name: ns1.douglasqsantos.com.br Address: 192.168.1.120
Ajustando o logrotate para o bind
vim /etc/logrotate.d/named /var/lib/named/var/log/*.log { weekly missingok rotate 7 postrotate /etc/init.d/bind9 reload > /dev/null endscript compress notifempty }