Configurando um servidor de DNS para o Redhat 5.2/6.0 Atualizado 6/1/2000 Atualizado 29/10/1999 Atualizado 19/1/2000 Versão 1.04 Nota:esta é a segunda edição deste documento que eu apelidei de TrueDNS,quando eu coloquei este documento aqui,eu tive como fonte um DNS que me foi fornecido pela empresa Japonesa NTT,mas me pareceu que existiu alguns erros,onde o meu domain era ns.brasillife.co.jp e o secundário era o ntk102.ocn.ne.jp,não sei como,o DNS que eu coloquei aqui era o que eu usava neste servidor,resolvia os nomes DNS,talvez teria sido pelo servidor secundário,que resolvia o DNS e não meu servidor,então eu fiz as correções necessárias,preste atenção e siga passo a passo antes de colocar o seu servidor de nome para funcionar OK? O DNS nada mais é do que um servidor de nomes para dominio ou [Domain Name Server], o DNS converte nomes de domain,para um numero IP.Mas não espere que o seu Domain Name funcione para a internet,se ele não for válido,ou seja ele precisa ser registrado. Maiores informações de como e pro que,pode ser encontrado em vários sites de HOWTO na internet.Aqui nós vamos ensinar mais uma receita de bolo,certo? Estas configurações servem,para sites registrados ou para pequenas redes intranet,eu recomendo que depois de configurado e tudo estiver funcionando,compre livros,leia os HOWTOs,para saber,o que serve cada linha,comando etc,para que você aumente seus conhecimentos:) E claro que eu estou ensinando isso,já com certeza que você já tem uma placa de ethernet instalada.Se não tiver aguente um pouco nos HOWTOs até que eu faça uma receita para instalar uma placa de ethernet. Quando você instala o seu sistema,você pode escolher entre quais pacotes você gostaria de instalar ou para que vai servir esta máquina,servidor de nomes(DNS),servidor de email etc.Para que o servidor de nomes funcione é necessário que o pacote BIND esteja instalado,para saber se ele esta instalado ou não faça os comandos: rpm -q bind Se estiver instalado você vai receber uma resposta como bind-****,se não tiver,instale: rpm -ivh bind-***.rpm Depois de tudo instalado você vai precisar de dois documentos o *.rev e *.zone,estes são os arquivos que vão converter seu domain name em IP(o *.rev faz isso),o *.zone indica os nomes do seu servidor,por exemplo www.suaempresa.com.br,ftp.suaempresa.com.br e por ai vai.Quando você chama um site de internet,ou até o seu mesmo,o BIND faz uma verificação na lista de registros de domain na internet,lembra que eu falei que se você criar um nome e tentar colocar na internet ele não vai funcionar?Sómente com o DNS de rede interna sem Internet que é diferente,o próprio BIND faz isso. Depois de confirmado,ele indica onde sua máquina pode ser localizada,chegando à sua máquina o BIND faz uma verificação nos arquivos named.conf,para saber onde estão os arquivos de conversão de nomes,no caso é o*.rev e *.zone.E apartir daí sua maquina responde.Então para o arquivo /etc/named.conf nós devemos indicar onde estão os arquivos de conversão de nomes,certo!!! named.conf // generated by named-bootconf.pl options { directory "/var/named"; /* * If there is a firewall between you and nameservers you want * to talk to, you might need to uncomment the query-source * directive below. Previous versions of BIND always asked * questions using port 53, but BIND 8.1 uses an unprivileged * port by default. */ // query-source address * port 53; }; // // a caching only nameserver config // zone "." { type hint; file "named.ca"; }; zone "0.0.127.in-addr.arpa" { type master; file "named.local"; }; Estas são as informações que o seu named.conf deve ter,então vamos criar um domain falso por exemplo www.exemplo.com usando um IP 192.168.0.3.Agora adcione estas linhas usando o vi ou pico. Nota:Ésta é a segunda edição deste documento,coloque todos os dados como mostrado aqui,ok? Para modificar com o vi: vi named.conf Para editar o arquivo precione a tecla i do seu teclado,quando terminar precione SHIFT e precione Z duas vezes para salvar e sair. Para modificar com pico: pico named.conf Para salvar precione CTRL+X. options { directory "/var/named"; }; zone "." { type hint; file "named.ca"; }; zone "exemplo.com"{ type master; file "exemplo.zone"; }; zone "0.0.127.in-addr.arpa"{ type master; file "named.local"; }; zone "3.0.168.192.IN-ADDR.ARPA"{ type master; file "exemplo.rev"; }; Por medidas de segurança que o pessoal vinha pedindo,este é um segundo exemplo do named.conf,o primeiro que eu mostrei serve tanto para Internet como para redes internas,mas é TOTALMENTE sem segurança ,onde qualquer um pode listar a configuração do seu DNS fácilmente usando o nslookup,na segunda listagem o que vai dar mais segurança para o servidor e evitar a listagem do DNS por um cliente estranho é o allow-transfer,que você expecifica um IP que poderá fazer a listagem de toda a configuração do DNS,isso é necessário caso o servidor venha ter algum problema e o webmaster possa arrumá-lo à distância.Use esta segunda listagem caso você venha colocar o seu site na internet. 1: options { 2: directory "/var/named"; 3: forward first; 4: forwarders{ 5: 143.90.130.38; 6: 143.90.130.37; 7: }; 8: listen-on port 53{ 9: 192.168.0.3; 192.168.0.1; 127.0.0.1; 10: }; 11: }; 12: zone "." { 13: type hint; 14: file "named.ca"; 15: }; 16: zone "exemplo.com"{ 17: notify no; 18: type master; 19: file "exemplo.zone"; 20: allow-transfer{ 21: 192.168.0.0/24; 22: }; 23: }; 24: zone "0.0.127.in-addr.arpa"{ 25: type master; 26: file "named.local"; 27: }; 28: zone "3.0.168.192.IN-ADDR.ARPA"{ 29: notify no; 30: type master; 31: file "exemplo.rev"; 32: allow-transfer{ 33: 192.168.0.0/24; 34: }; 35: }; Ok,vamos dar uma olhada mais de perto nestas linhas: 1: São as opções do named,o que eu estou usando aqui é o forward,o nome já explica tudo,e o IP dos servidores que vão fazer este serviço,estas linhas não são necessárias se você usa um único servidor de DNS. 8: Como todo bom servidor de internet vai estar por trás de um firewall,use esta opção e indique o IP do seu servidor de DNS,pode ser um ou mais. 9: Este é o IP que o seu servidor vai estar ouvindo,se existir mais de um dentro de sua rede,especifique-os nesta linha,e deve sempre conter o ip 127.0.0.1 mais o IP do(s) servidor(es). 17: Preste bem atenção nesta linha,JAMAIS utilize yes se você não tiver um domain Registrado,eu em minha rede interna utilizava o domain linuxconfig.com e não sabia que existia uma outra pessoa com o mesmo domain,então o que ocorre é que com a opção em yes,o servidor faz constantes verificações na internic para validar o domain,como já existia um domain linuxconfig.com eu estava entrando em conflito com o servidor desta outra pessoa,foi uma bagunça danada,eu recebia emails de pessoas que eu nem conhecia.Então se você usa um DNS falso somente para sua rede interna use notify no!!! 18: Tipo do servidor "master" ou "slave" o master é o servidor mestre,principal.Em redes que já existam um DNS server,o linux deve ser configurado com esta opção em slave. 20: Esta é a linha que permite o IP que pode dar um ls na sua configuração de DNS,note que esta opção deixa o seu servidor um pouco mais seguro,não totalmente.Cabe a você configurar ou adquirir um programa de firewall para a proteção do seu DNS.Caso esta opção não esteja definida,o que pode acontecer é que se o Hacker pegar suas configurações de DNS,ele poderia encontrar não só a configuração do servidor,mas ele poderia descobrir o IP dos computadores internos da sua rede e ele poderia spoffar o IP de uma das máquinas internas e tomar posse do seu servidor. Todos os arquivos do DNS deverão ser salvas no diretório /var/named,o exemplo.rev e exemplo.zone. Vamos criar o exemplo.rev e exemplo.zone agora: exemplo.rev 3.0.168.192.in-addr.arpa. IN SOA www.exemplo.com. root.exemplo.com. ( 1999103001 ; serial 8H ; refresh 2H ; retry 1W ; expire 1D ; default_ttl ) @ IN NS exemplo.com. 127 IN PTR localhost. 2 IN PTR win1.linuxconfig.com. @ IN PTR exemplo.com. Lembrando que os espaços são TABs... exemplo.zone @ IN SOA www.exemplo.com. wellington.exemplo.com. ( 1999103001 ; serial 8H ; refresh 2H ; retry 1W ; expire 1D ; default_ttl ) exemplo.com. IN NS exemplo.com. exemplo.com. IN A 192.168.0.3 exemplo.com. IN NS exemplo.com. localhost IN A 127.0.0.1 ftp IN CNAME exemplo.com. www IN CNAME exemplo.com. mail IN CNAME exemplo.com. news IN CNAME exemplo.com. @ IN TXT "Exemplo de DNS" win1 IN A 192.168.0.2 win1 IN MX 20 exemplo.com. @ IN MX 5 exemplo.com. Depois de criado,os arquivos exemplo.rev e exemplo.zone coloque eles no /var/named. Acima onde está o MX significa Mail Exchanger,para questões de segurança,você pode colocar mais um MX tipo: @ IN MX 5 mail.exemplo.com. @ IN MX 10 mail.exemplo.com. Nota:Me corrijam se tiver algun erro nesta parte. Nunca se sabe o que pode acontecer com o primeiro MX,então é bom colocar um segundo caso o primeiro falhe.Mais um lembrete,sempre que for preciso mudar algo em *.rev ou *.zone você precisa mudar o serial,mesmo que seja um ponto,é necessário que você mude o serial dos dois ou a entrada não vai ser válida,para mudar o serial ele segue esta regra simples: data de hoje+serial Nota:Veja que em exemplo.rev e exemplo.zone o serial é o mesmo e no named.local,coloque o serial 00,para que ele seja atualizado automáticamente. Ou seja,se o serial original for 1999081321,e você mudar algo,o novo serial deve ser 1999081322. Verifique agora o named.boot para que ele tenha estas entradas,listadas abaixo: ; ; Uma configuração de servidor de nomes somente para cache ; directory /var/named cache . named.ca primary 0.0.127.in-addr.arpa named.local Lembrando que os espaços são TABS. Edite o arquivo /etc/resolv.conf e acrescente estas linhas: search exemplo exemplo.com nameserver 192.168.0.3 Edite o arquivo /var/named.local,onde se encontra localhost coloque o nome do seu servidor,deixe a última linha como esta: @ IN SOA exemplo.com. root.exemplo.com. ( 1999103000 ; Serial 8H ; Refresh 2H ; Retry 1W ; Expire 1D ) ; Minimum @ IN NS exemplo.com. 1 IN PTR localhost. Verifique no /etc/host.conf se ele tem estas linhas: order hosts,bind multi on Verifique no /etc/hosts se ele tem estas linhas: 127.0.0.1 localhost localhost.localdomain 192.168.0.3 .exemplo.com 192.168.0.2 win No arquivo /etc/nsswitch.conf procure por hosts e troque a configuração original por estas: hosts: files dns Verifique se no arquivo /etc/sysconfig/network suas informações de DOMAINNAME estão batendo: NETWORKING=yes FORWARD_IPV4=false HOSTNAME=.exemplo.com DOMAINNAME=exemplo.com GATEWAY=192.168.0.3 GATEWAYDEV=eth0 Repare que em HOSTNAME eu coloquei (ponto)exemplo.com,mas você deve escolher um nome para o host,tipo:linux,server,main,dragonball....qualquer coisa,mas,para efeito de teste,você pode deixar sem. Eu coloquei o IP do GATEWAY com o do servidor para ele dar um loop,pois ele ficava chamando o meu roteador.Se você estiver configurando para um servidor de Internet coloque o IP do seu roteador,ou a saída para a internet. Verifique se o seu /var/named/named.ca tem as entradas(alguns conhecem como root.hints): ; This file holds the information on root name servers needed to ; initialize cache of Internet domain name servers ; (e.g. reference this file in the "cache . " ; configuration file of BIND domain name servers). ; ; This file is made available by InterNIC registration services ; under anonymous FTP as ; file /domain/named.root ; on server FTP.RS.INTERNIC.NET ; -OR- under Gopher at RS.INTERNIC.NET ; under menu InterNIC Registration Services (NSI) ; submenu InterNIC Registration Archives ; file named.root ; ; last update: Aug 22, 1997 ; related version of root zone: 1997082200 ; ; ; formerly NS.INTERNIC.NET ; . 3600000 IN NS A.ROOT-SERVERS.NET. A.ROOT-SERVERS.NET. 3600000 A 198.41.0.4 ; ; formerly NS1.ISI.EDU ; . 3600000 NS B.ROOT-SERVERS.NET. B.ROOT-SERVERS.NET. 3600000 A 128.9.0.107 ; ; formerly C.PSI.NET ; . 3600000 NS C.ROOT-SERVERS.NET. C.ROOT-SERVERS.NET. 3600000 A 192.33.4.12 ; ; formerly TERP.UMD.EDU ; . 3600000 NS D.ROOT-SERVERS.NET. D.ROOT-SERVERS.NET. 3600000 A 128.8.10.90 ; ; formerly NS.NASA.GOV ; . 3600000 NS E.ROOT-SERVERS.NET. E.ROOT-SERVERS.NET. 3600000 A 192.203.230.10 ; ; formerly NS.ISC.ORG ; . 3600000 NS F.ROOT-SERVERS.NET. F.ROOT-SERVERS.NET. 3600000 A 192.5.5.241 ; ; formerly NS.NIC.DDN.MIL ; . 3600000 NS G.ROOT-SERVERS.NET. G.ROOT-SERVERS.NET. 3600000 A 192.112.36.4 ; ; formerly AOS.ARL.ARMY.MIL ; . 3600000 NS H.ROOT-SERVERS.NET. H.ROOT-SERVERS.NET. 3600000 A 128.63.2.53 ; ; formerly NIC.NORDU.NET ; . 3600000 NS I.ROOT-SERVERS.NET. I.ROOT-SERVERS.NET. 3600000 A 192.36.148.17 ; ; temporarily housed at NSI (InterNIC) ; . 3600000 NS J.ROOT-SERVERS.NET. J.ROOT-SERVERS.NET. 3600000 A 198.41.0.10 ; ; housed in LINX, operated by RIPE NCC ; . 3600000 NS K.ROOT-SERVERS.NET. K.ROOT-SERVERS.NET. 3600000 A 193.0.14.129 ; ; temporarily housed at ISI (IANA) ; . 3600000 NS L.ROOT-SERVERS.NET. L.ROOT-SERVERS.NET. 3600000 A 198.32.64.12 ; ; housed in Japan, operated by WIDE ; . 3600000 NS M.ROOT-SERVERS.NET. M.ROOT-SERVERS.NET. 3600000 A 202.12.27.33 ; End of File Você precisa manter estas informações atualizadas,para tanto use o programa dig,com ele você pode atualizar o seu named.ca(root.hints)com este pequeno script que eu chamo de caup(named.CA UPdate),você pode tanto utilizá-lo com o cron,ou executar com o comando ./caup: #!/bin/sh #Este pequeno script vai atualizar o seu named.ca(root.hints) automáticamente #Utilize ele com o crom para que ele seja executado mensalmente ou semanalmente. #Criado por Wellington Terumi Uemura #V0.1 echo " Inicializando." PATH=/sbin:/usr/sbin:/bin:/usr/bin: export PATH cd /var/named echo " Pegando o named.ca(root.hints)" dig @rs.internic.net . ns >named.ca.new echo " ---------------" echo " Pronto!" echo " ---------------" echo " Atualizando." echo " ---------------" mv named.ca named.ca.velho mv named.ca.new named.ca chmod 444 named.ca chown root:root named.ca echo " reinicializando named" echo " ---------------" ndc restart echo " Pronto!" echo " ---------------" echo " Seu named.ca foi atualizado com êxito!" Execute o script depois que você inicializar o named,com o comando ndc start.Logo que você digitar este comando dê um tail -f /var/log/messages e ele deve mostrar as mensagens abaixo,se aparecer algum erro,verifique sua configuração novamente. Oct 30 20:54:17 named[1924]: Zone "exemplo.com" (file exemplo.zone): No default TTL set using SOA minimum instead Oct 30 20:54:17 named[1924]: master zone "exemplo.com" (IN) loaded (serial 1999103002) Oct 30 20:54:17 named[1924]: Zone "0.0.127.in-addr.arpa" (file named.local): No default TTL set using SOA minimum instead Oct 30 20:54:17 named[1924]: master zone "0.0.127.in-addr.arpa" (IN) loaded (serial 1999103000) Oct 30 20:54:17 named[1924]: Zone "3.0.168.192.IN-ADDR.ARPA" (file exemplo.rev): No default TTL set using SOA minimum instead Oct 30 20:54:17 named[1924]: master zone "3.0.168.192.IN-ADDR.ARPA" (IN) loaded (serial 1999103002) Oct 30 20:54:17 named[1924]: listening on [127.0.0.1].53 (lo) Oct 30 20:54:17 named[1924]: listening on [192.168.0.3].53 (eth0) Oct 30 20:54:17 named[1924]: Forwarding source address is [0.0.0.0].1034 Oct 30 20:54:17 named[1925]: Ready to answer queries. Vamos cruzar os dedos agora,vamos para a primeira parte do nosso teste,vamos fazer um dnsquery,para tanto faça o comando abaixo,e ele não pode diferenciar muito deste exemplo,a não ser que você tenha colocado mais nomes para serem revertidos,mas para o exemplo mostrado nesta receita ela deve mostrar o seguinte: dnsquery -v exemplo.com ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 48667 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 5, AUTHORITY: 1, ADDITIONAL: 1 ;; exemplo.com, type = ANY, class = IN exemplo.com. 1D IN A 192.168.0.3 exemplo.com. 1D IN NS exemplo.com. exemplo.com. 1D IN SOA www.exemplo.com. wellington.exemplo.com. ( 1999103002 ; serial 8H ; refresh 2H ; retry 1W ; expiry 1D ) ; minimum exemplo.com. 1D IN TXT "Exemplo de DNS" exemplo.com. 1D IN MX 5 mail.exemplo.com. exemplo.com. 1D IN NS exemplo.com. exemplo.com. 1D IN A 192.168.0.3 Parece tudo funcionando beleza,vamos ver se o nosso servidor esta resolvendo os nomes,dê um nslookup para testar o www,mail,ftp e news do domain exemplo.com,eu separei cada teste com um "-" você deve obter os mesmos resultados,caso isso não ocorra verifique sua configuração: nslookup exemplo.com Server: exemplo.com Address: 192.168.0.3 Name: exemplo.com Address: 192.168.0.3 ---------------------------- nslookup ftp.exemplo.com Server: exemplo.com Address: 192.168.0.3 Name: exemplo.com Address: 192.168.0.3 Aliases: ftp.exemplo.com ------------------------------ nslookup mail.exemplo.com Server: exemplo.com Address: 192.168.0.3 Name: exemplo.com Address: 192.168.0.3 Aliases: mail.exemplo.com ------------------------------ nslookup www.exemplo.com Server: exemplo.com Address: 192.168.0.3 Name: exemplo.com Address: 192.168.0.3 Aliases: www.exemplo.com ------------------------------ nslookup news.exemplo.com Server: exemplo.com Address: 192.168.0.3 Name: exemplo.com Address: 192.168.0.3 Aliases: news.exemplo.com Beleza,melhor não poderia ficar,agora digite nslookup,você deve entrar em uma tela de promp como mostrado abaixo: [root@ /root]# nslookup Default Server: linuxconfig.com Address: 192.168.0.3 > Pronto,agora você tem um servidor de nomes funcionando perfeitamente,espero que vocês tenham gostado desta receita,se houver algum erro nas informações ou na configuração,vocês podem entrar em contato comigo pelo meu email,que eu arrumo o mais rápido possível!! Não esqueça de configurar suas máquinas clientes com o IP correto HOST e DOMAIN no Windows.Coloque no GATEWAY o IP do DNS Server,no caso o Linux. AUTOR WELLINGTON TERUMI UEMURA EMAIL wellingtonuemura@hotmail.com Todos os direitos reservados(c)