Seminário de MAC-433: djbdns

Seminário de MAC-433

Tema: djbdns

Integrantes do grupo:

Fábio Kimura
Breno Pompeu Roberto

Índice geral:

  1. Introdução
  2. Este trabalho é sobre o djbdns, que é um servidor DNS, ou seja, ele resolve e fornece dados DNS.
    O djbdns foi desenvolvido por D. J. Bernstein, o mesmo autor do qmail, como um substituto do BIND, servidor DNS da Universidade de Berkeley, embora não inclua todas as características oferecidas pelo BIND, apenas as que o Bernstein "provou" serem essenciais.

  3. Conceitos do Âmbito do Software
  4. Descrição do software
  5. Forma de uso do software.
  6. Processo de instalação - Histórico de guerra.
  7. Exemplificaremos a instalação dos seguintes serviços usando o DJBDNS como:



    Mas antes de detalhar como esses serviços são configurados, é necessário entender como obter o DJBDNS e o DAEMONTOOLS e compilá-los. O daemontools é necessário para a instalação do DJBDNS.

    Obtendo e Compilando.

    Instalação do DJBDNS!!

    Antes de tudo, é necessário criar usuários para que os daemons não rodem em modo super-usuário.

    Na debian, isso pode ser feito com o comando adduser:

    # addgroup djbdns
    # adduser --system --ingroup djbdns tinydns
    # adduser --system --ingroup djbdns dnscache
    # adduser --system --ingroup djbdns dnslog


    Também é necessário criar o diretório onde ficarão os arquivos de configuração:

    # mkdir /etc/djbdns

    Configurando o DJBDNS.

    Agora vamos detalhar as configuração citadas no início.

  8. Comparação conceitual e prática com o BIND
  9. Fonte: cr.yp.to
    Problema: Configurar um "cache" externo em 1.2.3.4 para clientes na rede 1.2.3.*. Solução usando BIND:
    1. Criar um arquivo tipo zone localhost, com um registro SOA , um registro NS , e um registro A.
    2. Criar um arquivo tipo zone 0.0.127.in-addr.arpa, com um registro SOA, um registro NS, e um registro PTR.
    3. Criar um arquivo tipo zone root.hints com o endereço IP dos servidores de nome roots.
    4. Criar um arquivo named.conf: zone "localhost" in { type master; file "localhost"; }; zone "0.0.127.in-addr.arpa" in { type master; file "0.0.127.in-addr.arpa"; }; zone "." in { type hint; file "root.hints"; }; options { interface-interval 0; listen-on { 1.2.3.4; }; allow-query { 1.2.3/24; }; };
    5. Iniciar named.
    6. Confira se o seu boot scripts inicia named.
    Solução usando djbdns:
    1. Criar contas dnscache e dnslog.
    2. dnscache-conf dnscache dnslog /etc/dnscachex 1.2.3.4
    3. ln -s /etc/dnscachex /service
    4. cd /service/dnscachex
    5. touch root/ip/1.2.3
    Problema: Permitir que os clientes da rede 1.5.* também possam fazer requisições de DNS. Solução usando BIND:
    1. Editar named.conf.
    2. Adicionar 1.5/16 na sessão allow-query.
    3. Enviar um sinal HUP para named.
    4. Procurar por erros no arquivo de log do seu sistema.
    Solução usando djbdns:
    1. cd /service/dnscachex
    2. touch root/ip/1.5
    Problema: Rodar o cache com acesso não-root. Solução usando BIND:
    1. Criar uma conta bindin.
    2. mkdir /etc/bindin
    3. Copiar vários programas, bibliotecas e devices em /etc/bindin.
    4. Matar o processo named.
    5. Iniciar named -u bindin -t /etc/bindin.
    6. Alterar as linhas named nos seus scripts de boot de acordo.
    Solução usando djbdns: O cache já vem com acesso não-root.
    Problema: Arrumar o cache para que ele seja reiniciado se alguém acidentalmente "matá-lo". Solução usando BIND: Escreva um script que procura pelo processo named, reinicia named se ele não estiver rodando, pausa por um tempo, e repete tudo de novo. Inicie esse script. Solução usando djbdns: O cache já é monitorado, e é reiniciado automaticamente.
    Problema: Avisar o cache para consultar um servidor interno no endereço 10.1.2.5 para informações sobre moon.x.mil. Solução usando BIND:
    1. Edite named.conf.
    2. Adicione um "forwarding zone": zone "moon.x.mil" in { type forward; forward only; forwarders { 10.1.2.5; }; };
    3. Envie um sinal HUP para named.
    4. Procure por erros no log do seu sistema.
    Solução usando djbdns:
    1. cd /service/dnscachex
    2. echo 10.1.2.5 > root/servers/moon.x.mil
    3. svc -t .
    Problema: Avisar o cache para seguir uma nova delegação a partir do servidor interno para resolver 10.1.2.6 como d.moon.x.mil. Solução usando BIND:
    1. Editar named.conf.
    2. Adicione outra "forwarding zone": zone "d.moon.x.mil" in { type forward; forward only; forwarders { 10.1.2.6; }; };
    3. Envie um sinal HUP para named.
    4. Procure por erros no log do seu sistema.
    Solução usando djbdns: O cache segue delegações.
    Problema: Configurar um servidor em 1.2.3.5 para publicar informações sobre x.mil e 1.2.3.*. Solução usando BIND:
    1. Criar um x.mil zone file, with an SOA record and an NS record.
    2. Criar um 3.2.1.in-addr.arpa zone file, with an SOA record and an NS record.
    3. Criar um named.conf file: zone "x.mil" in { type master; file "x.mil"; }; zone "3.2.1.in-addr.arpa" in { type master; file "3.2.1.in-addr.arpa"; }; options { interface-interval 0; listen-on { 1.2.3.5; }; recursion no; fetch-glue no; allow-transfer { none; }; };
    4. Start named.
    5. Make sure that your boot scripts start named.
    Solução usando djbdns:
    1. Criar contas tinydns e dnslog.
    2. tinydns-conf tinydns dnslog /etc/tinydns 1.2.3.5
    3. ln -s /etc/tinydns /service
    4. cd /service/tinydns/root
    5. ./add-ns x.mil 1.2.3.5
    6. ./add-ns 3.2.1.in-addr.arpa 1.2.3.5
    7. make
    Problema: Fazer o servidor rodar com acesso não-root. Solução usando BIND:
    1. Criar uma conta bindout.
    2. mkdir /etc/bindout
    3. Copiar vários programas, bibliotecas e devices em /etc/bindout.
    4. "Matar" named.
    5. Iniciar named -u bindout -t /etc/bindout.
    6. Mude a linha named em seus scripts de boot de acordo.
    Solução usando djbdns: O servidor, como o cache, já funciona com acesso não-root.
    Problema: Adicionar um novo host, lion.x.mil, com endereço 1.2.3.4. Solução usando BIND:
    1. Editar a zona x.mil.
    2. Adicione lion A 1.2.3.4.
    3. Mudar o número serial no registro SOA.
    4. Editar a zona 3.2.1.in-addr.arpa.
    5. Adicione 4 PTR lion.x.mil.
    6. Mudar o número serial no registro SOA.
    7. Enviar um sinal HUP para named.
    8. Procure por erros no arquivo de log.
    Solução usando djbdns:
    1. cd /service/tinydns/root
    2. ./add-host lion.x.mil 1.2.3.4
    3. make
    Problema: Evitar usar novamente um nome de host acidentalmente, ou usar novamente um mesmo endereço IP. Solução usando BIND: Busque manualmente o arquivo de zonas pelo novo nome de host e pelo novo endereço IP. Você não terá que procurar muito, se você ordenou as zonas por ordem alfabética e se você ordenou as zonas reversas pelos endereços. Solução usando djbdns: add-host cuida disso automaticamente. (Se você quer usar novamente um nome ou um endereço, use add-alias.)
    Problema: Evitar destruir uma zona se surgirem problemas na hora de salvar os dados novos: por exemplo, sem espaço disponível em disco, ou uma súbita falta de energia. Solução usando BIND:
    1. Copie o arquivo de zonas.
    2. Edite a cópia.
    3. Sincronize (sync) a cópia para o disco.
    4. Renomeie a copia.
    Solução usando djbdns: add-host cuida disso automaticamente.
    Problema: Confirmar que não há nenhum erro de sintaxe nos dados novos. Solução usando BIND: Olhe o log do sistema para ver se há mensagens de erros. Algumas mensagens significam que named não está mais provendo informações sobre aquela zona, e usuários vão começar a ver falhas em questão de segundos. neste caso, entre em pânico. Solução usando djbdns: Se há um erro de sintaxe, make irá imprimir uma mensagem de erro imediatamente, e tinydns vai continuar provendo informações com os dados antigos.
    Problema: Enviar e-mails que chegam para x.mil para um servidor de e-mail em 1.2.3.4. Solução usando BIND:
    1. Edite a zona x.mil.
    2. Adicione @ MX 0 lion.
    3. Altere o número serial no registro SOA.
    4. Envie um sinal HUP para named.
    5. Procure por erros no arquivo de log.
    Solução usando djbdns:
    1. cd /service/tinydns/root
    2. ./add-mx x.mil 1.2.3.4
    3. make
    Problema: Delegar elysium.x.mil para um servidor DNS em 1.2.3.144. Solução usando BIND:
    1. Edit the x.mil zone.
    2. Add elysium NS a.ns.elysium.
    3. Add a.ns.elysium A 1.2.3.144.
    4. Altere o número serial no registro SOA.
    5. Envie um sinal HUP para named.
    6. Procure por erros no arquivo de log.
    Solução usando djbdns:
    1. cd /service/tinydns/root
    2. ./add-childns elysium.x.mil 1.2.3.144
    3. make
    Problema: Replicar o serviço DNS de 1.2.3.5 para 1.2.3.6. Solução usando BIND: Em 1.2.3.5:
    1. Editar named.conf.
    2. Inserir 1.2.3.6; na seção allow-transfer.
    3. Editar o arquivo x.mil.
    4. Adicionar um registro NS apontando para 1.2.3.6.
    5. Editar o arquivo 3.2.1.in-addr.arpa.
    6. Adicionar um registro NS apontando para 1.2.3.6.
    7. Envie um sinal HUP para named.
    8. Procure por erros no arquivo de log.
    Em 1.2.3.6:
    1. Criar um arquivonamed.conf: zone "x.mil" in { type slave; file "x.mil"; masters { 1.2.3.5; }; }; zone "3.2.1.in-addr.arpa" in { type slave; file "3.2.1.in-addr.arpa"; masters { 1.2.3.5; }; }; options { interface-interval 0; listen-on { 1.2.3.5; }; recursion no; fetch-glue no; allow-transfer { none; }; };
    2. Iniciar named.
    3. Confirme que o seus scripts de boot iniciam named.
    Solução usando djbdns: Em 1.2.3.6:
    1. Criar contas tinydns e dnslog.
    2. tinydns-conf tinydns dnslog /etc/tinydns 1.2.3.6
    3. ln -s /etc/tinydns /service
    Em 1.2.3.5:
    1. cd /service/tinydns/root
    2. No inicio de Makefile, adicione um target remote: data.cdb, com o comando: rsync -az -e ssh data.cdb 1.2.3.6:/ service/ tinydns/ root/ data.cdb.
    3. ./add-ns x.mil 1.2.3.6
    4. ./add-ns 3.2.1.in-addr.arpa 1.2.3.6
    5. make
    Problema: Replicar uma zona recém criada. Solução usando BIND:
    1. Editar named.conf.
    2. Adicionar uma nova linha type slave.
    3. Envie um sinal HUP para named.
    4. Procure por erros no arquivo de log.
    Solução usando djbdns: Novas zonas são automaticamente replicadas.

  10. Conclusão
  11. Concluimos que o pacote djbdns é realmente mais eficiente do que o pacote BIND por diversos aspectos.
    A instalação inicialmente pode ser mais complicada do que o BIND, necessitando-se configurar diversos aspectos do djbdns, mas após esta etapa, a "manutenção" e alteração do programa é bem mais fácil do que o BIND.
    O pacote total de programas também ocupa pouco espaço na memória do servidor, o que facilita a sua instalação em computadores de pequeno porte, não exigindo muita memória.