DNS, ¿los comodines A Record tienen prioridad sobre los CNAME más específicos?

18

Tenemos un comodín configurado para manejar todos los subdominios de "example.com"

UN REGISTRO: * .example.com apunta a 10.10.10.10

Tenemos un registro A más específico para manejar un subdominio especial (esto funciona bien):

Un registro: staging.example.com puntos 10.10.10.9

El problema que tenemos es que estamos migrando la puesta en escena a un nuevo entorno de alojamiento y se nos ha indicado utilizar un CNAME:

CNAME: new-staging.example.com apunta a proxy.heroku.com

Pensamos que esto funcionaría. Sin embargo, new-staging.example.com se resuelve con el comodín de nivel superior 10.10.10.10 y no apunta a proxy.heroku.com.

¿Qué me estoy perdiendo? ¿No es esto posible? ¿O es esta una mala práctica? Gracias,

zdennis
fuente
1
¿Está configurando esto en vivo a través de la interfaz web de un ISP o está ejecutando BIND o djbdns, por ejemplo?
Jonathan Ross el
Cuando dice "resuelve el comodín de nivel superior", ¿cómo está haciendo esta resolución? dig -t ANY new-staging.example.com?
nickgrim
@ Jonathan, actualmente estamos usando Slicehost para administrar DNS, por lo que es a través de una interfaz web.
zdennis
@nickgrim cuando se ejecuta dig -t ANY new-staging.example.com obtenemos: new-staging.example.com. 82880 EN CNAME proxy.heroku.com.example.com. proxy.heroku.com.ejemplo.com. 86400 IN A 10.10.10.10
zdennis

Respuestas:

15

La respuesta es generalmente "No": el registro más específico debería ganar, por lo que debería funcionar como lo describió / esperaba. Supongo que tiene el registro comodín A almacenado en caché en algún lugar y necesita esperar a que caduque ese caché.

Una prueba rápida con BIND 9.6.2-P2 / FreeBSD 8.1:
Una zona que contiene los registros:

example.net.                IN      A      127.0.0.2
*.test.example.net.         IN      A      127.0.0.1
specific.test.example.net.  IN      CNAME  example.net.

Resuelve de la siguiente manera:

% dig specific.test.example.net

; <<>> DiG 9.6.2-P2 <<>> specific.test.example.net
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 17222
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 2, ADDITIONAL: 2

;; QUESTION SECTION:
;specific.test.example.net. IN  A

;; ANSWER SECTION:
specific.test.example.net. 3600 IN  CNAME   example.net.
example.net.               3600 IN  A   127.0.0.2

;; AUTHORITY SECTION:
example.net.        3600    IN  NS  ns1.example.net.

;; ADDITIONAL SECTION:
ns1.example.net.    3600    IN  A   127.0.0.1

(Devuelve el CNAME)
y

% dig nonspecific.test.example.net

; <<>> DiG 9.6.2-P2 <<>> nonspecific.test.example.net
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 26980
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 2

;; QUESTION SECTION:
;nonspecific.test.example.net.  IN  A

;; ANSWER SECTION:
nonspecific.test.example.net. 3600 IN   A   127.0.0.1

;; AUTHORITY SECTION:
example.net.        3600    IN  NS  ns1.example.net.


;; ADDITIONAL SECTION:
ns1.example.net.    3600    IN  A   127.0.0.1

(Devuelve el registro comodín A)

voretaq7
fuente
¿Está esto en los estándares DNS o es específico de la implementación?
Bigbio2002
@ Bigbio2002 Creo que es parte del estándar: RFC 4592 es el lugar relevante para mirar, mi cerebro está un poco demasiado agrio desde que escribí documentación todo el día hasta que el estómago leyó el RFC, así que si estoy equivocado, por favor, dame una bofetada. :-)
voretaq7
7

Según su comentario sobre la pregunta:

al ejecutar dig -t CUALQUIER nuevo-staging.example.com obtenemos: new-staging.example.com. 82880 EN CNAME proxy.heroku.com.example.com. proxy.heroku.com.ejemplo.com. 86400 IN A 10.10.10.10

... has configurado mal el DNS. Debe establecer el objetivo del CNAME en proxy.heroku.com.: ¡el período final es importante! Sin él, su servidor DNS está asumiendo que se está refiriendo a un host dentro de su example.comzona proxy.heroku.com.example.com, y eso está siendo capturado por el registro comodín.

nickgrim
fuente
Tenemos el registro CNAME establecido en "proxy.heroku.com". Cuando excavamos el servidor de nombres de servidor de corte directamente (dig @ ns1.slicehost.com), la única respuesta proporcionó puntos al CNAME para proxy.heroku.com. Cuando excavamos sin especificar, nos da las dos respuestas (las que publiqué arriba que su respuesta aquí refleja). Esto me hace pensar que tal vez @ voretaq7 puede pensar que hay un problema de caché. ¿Eso se alinea con lo que estoy viendo al cavar?
zdennis
Sí, eso parece implicar que un caché de DNS de usted ha almacenado en caché la versión incorrecta (sin período). Mientras tanto, tendrá que esperar a que caduque el TTL y / o configurar un nombre diferente ( new-new-staging?).
nickgrim
El punto que falta es lo que me hizo tropezar también.
loevborg
0

Encontré esta publicación investigando cómo se hace esto en un servidor Plesk Linux compartido. En su ejemplo, se refieren a una solución combinada DNS / vhost.conf donde debe agregar tanto a vhost.conf como a actualizar el DNS.

Cita: "Tiene que ser el último en la lista de subdominios, que está ordenada alfabéticamente, así que comience su nombre con" zz ". Http://kb.parallels.com/2239

Supongo que esto difiere de la teoría DNS 'normal' por la cual se devolvería el registro más específico.

Eugene van der Merwe
fuente