NXDOMAIN com CNAME RR na seção ANSWER

NXDOMAIN com CNAME RR na seção ANSWER

Se eu resolver console.aws.amazon.comcom dig, recebo:

; <<>> DiG 9.10.6 <<>> console.aws.amazon.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 35338
;; flags: qr rd ra; QUERY: 1, ANSWER: 5, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4000
;; QUESTION SECTION:
;console.aws.amazon.com.        IN  A

;; ANSWER SECTION:
console.aws.amazon.com. 4   IN  CNAME   lbr-optimized.console-l.amazonaws.com.
lbr-optimized.console-l.amazonaws.com. 4 IN CNAME us-east-1.console.aws.amazon.com.
us-east-1.console.aws.amazon.com. 4 IN  CNAME   gr.console-geo.us-east-1.amazonaws.com.
gr.console-geo.us-east-1.amazonaws.com. 4 IN CNAME console.us-east-1.amazonaws.com.
console.us-east-1.amazonaws.com. 59 IN  A   54.239.30.25

No entanto, ao resolver, us-east-1.console.aws.amazon.comobtém um NXDOMAIN:

;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 33652
;; flags: qr aa; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 0

;; ANSWER SECTION:
us-east-1.console.aws.amazon.com. 60 IN CNAME   gr.console-geo.us-east-1.amazonaws.com.

;; AUTHORITY SECTION:
us-east-1.amazonaws.com. 60 IN  SOA ns-912.amazon.com. root.amazon.com. 1609664924 3600 900 7776000 60

;; Received 147 bytes from 52.9.146.37#53(ns-912.amazon.com) in 270 ms

Parece que, mesmo que tenhamos um NXDOMAINcódigo de resposta, ele continua resolvendo o CNAME. Porém, de acordo com a RFC (vi isso em #8020), se houver um NXDOMAINcódigo de resposta como, significa que o domínio no final da cadeia não existe, então devemos continuar, já que não vamos pegue qualquer A RR...

Estou um pouco confuso aqui porque temos um NXDOMAINno meio da cadeia. É seguro ignorar NXDOMAINse tivermos um CNAMEna seção RESPOSTA e continuar a resolver a cadeia de CNAME?

Existe uma RFC que resolva esse tipo de questão?

Responder1

O tipo de resposta CNAME(resposta) + SOA(autoridade) + NXDOMAIN(rcode) é válido desde que o servidor realmente conheça o status do nome canônico (o CNAME"destino").
Neste caso parece que o servidor de nomes aws.amazon.comestá configurado para também ter uma us-east-1.amazonaws.comzona (a zona onde este CNAME leva) onde olha e conclui que o nome canônico não existe. A questão é que esta não é a us-east-1.amazonaws.comzona real que o mundo usa, a delegação real us-east-1.amazonaws.comleva a servidores de nomes totalmente diferentes.

Olhando para a resposta relevante (da pergunta), observe SOAna seção de autoridade (parte da resposta negativa) e como isso vem da us-east-1.amazonaws.comzona "falsa" em ns-912.amazon.com:

$ dig @ns-912.amazon.com us-east-1.console.aws.amazon.com +norec

; <<>> DiG 9.11.25-RedHat-9.11.25-2.fc33 <<>> @ns-912.amazon.com us-east-1.console.aws.amazon.com +norec
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 19359
;; flags: qr aa; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 0

;; QUESTION SECTION:
;us-east-1.console.aws.amazon.com. IN   A

;; ANSWER SECTION:
us-east-1.console.aws.amazon.com. 60 IN CNAME   gr.console-geo.us-east-1.amazonaws.com.

;; AUTHORITY SECTION:
us-east-1.amazonaws.com. 60     IN      SOA     ns-912.amazon.com. root.amazon.com. 1609723312 3600 900 7776000 60

;; Query time: 152 msec
;; SERVER: 52.9.146.37#53(52.9.146.37)
;; WHEN: Mon Jan 04 01:21:54 UTC 2021
;; MSG SIZE  rcvd: 147

$

O "real" us-east-1.amazonaws.comé delegado inteiramente em outro lugar (não ns-912.amazon.com):

us-east-1.amazonaws.com. 86400  IN      NS      ns2.p31.dynect.net.
us-east-1.amazonaws.com. 86400  IN      NS      ns4.p31.dynect.net.
us-east-1.amazonaws.com. 86400  IN      NS      pdns5.ultradns.info.
us-east-1.amazonaws.com. 86400  IN      NS      pdns3.ultradns.org.
us-east-1.amazonaws.com. 86400  IN      NS      ns1.p31.dynect.net.
us-east-1.amazonaws.com. 86400  IN      NS      ns3.p31.dynect.net.
us-east-1.amazonaws.com. 86400  IN      NS      pdns1.ultradns.net.
us-east-1.amazonaws.com. 86400  IN      NS      u2.amazonaws.com.
us-east-1.amazonaws.com. 86400  IN      NS      u6.amazonaws.com.
us-east-1.amazonaws.com. 86400  IN      NS      u3.amazonaws.com.
us-east-1.amazonaws.com. 86400  IN      NS      u5.amazonaws.com.
us-east-1.amazonaws.com. 86400  IN      NS      u1.amazonaws.com.
us-east-1.amazonaws.com. 86400  IN      NS      u4.amazonaws.com.

e tem um SOA completamente diferente:

us-east-1.amazonaws.com. 900    IN      SOA     dns-external-master.amazon.com. root.amazon.com. 8548 180 60 2592000 5

Quanto às coisas que funcionam relativamente bem, apesar dessa flagrante configuração incorreta, acredito que os resolvedores simplesmente percebem isso NXDOMAIN, já que os resolvedores geralmente são bons em confiar apenas nos dados "no bailiwick" nas respostas.
Ou seja, não confiar em dados adicionais em uma resposta que faz afirmações sobre nomes pertencentes a zonas que não estão realmente hospedadas naquele servidor de nomes.

informação relacionada