Como posso gerenciar todos os meus domínios com configuração mínima?


10

Esta é uma pergunta canônica sobre a administração do servidor DNS.

Eu tenho mais ou menos cem domínios. Todos esses domínios precisam ser configurados de forma idêntica, mas parece uma enorme perda de tempo ter que configurar uma nova zona e / ou arquivo de zona para cada um desses domínios. Tem que haver uma maneira melhor de automatizar isso!

Acho que estou pensando em algo ... se eu criar uma zona chamada .ou usar algum outro recurso no meu software DNS para sempre retornar um IP específico quando um Aregistro for solicitado, isso parece me aproximar bastante do final desejado resultado. Meu servidor está respondendo com autoridade às solicitações e é muito mais fácil de gerenciar!

Isso funcionou muito bem até o software de validação do servidor de nomes começar a verificar esses domínios. Eu descobri que posso eliminar a maioria dos erros adicionando NSregistros, mas meu software não me permite colocar mais de um SOAregistro no mesmo arquivo de zona.

Como solucionar esse SOAproblema de vários registros?

Respostas:


12

A menos que eu esteja entendendo mal a pergunta, faço isso regularmente com o BIND, e parece estar bem desde que cada zona seja absolutamente idêntica.

No meu servidor de nomes primário, tenho named.confentradas que apontam para o arquivo de zona genérico, por exemplo

zone "example.com" {
        type master;
        file "primary/example.GENERIC";
};

zone "example.co.uk" {
        type master;
        file "primary/example.GENERIC";
};

e então um arquivo de zona primary/example.GENERICque diz, por exemplo

;; Start of Authority
@       IN      SOA     ns.teaparty.net. dns.gatekeeper.ltd.uk. (
                        2004091201      ; serial number YYYYMMDDNN
                        28800           ; refresh  8 hours
                        7200            ; retry    2 hours
                        864000          ; expire  10 days
                        3600 )          ; min ttl  1 day
;;
;;      Name Servers
                IN      NS      ns.teaparty.net.
                IN      NS      ns2.teaparty.net.

E não estou ciente de nenhum problema com essas zonas. Estou aberto a saber que entendi mal a pergunta ou que meus domínios de fato não funcionam, mas até então acho que funciona para mim.

Observe que você não pode fazer o mesmo truque no secundário ; cada zona vai exigir um arquivo diferente para ser armazenado em. Mas desde que o conteúdo desse arquivo será preenchido e mantido up-to-date por xfers zona do primário, isto não é um grande negócio.


4

Existem vários atalhos que você pode usar para facilitar sua vida:

Se você usar o Bind ou software semelhante que usa arquivos para armazenar os dados da zona: aponte suas zonas para o mesmo arquivo, por exemplo:

zone "example.net" {
    type master;
    file "/etc/bind/zone/default.zone";
};

zone "example.org" {
    type master;
    file "/etc/bind/zone/default.zone";
};

Como você pode usar certas abreviações de DNS, pode criar um arquivo de zona universal:

$TTL 1h      ; default expiration time of all resource records without their own TTL value
@  IN  SOA   ns1.example.com. username.example.com. ( 
                               20140218131405 ; Serial number YYYYMMDDHHMMSS
                                        28800 ; Refresh     8 hours
                                         7200 ; Retry       2 hours
                                       604800 ; Expire      7 days
                                        86400 ; Minimum TTL 1 day )
@             IN  NS    ns1.example.com.      ; ns1.example.com is a primary nameserver
@             IN  NS    ns2.example.com.      ; ns2.example.com is a backup nameserver
@             IN  MX    10 mail.example.com.  ; mail.example.com is the mailserver
@             IN  MX    20 mail2.example.com. ; the secondary mailserver
@             IN  A     192.0.2.1             ; IPv4 address for the bare domain
              IN  AAAA  2001:db8:10::1        ; IPv6 address for the bare domain
www           IN  A     192.0.2.1             ; www.domain
              IN  AAAA  2001:db8:10::1        ; IPv6 address for www.domain - note by starting the line with a blank it becomes the continuation of the previous record and this IPv6 record applies to www
wwwtest       IN  CNAME www                   ; wwwtest is an alias for www

Isso faz uso do fato de que os nomes de host nos arquivos de zona que não terminam com um ponto .são sempre expandidos com o $ORIGINque, por sua vez, é definido implicitamente como o nome da zona. E @é uma abreviação de $ ORIGIN.


Em vez de manter os arquivos de zona individuais manualmente, ative um método para interagir programaticamente com seus servidores de nomes.

Eu usei o PowerDNS, que permite um RDMS como back-end que se encaixa muito bem com a pilha LAMP que estávamos usando na época. Serviços em nuvem como o Amazon Route 53 também expõem APIs da web.

Mas mesmo o venerável Bind também suporta a Atualização dinâmica, que é um método para adicionar, substituir ou excluir registros em um servidor mestre, enviando a ele uma forma especial de mensagens DNS. O formato e o significado dessas mensagens são especificados na RFC 2136 .

A atualização dinâmica é ativada incluindo allow-updateuma update-policycláusula ou na declaração de zona. Para obter mais informações, consulte o Manual de referência do administrador de associação .


2
A primeira metade da sua resposta está pronta, mas não tenho certeza de que o DDNS se aplique aqui ... ele não pode ser usado para adicionar ou remover zonas, o que anula o que a maioria das pessoas neste cenário está tentando realizar. (sem precisar tocar em named.conf para cada zona adicionada) A coisa mais próxima que eu conheço no BIND land é a nova rndc addzoneopção, mas isso ainda é meio feio, pois acaba gerando um arquivo de configuração com um nome de hash no diretório de trabalho para toda zona adicionada.
Andrew B

Entenda o que você está tentando dizer, mas uma interpretação diferente é que a dificuldade de muitos domínios está em manter e duplicar o trabalho. A automação / script de DNS é algo que não está bem documentado.
21715 HBruijn

4

Resposta curta

Se você está procurando uma configuração de "configuração zero" no BIND, ela não existe. Configurar uma zona raiz ( .) parece uma boa ideia, mas não é, e você precisa encontrar uma solução que não envolva a quebra do DNS para atender às suas necessidades.

Resposta longa

Temos recebido variantes dessa pergunta várias vezes no ano passado.

A resposta é bem simples aqui: você não pode configurar uma única definição de zona. Qualquer software que permita definir ou sintetizar vários SOAregistros nesse contexto é um software danificado , e fazer coisas danificadas não está relacionado ao ServerFault. Você precisa escolher um software DNS que simplifique esse gerenciamento ou criar uma estratégia diferente que não envolva esse atalho específico.

Definitivamente, existem alguns truques que você pode usar para facilitar a vida ... usando o BIND como exemplo, é bastante comum definir várias zonas que referenciam o mesmo arquivo de zona de modelo. Isso é perfeitamente legal e o software de validação não encontrará nada de errado com isso: veja a resposta do MadHatter. A maioria das pessoas passa por cima dessa solução porque ainda é "muito trabalhoso" adicionar uma declaração de zona toda vez que um novo domínio é adquirido, mas não há uma opção "configure uma vez e vá embora" para esse tipo de hospedagem.

As versões mais recentes do BIND oferecem suporte a uma opção chamada allow-new-zonesque permitirá criar dinamicamente definições de zona rapidamente, através da nova rndc addzonefuncionalidade. Você pode dar uma olhada nisso e ver se ele atende às suas necessidades.

Além das soluções sugeridas, suas opções são um pouco limitadas. Às vezes, você fica preso ao trabalho se o software não faz as coisas do jeito que você deseja.


-2

Quando você diz "os domínios precisam ser configurados de forma idêntica", você quer dizer que eles precisam manter os mesmos registros de recursos? Nesse caso, um DNAMERR para todos, exceto um domínio, não seria uma solução mais limpa?

Não consigo superar o truque importando o mesmo arquivo de modelo @MadHatter, mantendo-me estritamente dentro do escopo da sua pergunta. Só posso oferecer uma abordagem semelhante para o LDAPback-end (no meu caso, usado com o powerDNS): adicione os associatedDomainatributos para os registros SOA e NS relevantes, da seguinte forma:

dn: dc=vanitydomains,ou=DNS,dc=myDIT
objectClass: dNSDomain2
objectClass: domainRelatedObject
dc: vanitydomains
associatedDomain: vanitydomain.ORG
associatedDomain: vanitydomain.NET
associatedDomain: vanitydomain.COM
associatedDomain: vanitydomain.INFO
sOARecord: NS1.example.com  sysadmin.example.com 2011100701 28800 1800 2592000 10800
dNameRecord: example.com
nSRecord: NS1.example.com
nSRecord: NS2.example.com

Infelizmente, a técnica DNAME perde o ápice da zona devido a limitações dos RFCs. A síntese CNAME resultante dos registros DNAME ainda está sujeita às mesmas restrições de registros CNAME não sintéticos. Diferente da solução da MadHatter, o resultado está muito longe dos conjuntos de RR 100% idênticos.
Andrew B
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.