Gerenciando arquivos de zona

5

Hospedamos nosso servidor DNS (BIND) por vários motivos, incluindo o fato de que implantamos e eliminamos máquinas com muita freqüência e que às vezes precisamos balancear a carga via DNS muito rapidamente.

No entanto, agora que temos um bom 60 servidores , estamos tendo dificuldade em controlar todos os registros e temos a tendência de cometer erros ao editar nosso arquivo de zona. Nada muito ruim ainda (nós usamos algum outro provedor de DNS como backup), mas eu estou procurando uma maneira melhor do que apenas editar manualmente o arquivo.

Além disso, uma vez que é fácil implantar novas instâncias com o chefe infame, fazer isso manualmente é o que é preciso mais tempo! Seria interessante se pudéssemos automatizar isso. Alguém sabe disso? O que é uma boa prática para editar e manter este arquivo de zona?

    
por Julien Genestoux 08.08.2010 / 00:08

7 respostas

2

Você pode usar a pesquisa do Chef para criar dinamicamente arquivos de zona como modelos com o Chef usando o nome do host / fqdn descoberto e o endereço IP dos nós.

hosts = search(:node, "*:*")

template '/path/to/zonefile' do
  source 'zonefile.erb'
  variables(:hosts => hosts)
  owner 'root'
  group 'root'
  mode 0644
end

E o modelo iterava a variável hosts passada, usando o nome do host, fqdn e ipaddress de cada resultado na pesquisa. Exemplo inventado:

<% @hosts.each do |h| -%>
<%= h['fqdn'] %>. IN A <%= h['ipaddress'] %>
<% end -%>
    
por 18.08.2010 / 09:13
3

Eu sei que este mês já tem um mês, mas acabei de configurar um sistema automatizado para gerenciar isso para nós. É composto por um repositório git que contém:

  1. Todas as zonas primárias e arquivos de configuração.
  2. Todas as zonas secundárias e arquivos de configuração.
  3. Crie scripts para o meu servidor de nomes secundário - Ubuntu 10.0.4LTS
  4. Uma receita muito simples de Capistrano que pode atualizar servidores de nomes primários e secundários.

Quando quero atualizar meus arquivos de zona, aqui está o processo.

git pull #to make sure it's current.
#Open the zone file and edit.
git diff #verify the change is what I want.
git commit -a; git push
cap primary:update #that also sends a notify to my secondary who pulls down the new zone
cap secondary:update #if I'm just updating the secondary.

Funciona muito facilmente - não preciso fazer login em um grupo de servidores para fazer nada - e é muito fácil ver o que estou mudando.

Além disso, isso me dá um bom histórico de alterações.

Se você quiser uma cópia do repo - apenas deixe-me saber e eu vou te denunciar.

    
por 10.09.2010 / 04:09
2

É uma dor que vem com o poder da configuração de texto. Eu acho 60 arquivos de zona um pequeno número para lidar, a menos que você tenha que mudá-los diariamente, mas talvez você possa ser melhor servido por um servidor que suporte dados DNS de um banco de dados (PostgreSQL, por exemplo) como PowerDNS . Isso permite que você crie scripts / páginas / aplicativos simples para lidar com dados (você pode até mesmo fornecer uma interface para os clientes).

Você pode até mesmo configurar o bind para ser um escravo de um servidor usando SQL, ele carregará automaticamente as informações da zona do mestre.

Quanto às práticas recomendadas:

  • Mantenha o arquivo de zona limpo de comentários inúteis,
  • Aplicar o uso correto de guias / espaços
  • Use os nomes de domínio para os arquivos de zona
  • eu uso macros vim para editar vários arquivos, mas você pode fazer isso com sed e outras ferramentas
por 08.08.2010 / 00:59
1

Como eu suponho que todos os seus servidores estão definidos na configuração do seu chef, que tal simplesmente gerar seus arquivos de zona usando esses dados? Não faço ideia se o chef tem alguma funcionalidade interna para isso, mas parece algo que deve ser relativamente trivial para o script. Para manter as coisas separadas, pode ser uma ideia delegar esses servidores "dinâmicos" a uma zona própria.

Dito isto, tem certeza de que deseja usar o DNS para fins de balanceamento de carga?

    
por 08.08.2010 / 00:59
1

Scripts de validação de integridade, que fazem coisas como verificar se o número de série subiu e SCM, talvez com algo como o Subversion, ou qualquer que seja o veneno preferido local, para ter um histórico e capacidade de reverter.

Uma vez que você tenha os dados em algo como o svn, você pode ter ferramentas que adicionam / removem hosts individuais, enquanto ainda permite que humanos editem o arquivo de zona.

Caso contrário, existem várias opções para mover os dados de arquivos simples para bancos de dados. PowerDNS é um, os patches de DLZ para Bind são outros. Observarei que, em termos de desempenho, se essas forem zonas expostas publicamente, você provavelmente desejará manter o servidor de banco de dados como um mestre oculto e permitir que o AXFR / IXFR propague alterações nos mestres públicos, que podem executar a vinculação de estoque. Para zonas internas (corp.example.com), isso provavelmente é um exagero.

    
por 08.08.2010 / 07:36
1

Tente estas regras

  • Configure seu servidor DNS mestre para notificar o escravo sobre mudanças de zona.
  • Edite os arquivos de zona com uma ferramenta que incrementará suas versões automaticamente. Eu uso o emacs.
  • Mantenha seu arquivo de zona em um sistema de controle de versão (CVS, subversion ou GIT).
  • Diff seu arquivo de zona contra o sistema de controle de origem antes de confirmá-lo ou recarregar o servidor mestre. Verifique suas alterações visualmente, de preferência com base em uma especificação de alteração por escrito. Use a especificação de mudança como uma mensagem de confirmação.
  • Use o recarregamento para atualizar as mudanças, em vez de reiniciar o servidor de ligação principal. Considere um script para atualizar a configuração de zona do sistema de controle de origem e recarregar o servidor mestre em uma etapa.
  • Use tempos de espera curtos na sua configuração de zona. Deve ser menor que a freqüência exectada entre mudanças.
  • Se você estiver gerenciando as zonas de frente e reversa, considere o uso de uma ferramenta que gere os dois arquivos a partir de uma especificação comum.
por 08.08.2010 / 21:08
0

Para 60 servidores, o módulo BIND para o Webmin deve funcionar bem. Verifique também esta lista

Editar: não li a primeira frase da pergunta.

Eu não sei se existe uma maneira barata de fazer isso, além de criar seus próprios scripts, seja por marionetes / chefs ou de forma independente.

Eu conheço algumas soluções comerciais de "gerenciamento de DNS" que estão no topo do BIND. Eles também fornecem interfaces da Web fáceis e APIs SOAP / Rest para adicionar / remover registros rapidamente. Se necessário, posso fornecer informações para essas empresas, já que recentemente avaliamos vários produtos.

    
por 08.08.2010 / 04:51