Verhalten von DNS-Servern bei out-of-zone-CNAMEs

11/11/2011 - 16:26 von Marc Haber | Report spam
Hallo,

gegeben sei die Zone example.com, in der ein RR
outsidecname IN CNAME foo.example.net.
eingetragen ist. Autoritativer Nameserver für example.com sei
dns.example.org.

example.net liegt autoritativ auf einem anderen Nameserver (lies:
irgendwo anders); dns.example.org habe Rekursion abgeschaltet.

Ist dns.example.org ein bind9, verhàlt sich der Server wie folgt:

|$ dig @dns.example.org outsidecname.example.com
|
|; <<>> DiG 9.7.3 <<>> @dns.example.org outsidecname.example.com
|; (2 servers found)
|;; global options: +cmd
|;; Got answer:
|;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 20176
|;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
|;; WARNING: recursion requested but not available
|
|;; QUESTION SECTION:
|;outsidecname.example.com. IN A
|
|;; ANSWER SECTION:
|outsidecname.example.com. 86400 IN CNAME foo.example.net.
|
|;; Query time: 164 msec
|;; SERVER: <snip>#53(<snip>:53)
|;; WHEN: Fri Nov 11 15:18:24 2011
|;; MSG SIZE rcvd: 79
|
|$

Ist dns.example.org ein PowerDNS (IIRC Version 2.9.22), sieht die
Antwort so aus:
|$ dig @dns.example.org outsidecname.example.com
|
|; <<>> DiG 9.7.3 <<>> @dns.example.org outsidecname.example.com
|; (1 server found)
|;; global options: +cmd
|;; Got answer:
|;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 32301
|;; flags: qr rd; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
|;; WARNING: recursion requested but not available
|
|;; QUESTION SECTION:
|;outsidecname.example.com. IN A
|
|;; ANSWER SECTION:
|outsidecname.example.com. 86400 IN CNAME foo.example.net.
|
|;; Query time: 73 msec
|;; SERVER: <snip>#53(<snip>)
|;; WHEN: Fri Nov 11 15:20:33 2011
|;; MSG SIZE rcvd: 88

Man beachte besonders, dass der bind status: NOERROR zurückliefert;
der PowerDNS jedoch status: SERVFAIL sagt.

Nun geht im konkreten Fall der Recursor (hier: ein PowerDNS Recursor
3.3) her und reicht die vom Server erhaltene Antwort weitgehend 1:1 an
den aufrufenden Client weiter; dieser sieht im PowerDNS-Fall das
SERVFAIL und springt aus dem Fenster ("kann den Namen
outsidecname.example.com nicht auflösen").

Wer macht hier was falsch?

(1)
Der autoritative Server darf zum CNAME-Record nicht SERVFAIL liefern,
nur weil er den CNAME nicht zuende auflösen kann, sondern sollte/muss
NOERROR sagen: Die Anfrage konnte beantwortet werden.

(2)
Der Recursor müsste sich selbst darum bemühen, foo.example.net
aufzulösen, um CNAME und A zusammen mit einem NOERROR-Status an den
Client zurückzumelden

(3)
Der Client darf angesichts des SERVFAIL nicht aus dem Fenster
springen, sondern hàtte sehen müssen, dass trotz SERVFAIL eine Antwort
da ist und sich um eine nàhere Qualifikation der Antwort (z.B. durch
eine Frage nach foo.example.net) selbst bemühen müssen.


Was ist Sache? In welchem der vielen DNS-RFCs kann ich dazu nachlesen?

Grüße
Marc
Marc Haber | " Questions are the | Mailadresse im Header
Mannheim, Germany | Beginning of Wisdom " | http://www.zugschlus.de/
Nordisch by Nature | Lt. Worf, TNG "Rightful Heir" | Fon: *49 621 72739834
 

Lesen sie die antworten

#1 Lutz Donnerhacke
11/11/2011 - 18:30 | Warnen spam
* Marc Haber wrote:
(1)
Der autoritative Server darf zum CNAME-Record nicht SERVFAIL liefern,
nur weil er den CNAME nicht zuende auflösen kann, sondern sollte/muss
NOERROR sagen: Die Anfrage konnte beantwortet werden.



Richtig.

(2)
Der Recursor müsste sich selbst darum bemühen, foo.example.net
aufzulösen, um CNAME und A zusammen mit einem NOERROR-Status an den
Client zurückzumelden



Unrichtig. CNAME ist eine abschließende Antwort. Weiter Informationen sind
nützlich, aber nicht zwingend.

(3)
Der Client darf angesichts des SERVFAIL nicht aus dem Fenster
springen, sondern hàtte sehen müssen, dass trotz SERVFAIL eine Antwort
da ist und sich um eine nàhere Qualifikation der Antwort (z.B. durch
eine Frage nach foo.example.net) selbst bemühen müssen.



Falsch. SERVFAIL heißt, es hat nicht geklappt. Ende der Parserei.

Ähnliche fragen