¿Cómo puedo administrar todos mis dominios con una configuración mínima?

10

Esta es una pregunta canónica sobre la administración del servidor DNS.

Tengo alrededor de cien dominios. Todos estos dominios deben configurarse de manera idéntica, pero parece una gran pérdida de tiempo tener que configurar una nueva zona y / o archivo de zona para cada uno de estos dominios. ¡Tiene que haber una mejor manera de automatizar esto!

Creo que estoy haciendo algo ... si creo una zona llamada ., o uso alguna otra función en mi software DNS para devolver siempre una IP específica cuando Ase solicita un registro, esto parece acercarme bastante al final deseado resultado. ¡Mi servidor responde con autoridad a las solicitudes y es mucho más fácil de administrar!

Esto funcionaba muy bien hasta que el software de validación del servidor de nombres comenzó a verificar estos dominios. Descubrí que puedo hacer que la mayoría de los errores desaparezcan agregando NSregistros, pero mi software no me permite poner más de un SOAregistro en el mismo archivo de zona.

¿Cómo evito este SOAproblema de registro múltiple ?

Andrew B
fuente

Respuestas:

12

A menos que esté malinterpretando la pregunta, hago esto regularmente con BIND, y parece estar bien siempre que cada zona sea absolutamente idéntica.

En mi servidor de nombres principal, tengo named.confentradas que apuntan al archivo de zona genérico, p. Ej.

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

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

y luego un archivo de zona primary/example.GENERICque dice, por ejemplo

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

Y no estoy al tanto de ningún problema con estas zonas en absoluto. Estoy abierto a que me digan que he entendido mal la pregunta, o que mis dominios de hecho no funcionan, pero hasta entonces creo que funciona para mí.

Tenga en cuenta que no puede hacer el mismo truco en el secundario ; cada zona se requiere un archivo diferente para ser almacenados. Pero puesto que el contenido de ese archivo se rellenarán y se mantienen actualizados por transferencias de zona desde la primaria, esto no es un gran negocio.

MadHatter
fuente
4

Existen varios atajos que puede usar para facilitarle la vida:

Si usa Bind o un software similar que usa archivos para almacenar los datos de la zona: apunte sus zonas al mismo archivo, por ejemplo:

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

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

Debido a que puede utilizar ciertas abreviaturas de DNS, puede crear un archivo 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

Esto hace uso del hecho de que los nombres de host en los archivos de zona que no terminan con un punto .siempre se expanden con el $ORIGINque a su vez se establece implícitamente en el nombre de la zona. Y @es una abreviatura de $ ORIGIN.


En lugar de mantener a mano archivos de zona individuales, habilite un método que interactúe programáticamente con sus servidores de nombres.

He usado PowerDNS que permite un RDMS como back-end que encaja muy bien con la pila LAMP que estábamos usando en ese momento. Los servicios en la nube como Amazon Route 53 también exponen las API web.

Pero incluso el venerable Bind también admite la actualización dinámica, que es un método para agregar, reemplazar o eliminar registros en un servidor maestro enviándole una forma especial de mensajes DNS. El formato y el significado de esos mensajes se especifican en RFC 2136 .

La actualización dinámica se habilita al incluir una allow-updateo una update-policycláusula en la declaración de zona. Para obtener más información, consulte el Manual de referencia de Bind Administrator .

HBruijn
fuente
2
La primera mitad de su respuesta está terminada, pero no estoy seguro de que DDNS se aplique aquí ... no se puede usar para agregar o eliminar zonas, lo que frustra lo que la mayoría de las personas en este escenario están tratando de lograr. (sin tener que tocar named.conf para cada zona agregada) Lo más parecido que conozco en BIND land es la nueva rndc addzoneopción, pero eso sigue siendo un poco feo ya que termina generando un archivo de configuración con un nombre hash en el directorio de trabajo para cada zona agregada
Andrew B
Entiendo lo que estás tratando de decir, pero una interpretación diferente es que la dificultad con muchos dominios está en mantener y duplicar el trabajo. La automatización / scripting DNS es algo que no está bien documentado.
HBruijn
4

Respuesta corta

Si está buscando una configuración de "configuración cero" en BIND, no existe. Configurar una zona raíz ( .) parece una buena idea, pero no lo es, y necesita encontrar una solución que no implique romper el DNS para satisfacer sus necesidades.

Respuesta larga

Hemos estado recibiendo variantes de esta pregunta varias veces en el último año.

La respuesta es bastante simple aquí: no puede configurar una sola definición de zona. Cualquier software que le permita definir o sintetizar múltiples SOAregistros en este contexto es software roto , y hacer cosas rotas no es un tema para ServerFault. Debe elegir un software de DNS que simplifique esta administración para usted, o debe idear una estrategia diferente que no implique este atajo en particular.

Definitivamente, hay algunos trucos que puede usar para hacer la vida más fácil ... usando BIND como ejemplo, es bastante común definir múltiples zonas que hacen referencia al mismo archivo de zona de plantilla. Esto es perfectamente legal y el software de validación no encontrará nada malo en ello: vea la respuesta de MadHatter. La mayoría de las personas pasan por alto esta solución porque todavía es "demasiado trabajo" agregar una declaración de zona cada vez que se adquiere un nuevo dominio, pero no existe la opción "configurarlo una vez y retirarse" para este tipo de alojamiento.

Las versiones más nuevas de BIND admiten una opción llamada allow-new-zonesque le permitirá crear dinámicamente definiciones de zona sobre la marcha a través de la nueva rndc addzonefuncionalidad. Es posible que desee ver esto y ver si se ajusta a sus necesidades.

Además de las soluciones sugeridas, sus opciones son algo limitadas. A veces solo tienes que hacer el trabajo si el software no hace las cosas como quieres.

Andrew B
fuente
-2

Cuando dice "los dominios deben configurarse de manera idéntica", ¿quiere decir que deben contener los mismos registros de recursos? En ese caso, ¿no sería un DNAMERR para todos menos un dominio una solución más limpia?

No puedo superar el truco de @MadHatter de importar el mismo archivo de plantilla mientras me mantengo estrictamente dentro del alcance de su pregunta. Solo puedo ofrecer un enfoque similar para el LDAPbackend (en mi caso, usado con powerDNS): agregue los associatedDomainatributos para los registros SOA y NS relevantes, de esta manera:

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
fuente
Lamentablemente, la técnica DNAME pierde el vértice de la zona debido a las limitaciones de los RFC. La síntesis CNAME resultante de los registros DNAME todavía está sujeta a las mismas restricciones que los registros CNAME no sintéticos. A diferencia de la solución de MadHatter, el resultado está muy lejos de ser RRsets 100% idénticos.
Andrew B