Warum kann ich keinen CNAME für eine ganze Domain definieren?

Gerade bei selfHOST immer mal wieder eine gern gehörte Frage. Mein liebste Antwort ist die von Dan J. Bernstein:

Remember the wise words of Inigo Montoya: „You keep using CNAME records. I do not think they mean what you think they mean.“ (Quelle)

Leider reagieren die meisten Leute etwas … ähem, verärgert, wenn man sich in seiner Antwort auf dieses Zitat beschränkt. 🙂

Nun gibt es eine ganze Reihe von Gründen, warum man CNAMEs am Besten gar nicht einsetzen sollte (zum Beispiel, dass sie weder von NS- noch von MX-Records referenziert werden dürfen, was aber allzu leicht passiert). Was bei selfHOST relativ häufig vorkommt, ist: Ein Kunde hat komplexe DNS-Einstellungen auf domain1.tld und möchte nun, dass unter domain2.tld das komplette Set an DNS-Einträgen genauso abgebildet wird. Er möchte von daher per CNAME sagen: domain2.tld soll einfach alle Einträge von domain1.tld erben. (Böse Zungen behaupten, dass dahinter vor allem der Wunsch steht, den DynDNS-Account einer Domain einfach noch auf einer zweiten mitbenutzen zu können, ohne dafür auch einen zweiten DynDNS-Account zu bezahlen.) Hier nun also der offizielle FAQ-Eintrag:

Frage: Warum kann ich keinen CNAME für eine ganze Domain definieren?

Antwort: Weil es gegen RFC 1912 verstößt. Hier steht’s:

2.4 CNAME recordsA CNAME record is not allowed to coexist with any other data.  In
other words, if suzy.podunk.xx is an alias for sue.podunk.xx, you
can't also have an MX record for suzy.podunk.edu, or an A record, or
even a TXT record.  Especially do not try to combine CNAMEs and NS
records like this!:

podunk.xx.      IN      NS      ns1
IN      NS      ns2
IN      CNAME   mary
mary            IN      A       1.2.3.4

This is often attempted by inexperienced administrators as an obvious
way to allow your domain name to also be a host.  However, DNS
servers like BIND will see the CNAME and refuse to add any other
resources for that name.  Since no other records are allowed to
coexist with a CNAME, the NS entries are ignored.  Therefore all the
hosts in the podunk.xx domain are ignored as well!

So!