Spawnzao

DNS Cache com BIND e integração com Active Directory

Por em 23/06/2010 - 3,312 views

Ontem um aluno me questionou sobre a possibilidade de configurar um Bind, servindo como cache de dns externo e, além disso, responder pelo domínio interno da empresa, que está configurado no DNS do Windows 2003.

O DNS tem diversas funcionalidades, e uma muito importante é a de realizar “cache” das consultas, isto é, quando você realiza a consulta, o DNS salva essa consulta e se houver uma nova consulta a esse mesmo domínio, não é necessário consultar na internet novamente, pois você já tem o “cache” dessa consulta, para que as consultas de DNS sejam mais rápidas e economizem tráfego de internet, mas lembre-se que essas consultas não ficam salvas pra sempre não, elas possuem TTL (time-to-live) e consequentemente expiram, mas isso é assunto para outro post.

A Infraestutura de Rede

Para aprofundar um pouco mais no tema, vamos imaginar que a empresa possua um Servidor de Domínio (Active Directory), que possui um DHCP e DNS integrados, isto é, com o DHCP adicionando novos registros no DNS para cada máquina que pega um novo ip. A configuração é simples, mas tem muito MCP que nem sabe que existe essa configuração, e para ilustrar vamos observar a imagem abaixo:

Agora o DNS do Windows 2003 passará a ter o registro de todas as máquinas que utilizem o serviço de DHCP do Windows 2003.

Mas agora voltamos para a dúvida inicial do aluno, o Servidor Windows 2003 resolve o domínio interno da rede e o Servidor Linux resolve os domínios externos, como fazer para que um único servidor resolva o domínio interno e também os domínios externos?

Para isso podemos ter 2 soluções:

  1. Configuramos o DNS do Windows 2003 para pegar as consultas à domínios externos no Servidor Linux, e utilizamos o Servidor Windows 2003 como DNS padrão para todas as máquinas da rede, ou
  2. Configuramos o DNS do Servidor Linux para buscar os registros do domínio interno no Servidor Windows 2003, e utilizamos o Servidor Linux como DNS padrão para todas as máquinas da rede.

As 2 soluções funcionam, mas a dúvida do aluno era como resolver o problema utilizando a opção 2.

Não estou aqui dizendo que Linux é mais rápido ou que o Windows é melhor, estou apenas esclarecendo uma dúvida e mostrando uma solução para a mesma.

Mãos a Obra

Nessa solução utilizaremos o Centos 5.4.

Vamos instalar o Bind, bind-utils e o caching-nameserver.


yum -y install bind bind-libs bind-utils caching-nameserver

Agora vamos configurar o DNS CACHE, para isso vamos alterar o arquivo /etc/named.caching-nameserver.conf


vim /etc/named.caching-nameserver.conf

Configuração default:


//
// named.caching-nameserver.conf
//
// Provided by Red Hat caching-nameserver package to configure the
// ISC BIND named(8) DNS server as a caching only nameserver
// (as a localhost DNS resolver only).
//
// See /usr/share/doc/bind*/sample/ for example named configuration files.
//
// DO NOT EDIT THIS FILE - use system-config-bind or an editor
// to create named.conf - edits to this file will be lost on
// caching-nameserver package upgrade.
//

options {

listen-on port 53 { 127.0.0.1; };
listen-on-v6 port 53 { ::1; };
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";

// Those options should be used carefully because they disable port
// randomization
// query-source    port 53;
// query-source-v6 port 53;

allow-query     { localhost; };
allow-query-cache { localhost; };
};
logging {
channel default_debug {
file "data/named.run";
severity dynamic;
};
};
view localhost_resolver {
match-clients      { localhost; };
match-destinations { localhost; };
recursion yes;
include "/etc/named.rfc1912.zones";
};


Vamos deixá-lo dessa forma:


//
// named.caching-nameserver.conf
//
// Provided by Red Hat caching-nameserver package to configure the
// ISC BIND named(8) DNS server as a caching only nameserver
// (as a localhost DNS resolver only).
//
// See /usr/share/doc/bind*/sample/ for example named configuration files.
//
// DO NOT EDIT THIS FILE - use system-config-bind or an editor
// to create named.conf - edits to this file will be lost on
// caching-nameserver package upgrade.
//
acl redelocal { localhost; 192.168.1.0/24; };

options {

listen-on port 53 { 192.168.1.1; };
listen-on-v6 port 53 { ::1; };
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";

// Those options should be used carefully because they disable port
// randomization
// query-source    port 53;
// query-source-v6 port 53;

allow-query     { redelocal; };
allow-query-cache { redelocal; };
};
logging {
channel default_debug {
file "data/named.run";
severity dynamic;
};
};
view localhost_resolver {
match-clients      { redelocal; };
match-destinations { redelocal; };
recursion yes;
include "/etc/named.rfc1912.zones";
};


Explicando

Na linha 14: criamos uma nova acl e damos a ela o nome de redelocal e inserimos dentro dela o localhost e a rede local da empresa, que no exemplo é 192.168.1.0/24, e serão as máquinas que poderão consultar o nosso Servidor DNS.

Na linha 18: alteramos o ip default 127.0.0.1 para o ip interno do servidor, que no exemplo é 192.168.1.1, para que o serviço de DNS possa ouvir as requisições solicitadas pela rede e não somente as requisições locais do servidor.

Nas linhas 32, 33, 42 e 43: substituimos o localhost pela nossa acl, definida na linha 14, onde informamos a rede interna da empresa, para que as máquinas internas da rede possam realizar consultas e para que o DNS possa realizar o cache dessas consultas.

Agora reiniciar o serviço DNS:


service named restart

Testando a Solução

Agora realizar o teste no servidor:


dig @192.168.1.1 google.be

Teremos o seguinte resultado:



; <<>> DiG 9.3.6 <<>> @192.168.1.1 google.be
; (1 server found)
;; global options:  printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 44569
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 8, ADDITIONAL: 0

;; QUESTION SECTION:
;google.be.                     IN      A

;; ANSWER SECTION:
google.be.              209     IN      A       64.233.163.104

;; AUTHORITY SECTION:
be.                     172707  IN      NS      c.ns.dns.be.
be.                     172707  IN      NS      x.dns.be.
be.                     172707  IN      NS      london.ns.dns.be.
be.                     172707  IN      NS      prague.ns.dns.be.
be.                     172707  IN      NS      brussels.ns.dns.be.
be.                     172707  IN      NS      amsterdam.ns.dns.be.
be.                     172707  IN      NS      a.ns.dns.be.
be.                     172707  IN      NS      b.ns.dns.be.

;; Query time: 0 msec
;; SERVER: 192.168.1.1#53(192.168.1.1)
;; WHEN: Wed Jun 23 05:04:14 2010

;; MSG SIZE  rcvd: 203


E para testar nas estações:


nslookup google.be

Então teremos o seguinte resultado:


Servidor:  linux.empresa.corp
Address:  192.168.1.1

Não é resposta de autorização:
Nome =   google.be
Address:  64.233.163.104

Agora as máquinas da empresa resolverão o domínio interno da empresa e os domínios externos pelo Linux.

:, , , , , , , ,
No comments for this entry yet...

Leave a Reply

Licença

Creative Commons License

Techs

 Blog Tool, Publishing Platform, and CMS
Powered by PHP
Powered by MySQL
Mozilla Foundation
hacker emblem
Mozilla Foundation
Open Source Initiative
Creative Commons