Come posso gestire tutti i miei domini con una configurazione minima?


10

Questa è una domanda canonica sull'amministrazione del server DNS.

Ho circa un centinaio di domini. Tutti questi domini devono essere configurati in modo identico, ma sembra un enorme spreco di tempo dover configurare una nuova zona e / o un file di zona per ognuno di questi domini. Deve esserci un modo migliore per automatizzare questo!

Penso di essere su qualcosa ... se creo una zona chiamata .o utilizzo qualche altra funzione nel mio software DNS per restituire sempre un IP specifico quando Aviene richiesto un record, questo mi sembra avvicinarmi abbastanza alla fine desiderata risultato. Il mio server risponde in modo autorevole alle richieste ed è molto più facile da gestire!

Funzionava alla grande fino a quando il software di validazione dei nameserver non ha iniziato a controllare questi domini. Ho capito che posso eliminare la maggior parte degli errori aggiungendo NSrecord, ma il mio software non mi consente di inserire più di un SOArecord nello stesso file di zona.

Come aggirare questo SOAproblema con più record?

Risposte:


12

A meno che non fraintenda la domanda, lo faccio regolarmente con BIND e sembra che vada bene fintanto che ogni zona è assolutamente identica.

Sul mio nameserver primario, ho named.confvoci che puntano al file di zona generico, ad es

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

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

e poi un file di zona primary/example.GENERICche dice, ad es

;; 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 non sono affatto a conoscenza di problemi con queste zone. Sono aperto a sentirmi dire che ho frainteso la domanda, o che i miei domini in realtà non funzionano, ma fino ad allora penso che funzioni per me.

Nota che non puoi tirare lo stesso trucco sul secondario ; ogni zona sarà richiedono un file diverso da memorizzare. Ma dal momento che il contenuto di tale file verranno popolati e tenuti up-to-date da xfers zona dal primario, questo non è un affare enorme.


4

Esistono diverse scorciatoie che puoi usare per semplificarti la vita:

Se si utilizza Bind o software simile che utilizza file per archiviare i dati di zona: ad esempio, puntare le zone sullo stesso file:

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

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

Poiché è possibile utilizzare alcuni shorthands DNS, è possibile creare un file di zona universale:

$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

Questo si avvale del fatto che i nomi host nei file di zona che non terminano con un punto .vengono sempre espansi con il $ORIGINquale a sua volta viene implicitamente impostato sul nome della zona. Ed @è abbreviato per $ ORIGIN.


Anziché conservare manualmente i file delle singole zone, abilitare un metodo per interagire a livello di codice con i server dei nomi.

Ho usato PowerDNS che consente un RDMS come back-end che si adatta molto bene allo stack LAMP che stavamo usando in quel momento. Anche i servizi cloud come Amazon Route 53 espongono API web.

Ma anche il venerabile Bind supporta anche l' aggiornamento dinamico, che è un metodo per aggiungere, sostituire o eliminare i record in un server master inviandogli una forma speciale di messaggi DNS. Il formato e il significato di questi messaggi sono specificati in RFC 2136 .

L'aggiornamento dinamico è abilitato includendo una allow-updateo una update-policyclausola nell'istruzione zone. Per ulteriori informazioni, consultare il Manuale di riferimento dell'amministratore di Bind .


2
La prima metà della tua risposta è morta, ma non sono sicuro che DDNS si applichi qui ... non può essere utilizzato per aggiungere o rimuovere zone, il che sconfigge ciò che la maggior parte delle persone in questo scenario sta cercando di realizzare. (senza dover toccare named.conf per ogni aggiunta di zona) La cosa più vicina che conosco in BIND land è la nuova rndc addzoneopzione, ma è ancora brutta dal momento che finisce per generare un file di configurazione con un nome con hash nella directory di lavoro per ogni zona aggiunta.
Andrew B,

Comprendi cosa stai cercando di dire, ma una diversa interpretazione è che la difficoltà con molti domini sta nel mantenere e duplicare il lavoro. L'automazione / scripting DNS è qualcosa che non è ben documentato.
HBruijn,

4

Risposta breve

Se stai cercando un'impostazione "configurazione zero" in BIND, non esiste. Configurare una root zone ( .) sembra una buona idea, ma non lo è, ed è necessario trovare una soluzione che non implichi l'interruzione del DNS in base alle proprie esigenze.

Risposta lunga

Abbiamo ricevuto varianti di questa domanda più volte nell'ultimo anno.

La risposta è piuttosto semplice qui: non è possibile impostare una definizione di singola zona. Qualsiasi software che ti consenta di definire o sintetizzare in altro modo più SOArecord in questo contesto è un software non funzionante e fare cose rotte non è in argomento per ServerFault. O è necessario scegliere il software DNS che semplifica questa gestione oppure è necessario elaborare una strategia diversa che non preveda questo particolare collegamento.

Ci sono sicuramente alcuni trucchi che puoi usare per semplificarti la vita ... usando BIND come esempio, è abbastanza comune definire più zone che fanno riferimento allo stesso file di zona del modello. Questo è perfettamente legale e il software di validazione non troverà nulla di sbagliato in questo: vedi la risposta di MadHatter. La maggior parte delle persone passa questa soluzione perché è ancora "troppo lavoro" per aggiungere una dichiarazione di zona ogni volta che viene acquisito un nuovo dominio, ma per questo tipo di hosting non è disponibile l'opzione "configuralo una volta e vai via".

Le versioni più recenti di BIND supportano un'opzione chiamata allow-new-zonesche consente di creare dinamicamente definizioni di zone al volo tramite la nuova rndc addzonefunzionalità. Potresti dare un'occhiata a questo e vedere se si adatta alle tue esigenze.

Oltre alle soluzioni suggerite, le tue opzioni sono piuttosto limitate. A volte sei semplicemente bloccato a fare il lavoro se il software non fa le cose come vuoi tu.


-2

Quando dici "i domini devono essere configurati in modo identico", vuoi dire che devono contenere gli stessi record di risorse? In tal caso, un DNAMERR per tutti tranne un dominio non sarebbe una soluzione più pulita?

Non riesco a battere il trucco di @MadHatter di importare lo stesso file modello rimanendo rigorosamente nell'ambito della tua domanda. Posso solo offrire un approccio simile per il LDAPback-end (nel mio caso, usato con powerDNS): aggiungere gli associatedDomainattributi per i record SOA e NS pertinenti, in questo modo:

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

Purtroppo la tecnica DNAME manca l'apice della zona a causa delle limitazioni degli RFC. La sintesi CNAME risultante dai record DNAME è ancora soggetta agli stessi vincoli dei record CNAME non sintetici. A differenza della soluzione di MadHatter, il risultato è molto lontano da RR identici al 100%.
Andrew B,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.