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.