DNS BIND para integração em domínios AD (com Windows Active

Propaganda
DNS BIND para integração em domínios AD (com Windows Active Directory ou Samba)
Introdução
A integração de ambientes Linux e Windows ainda é grande fonte de dor de cabeça para
administradores de rede, e elas sempre se complicam quando para redução de custo, os "donos
da rede" promovem a migração de serviços nativos do Windows para a plataforma open source.
Mas logo será perceptível que trata-se apenas de acostumar-se com as famosas linhas de texto e
que é mais fácil administrar um sistema Linux do que outros.
A rede Windows é baseada no protocolo NetBEUI (implementado com NetBIOS) e seu
funcionamento em domínio é baseado em uma máquina central controladora e as outras máquinas
dependentes desta. Para esta implementação ser funcional, é fundamental o uso de um servidor
de nomes dinâmico (DDNS). O Bind, a partir da versão 9, já possui esta característica, e as
revisões mais recentes da versão 8 também. Confira a sua documentação antes de instalar os
pacotes.
Imagine que neste domínio de computadores teremos uma máquina central e as outras serão
controladas por esta no quesito "permissão de acesso", neste exemplo. Para configurarmos a
estação Windows XP de hostname "computador_A" para pertencer ao nosso domínio teremos que
apresentá-la para nosso servidor controlador, que irá registrá-la em seu banco de dados e trocar
chave de criptografia com a estação. Por conta desta criptografia, nenhuma outra máquina poderá
simular ser o "computador_A". O servidor controlador irá também acrescentar o "computador_A" ao
nosso DNS dinâmico.
Esta implementação pode não fazer muita diferença em uma rede de 30 computadores, mas
imagine em uma rede de uma empresa global com mais de 5000 máquinas espalhadas pelo
mundo afora.
Preparação do ambiente
Antes de já sair instalando os pacotes, vamos antes estudar o ambiente e optar por todas as
variáveis que este possa apresentar. A rede exemplo deste artigo será composta por 12 máquinas,
no domínio "langhi.com.br". Vamos então listar as mesmas:
Servidores:
DNS - 192.168.1.20 - Linux - named.langhi.com.br
AD - 192.168.1.21 - Windows - directory.langhi.com.br
File/Print - 192.168.1.23 - Windows - fps.langhi.com.br
Gateway - 192.168.1.1 - Linux - router.langhi.com.br
Mail 1 - 192.168.1.24 - Linux - mail1.langhi.com.br
Mail 2 - 192.168.1.25 - Linux - mail2.langhi.com.br
Estações:
Laboratório 1 - 192.168.1.100 - Linux - lab_a.langhi.com.br
Laboratório 2 - 192.168.1.101 - Solaris - lab_b.langhi.com.br
Laboratório 3 - 192.168.1.102 - Windows - lab_c.langhi.com.br
Usuário 1 - DHCP - Windows - user_1.langhi.com.br
Usuário 2 - DHCP - Windows - user_2.langhi.com.br
Usuário 3 - DHCP - Windows - user_3.langhi.com.br
Agora que temos uma breve descrição de nosso ambiente será mais fácil visualizarmos os hosts
presentes em nossa rede antes de configurar o Bind. Para nosso exemplo, vamos considerar que a
máquina Solaris não será acessada pela rede Windows, mas teremos que ter o nome dela para
usar seus serviços (como SSH por exemplo). Todos os Windows servidores serão neste exemplo
2003 Server Standard Edition e os Windows estações serão XP Professional Edition (lembra-se
que o Windows XP Home não entra em domínio).
Preparação do servidor
A boa implantação de um servidor começa em sua especificação, por isso é fundamental que
escolha a distribuição Linux que mais lhe agrade em termos de usabilidade e segurança. No meu
caso utilizo o Linux Fedora Core 8, que será o exemplo para os arquivos de configurações, além
do Bind versão 9.5. Naturalmente os mesmos arquivos podem ser utilizados para outras
distribuições, com ressalva a pequenas diferenças, principalmente em sistemas Debian Like
(Debian, Ubuntu, Kurumin etc).
A seguir serão descritos os passos para a instalação do servidor DDNS, sendo:
Instale o Fedora Core 8 em seu servidor (não abordarei a instalação do sistema base neste artigo);
Instale os pacotes necessários para o Bind. No terminal, acesse como root (use o "sudo" ou "su root") e instale os pacotes utilizando o YUM, lembrando que terá que ter acesso à internet ou
repositório local configurado.
# yum -y install bind- utils
# yum -y install bind-libs
# yum -y install bind
# yum -y install bind-chroot
Caso o seu servidor não tenha acesso pela internet ou o proxy bloqueie a navegação HTTP (bem
pensado na segurança do servidor), procure no diretório RPMS do DVD-Rom do Fedora estes
pacotes e os copie para pasta /root. No terminal digite:
# cd ~
# rpm -ivh bind-utils*.rpm
# rpm -ivh bind_libs*.rpm
# rpm -ivh bind*.rpm
# rpm -ivh bind-chroot*.rpm
Lembre-se que sera necessário digitar o nome complete do arquivo RPM.
Teste a instalação do Bind utilizando o comando:
# service named status
Caso retorne serviço desconhecido, verifique no diretório /etc/init.d outro nome que possa ter sido
dado ao serviço do Bind. Caso seja dado qualquer status, o serviço está instalado. Pare então o
serviço do Bind usando:
# service bind stop
Escrevendo o arquivo de configuração named.conf
O Bind nas versões superiores a 8 funciona com a leitura do arquivo named.conf e sua utilização
para configuração de todos seus serviços. Esta é a etapa mais importante na configuração de seu
servidor, pois qualquer erro impedirá o Bind de iniciar.
Na distribuição Fedora Core 8 o arquivo de configuração do Bind está em /etc/named.conf e virá
com opções padrões quais não precisaremos. Realize uma cópia de segurança e vamos iniciar um
novo arquivo, utilizando:
# cp -p /etc/named.conf /root/named.conf.old
# echo > /etc/named.conf
# vi /etc/named.conf
A partir de agora iniciaremos a escrita do arquivo. Vamos iniciar criando uma ACL. Em termos bem
reduzidos, ACL é um nome que substitui um IP (apelido), no caso do Bind. Escreveremos este
nome para evitar redigitar um mesmo IP muitas vezes seguidas. Pegue a lista de máquinas feita
antes e vamos à digitação:
//este é um comentário
//ACL que indica o AD
acl "pdc" { 192.168.1.21; };
acl "localhost" { 127.0.0.1; };
Note que dizemos ao bind que aquela linha indica uma acl, fornecemos o seu nome em string "pdc"
e entre chaves colocamos o valor 192.168.1.21, encerrando a leitura com ";" dentro das chaves e
ao fim da linha. Muitos erros acontecem por esquecimento destes ";".
A segunda etapa será configurar as opções do nosso servidor bind, faremos isto com:
options {
listen-on port 53 { localhost; }; //Porta qual o DNS escutará na rede IP octal. Padrão 53
listen-on-v6 port 53 { ::1; }; // Porta qual o DNS escutará na rede Ipv6. Padrão 53
directory
"/var/named"; //Diretório raiz do programa
dump-file
"/var/named/data/cache_dump.db"; //Arquivo de dump
statistics-file "/var/named/data/named_stats.txt"; //arquivo de logs estatísticos
memstatistics-file "/var/named/data/named_mem_stats.txt"; //arquivo de logs de memória
allow-query
{ localhost; }; //permitir query de localhost
recursion yes; //permitir recursão
};
Caso sua distribuição tenha instalado o Bind em outro local, não esqueça de alterar o endereço
dos arquivos. Não coloque os comentários ao fim da linha. Em algumas compilações, o Bind pode
não aceitar comentários na mesma linha das configurações.
Vamos agora definir onde o Bind irá realizar os logs de suas operações com:
logging {
channel default_debug {
file "data/named.run";
severity dynamic;
};
};
Estas são configurações padrões e devem funcionar perfeitamente. Caso deseje alterar as opções
de logs, faça-as aqui.
No próximo tópico abordaremos as definições de zonas do DNS.
Definições de zonas no DNS
Ainda no named.conf, vamos determinar as zonas de trabalho deste servidor. A primeira zona será
a raiz da internet, chamada de ".". Esta é a zona principal e todos os domínios partem dela.
zone "." IN {
type hint;
file "named.ca";
};
Com esta tag informaremos ao Bind que a zona "." está configurada no arquivo "named.ca" e ele
não responde a partir daí, ele é slave desta zona (parâmetro HINT). O HINT diz ao Bind quem são
os servidores raízes da internet.
Agora vamos ensinar o Bind a responder pelo nosso domínio. Vou voltar ao exemplo do domínio
langhi.com.br.
zone "langhi.com.br" IN {
type master;
file "langhi.com.br.zone";
allow-update { pdc; };
};
Com esta tag informaremos ao Bind que a zona "langhi.com.br" está configurada no arquivo
"langhi.com.br.zone" e ele responderá por este domínio (parâmetro MASTER) e permitiremos
atualizações do servidor "pdc", apelido para 192.168.1.21 (isto é fundamental para o
funcionamento do AD). Não se esqueça de apontar na FAPESP o IP do DNS de seu domínio, caso
contrário seu DNS responderá na sua intranet porém não na internet.
Todo domínio precisa da resolução reversa, que nada mais é que achar o nome através do IP. Não
esqueça que toda nova zona precisa de sua reversa configurada. Neste exemplo a configuração
será:
zone "1.168.192.in-addr.arpa" IN {
type master;
file "1.168.192.in-addr.arpa.zone";
allow-update { pdc; };
};
As definições aqui são as mesmas apontadas no exemplo acima. Para o funcionamento do AD,
crie as seguintes subzonas:
// DOMÍNIOS NECESSÁRIOS PELO AD
zone "_msdcs.langhi.com.br" IN {
type master;
file "_msdcs.langhi.com.br.zone";
allow-update { pdc; };
};
zone "_sites.langhi.com.br" IN {
type master;
file "_sites.langhi.com.br.zone";
allow-update { pdc; };
};
zone "_tcp.langhi.com.br" IN {
type master;
file "_tcp.langhi.com.br.zone";
allow-update {pdc; };
};
zone "_udp.langhi.com.br" IN {
type master;
file "_udp.langhi.com.br.zone";
allow-update { pdc; };
};
include "/etc/named.rfc1912.zones";
Apenas adicione a linha "include /etc/named.rfc1912.zones" caso sua distribuição a tenha criado.
Pronto, nosso named.conf já está configurado. Agora precisaremos escrever cada um dos arquivos
de zona qual citamos nele.
Resumo:
Type: master, slave, hint;
File: localização do arquivo de zona.
Arquivos de zona
O DNS, ao consultar sobre um domínio, inicia a busca em ordem invertida, desta forma ao tentar
localizar o computador "www.langhi.com.br" ele iniciará a busca pela raiz (denomina-se ".") e
perguntará quem é o DNS responsável por "br". Ao localizar este, perguntará quem é responsável
por "com.br". Ao localizar este, perguntará quem é responsável por "langhi.com.br" (nosso DNS).
Ao localizar o nosso DNS, ele será questionado sobre quem é nossa máquina "www", presente em
nosso domínio.
Note que configuramos o "named.conf" para saber que responderá pelo domínio "langhi.com.br",
porém não ensinamos para ele quais são as máquinas presentes em nosso domínio. Faremos esta
associação nos arquivos de zona. A localização destes arquivos está escrita no "named.conf".
Vamos revisar esta passagem:
zone "langhi.com.br" IN {
type master;
file "langhi.com.br.zone";
allow-update { pdc; };
};
Note que dissemos ao Bind para procurar pelo arquivo "langhi.com.br.zone". Poderíamos ter
fornecido o endereço completo caso esteja localizado fora da raiz de instalação do Bind, como por
exemplo "/chroot/var/bind/langhi.com.br.zone", porém não esqueça de dar as permissões e
propriedades necessárias para o usuário "named", senão o Bind não funcionará.
No Fedora Core 8, a localização padrão destes arquivos é "/var/named/chroot/var/named".
Vamos escrever o arquivo de zona para "langhi.com.br" usando:
# vi langhi.com.br.zone
$TTL 1D
;Especificando o nome do servidor e o e-mail do administrador
@
IN SOA @ admin.langhi.com.br. (
2008081900
; serial
1D
; refresh
1H
; retry
1W
3H )
; expire
; minimum
Onde:
$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 cache);
@ = 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;
admin.langhi.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 o 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 cache.
Para melhor entendimento, vamos ler a primeira parte do arquivo como o Bind faria a leitura: "Esta
zona está em autoridade neste servidor, email do responsável [email protected], serial
2008081900, replicarei em 1 dia, caso não consiga tento de novo em 1 hora. Falo ao DNS que me
consultar, que serei autoridade em até uma semana, então deverá confirmar se ainda serei
autoridade e ele deve guardar as informações de meu domínio por pelo menos 3 horas".
Ajustados os parâmetros de funcionamento da zona, vamos agora informar ao Bind quem é o
servidor de nome deste domínio, usando:
@
NS //Leia: Este servidor é Name Server
Caso seja outro servidor, o nomeie aqui com:
dns2
NS
Se o nosso servidor de e-mail for interno, vamos indicá-lo aqui. No caso, mostrarei no exemplo
com dois servidores, qual o primeiro tem maior prioridade do que o segundo (ou seja, o segundo
será consultado se o primeiro falhar). Usamos aqui os valores 10 e 50 para estabelecer
prioridades. Quanto menor o valor, maior será a prioridade.
.
.
IN
IN
MX
MX
15
20
mail1.langhi.com.br
mail2.langhi.com.br
E finalmente vamos indicar ao Bind quem são os computadores deste domínio, usando:
//Servidores
directory A 192.168.1.21
fps
A 192.168.1.23
router A 192.168.1.1
//Estações
lab_a
A
192.168.1.100
lab_b
A
192.168.1.101
lab_c
A
192.168.1.102
lab_d
CNAME
lab_a
Lembra-se da listinha sugerida no começo do arquivo? Aqui está a verdadeira utilidade dele. Não
iremos neste momento inserir os endereços atribuídos por DHCP. Descreverei em novo artigo esta
integração. Note que escrevemos o hostname, que tipo de registro se trata e o IP. Os registros
possíveis são:
A - Relação endereço/IP direta;
AAAA - Relação endereço IPv6 direta;
NS - Servidor DNS do domínio;
CNAME - "Apelido" de uma máquina, ou seja, um endereço que aponta para outro endereço, ao
invés de apontar para um IP;
MX - Servidores de e-mail;
PTR - Apontador, que indica o caminho inverso de um IP. Veremos adiante;
SOA - Início da Autoridade;
TXT - Indicar uma string de texto para um hostname;
SRV - Mostra serviços presentes na rede (utilizado para AD).
Nosso arquivo deve ter ficado assim:
$TTL 1D
;Especificando o nome do servidor e o e-mail do administrador
@
IN SOA @ admin.langhi.com.br. (
2008081900
; serial
1D
; refresh
1H
; retry
1W
; expire
3H )
; minimum
@
NS
//Servidores
directory A 192.168.1.21
fps
A 192.168.1.23
router A 192.168.1.1
//Estações
lab_a
lab_b
lab_c
lab_d
A
192.168.1.100
A
192.168.1.101
A
192.168.1.102
CNAME
lab_a
Arquivos de zona reversa
Os arquivos de zona reversa permitem em uma consulta por endereço IP obter o nome do host
completo. Como se ao invés de perguntarmos ao DNS qual é o endereço IP de www.langhi.com.br,
nós perguntássemos qual o endereço de 200.200.200.204.
Não esqueça que todos as zonas registradas em um DNS devem possuir sua zona reversa, para
evitar mal funcionamento do mesmo. Eles seguem configurações idênticas ao arquivo que
geramos, por isso sugiro fortemente que apenas copie o arquivo anterior e altere as configurações
necessárias, sendo:
# cp -p langhi.com.br.zone 1.168.192.in-addr.arpa.zone
Note que também indicamos esta zona no "named.conf" e precisamos criar este arquivo no local
que indicamos e com a propriedade do usuário "named".
Vamos então ao arquivo reverso:
$TTL 1D
@
IN SOA @ admin.langhi.com.br. (
2008081900
; serial
1D
; refresh
1H
; retry
1W
; expire
3H )
; minimum
//Especificando o servidor de nomes
NS
@
//Adicionando endereços reversos
//Servidores
21 IN PTR directory.langhi.com.br
23 IN PTR fps.langhi.com.br
1 IN PTR router.langhi.com.br
//Estações
100 IN PTR
lab_a.langhi.com.br
101 IN PTR
lab_b.langhi.com.br
102 IN PTR
lab_c.langhi.com.br
Note que no primeiro arquivo relacionamos o endereço com o IP. Neste caso, estamos
relacionando o IP com o endereço. Note que a zona já especifica o endereço da rede, ou seja, a
parcela da máscara correspondente à rede (neste caso 192.168.1) e no arquivo utilizamos apenas
o final do IP, que corresponde ao host (exemplo 100, 101 e102).
O PTR foi utilizado para indicar que se trata de um apontador, ou seja, o IP 192.168.1.100 aponta
para lab_a.langhi.com.br.
Zonas necessárias para Active Directory
Em termos reduzidos, o Active Directory é um gerenciador central de rede NetBIOS que trata as
redes Microsoft Windows (embora o Linux com o SAMBA tenha se adaptado à estas redes
podendo também participar destas, inclusive fazendo o papel de servidor Active Directory).
Para seu funcionamento é exigido do DNS a capacidade de atualização dinâmica (DDNS) e de
resolver serviços na rede, com a tag SRV. O Bind a partir da versão 8 já é capaz de atender estes
requisitos.
As zonas necessárias para esta integração são: "_tcp", "_udp", "_sites" e "_msdcs". Note que já as
declaramos no "named.conf" anteriormente. Agora vamos apenas escrever seus arquivos de
zonas. Mostrarei o arquivo de "_msdcs" e basta apenas copiar os outros arquivos alterando seus
nomes de zona apenas.
$ORIGIN .
$TTL 1D
_msdcs.langhi.com.br
IN SOA @ admin.langhi.com.br. (
2008081900
; serial
1D
; refresh
1H
; retry
1W
; expire
3H )
; minimum
//Declaração do servidor de nomes desta zona
NS
@
$ORIGIN _msdcs.langhi.com.br
Note que não declaramos nenhum computador nesta zona. Apenas utilizamos a macro ORIGIN
que mostra o nome do domínio em zonas não qualificadas. Em resumo, entenda o ORIGIN como o
mesmo efeito que CNAME.
Repita a configuração acima para os outros arquivos ("_tcp", "_udp" e "_sites"). Novamente não
esqueça das permissões e propriedade dos arquivos.
Considerações finais
Para utilizar o Bind após estas configurações é interessante reiniciar o computador (embora não
seja estritamente necessário... é Linux...) e utilizar o comando:
# service named start
Este artigo mostrou a configuração do DDNS Bind para utilização em conjunto com o Active
Directory. Abaixo envio um link com a instalação do AD em ambiente Windows e em breve
disponibilizarei novo artigo mostrando a configuração do SAMBA como AD.
Download