Comment puis-je gérer tous mes domaines avec une configuration minimale?

10

Il s'agit d'une question canonique sur l'administration du serveur DNS.

J'ai une centaine de domaines. Tous ces domaines doivent être configurés de manière identique, mais cela semble être une énorme perte de temps de devoir configurer une nouvelle zone et / ou un nouveau fichier de zone pour chacun de ces domaines. Il doit y avoir un meilleur moyen d'automatiser cela!

Je pense que je suis sur quelque chose ... si je crée une zone appelée ., ou que j'utilise une autre fonctionnalité de mon logiciel DNS pour toujours retourner une adresse IP spécifique lorsqu'un Aenregistrement est demandé, cela semble me rapprocher assez de la fin souhaitée résultat. Mon serveur répond avec autorité aux demandes et c'est tellement plus facile à gérer!

Cela fonctionnait très bien jusqu'à ce que le logiciel de validation du serveur de noms commence à vérifier ces domaines. J'ai compris que je pouvais faire disparaître la plupart des erreurs en ajoutant des NSenregistrements, mais mon logiciel ne me laissait pas mettre plus d'un SOAenregistrement dans le même fichier de zone.

Comment contourner ce SOAproblème d'enregistrements multiples ?

Andrew B
la source

Réponses:

12

À moins que je ne comprenne mal la question, je le fais régulièrement avec BIND, et cela semble bien tant que chaque zone est absolument identique.

Sur mon serveur de noms principal, j'ai des named.confentrées qui pointent vers le fichier de zone générique, par exemple

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

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

puis un fichier de zone primary/example.GENERICqui dit, par exemple

;; 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.

Et je ne connais aucun problème avec ces zones. Je suis ouvert à ce que l'on me dise que j'ai mal compris la question, ou que mes domaines ne fonctionnent pas, mais d'ici là, je pense que cela fonctionne pour moi.

Notez que vous ne pouvez pas tirer la même astuce sur le secondaire ; chaque zone aura besoin d' un autre fichier à stocker. Mais puisque le contenu de ce fichier seront renseignés et tenus à jour par Xfers de la zone du primaire, ce n'est pas une affaire énorme.

Chapelier Fou
la source
4

Il existe un certain nombre de raccourcis que vous pouvez utiliser pour vous faciliter la vie:

Si vous utilisez Bind ou un logiciel similaire qui utilise des fichiers pour stocker les données de zone: pointez vos zones vers le même fichier, par exemple:

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

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

Comme vous pouvez utiliser certains raccourcis DNS, vous pouvez créer un fichier de zone universel:

$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

Cela utilise le fait que les noms d'hôtes dans les fichiers de zone qui ne se terminent pas par un point .sont toujours développés avec le $ORIGINqui à son tour est implicitement défini sur le nom de la zone. Et @est raccourci pour le $ ORIGIN.


Plutôt que de gérer manuellement les fichiers de zone individuels, activez une méthode qui interagit par programme avec vos serveurs de noms.

J'ai utilisé PowerDNS qui permet un RDMS comme back-end qui correspond très bien à la pile LAMP que nous utilisions à l'époque. Les services cloud comme Amazon Route 53 exposent également les API Web.

Mais même le vénérable Bind prend également en charge la mise à jour dynamique qui est une méthode pour ajouter, remplacer ou supprimer des enregistrements dans un serveur maître en lui envoyant une forme spéciale de messages DNS. Le format et la signification de ces messages sont spécifiés dans la RFC 2136 .

La mise à jour dynamique est activée en incluant une allow-updateou une update-policyclause dans l'instruction de zone. Pour plus d'informations, consultez le manuel de référence de l'administrateur Bind .

HBruijn
la source
2
La première moitié de votre réponse est morte, mais je ne suis pas sûr que le DDNS s'applique ici ... il ne peut pas être utilisé pour ajouter ou supprimer des zones, ce qui va à l'encontre de ce que la plupart des gens de ce scénario tentent d'accomplir. (ne pas avoir à toucher named.conf pour chaque ajout de zone) La chose la plus proche que je connaisse dans BIND land est la nouvelle rndc addzoneoption, mais c'est toujours un peu moche car elle finit par générer un fichier de configuration avec un nom haché dans le répertoire de travail pour chaque zone ajoutée.
Andrew B
Pour comprendre ce que vous essayez de dire, mais une interprétation différente est que la difficulté avec de nombreux domaines est de maintenir et de dupliquer le travail. L'automatisation / l'écriture de scripts DNS est quelque chose qui n'est pas bien documenté.
HBruijn
4

Réponse courte

Si vous recherchez une configuration "zéro configuration" dans BIND, elle n'existe pas. La configuration d'une zone racine ( .) semble être une bonne idée, mais ce n'est pas le cas, et vous devez trouver une solution qui n'implique pas de casser le DNS pour répondre à vos besoins.

Longue réponse

Nous avons reçu plusieurs fois des variantes de cette question au cours de la dernière année.

La réponse est assez simple ici: vous ne pouvez pas configurer une définition de zone unique. Tout logiciel qui vous permet de définir ou de synthétiser autrement plusieurs SOAenregistrements dans ce contexte est un logiciel cassé , et faire des choses cassées n'est pas un sujet pour ServerFault. Vous devez soit choisir un logiciel DNS qui simplifie cette gestion pour vous, soit vous devez proposer une stratégie différente qui n'implique pas ce raccourci particulier.

Il y a certainement quelques astuces que vous pouvez utiliser pour vous faciliter la vie ... en utilisant BIND comme exemple, il est assez courant de définir plusieurs zones qui référencent toutes le même fichier de zone de modèle. Ceci est parfaitement légal et le logiciel de validation n'y trouvera rien de mal: voir la réponse de MadHatter. La plupart des gens passent à côté de cette solution car il est "trop ​​de travail" d'ajouter une déclaration de zone à chaque fois qu'un nouveau domaine est acquis, mais il n'y a pas d'option "configurez-le une fois et partez" pour ce type d'hébergement.

Les nouvelles versions de BIND prennent en charge une option appelée allow-new-zonesqui vous permettra de créer dynamiquement des définitions de zone à la volée via la nouvelle rndc addzonefonctionnalité. Vous voudrez peut-être y jeter un œil et voir si cela correspond à vos besoins.

À part les solutions suggérées, vos options sont quelque peu limitées. Parfois, vous êtes juste obligé de faire le travail si le logiciel ne fait pas les choses comme vous le souhaitez.

Andrew B
la source
-2

Lorsque vous dites que "les domaines doivent être configurés de manière identique", voulez-vous dire qu'ils doivent contenir les mêmes enregistrements de ressources? Dans ce cas, un DNAMERR pour tous les domaines sauf un ne serait-il pas une solution plus propre?

Je ne peux pas battre l'astuce de @MadHatter d'importer le même fichier modèle tout en restant strictement dans le cadre de votre question. Je ne peux offrir qu'une approche similaire pour le LDAPbackend (dans mon cas, utilisé avec powerDNS): ajoutez les associatedDomainattributs pour les enregistrements SOA et NS pertinents, comme ceci:

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
sema
la source
Malheureusement, la technique DNAME manque le sommet de la zone en raison des limitations des RFC. La synthèse CNAME résultant des enregistrements DNAME est toujours soumise aux mêmes contraintes que les enregistrements CNAME non synthétiques. Contrairement à la solution de MadHatter, le résultat est très loin de RRsets 100% identiques.
Andrew B