CNAME Resource Record
Ein CNAME Resource Record (CNAME RR) ist im Domain Name System (DNS) dazu vorgesehen, einer Domäne einen weiteren Namen zuzuordnen. Die Abkürzung „CNAME“ steht für canonical name (engl. canonical = anerkannt) und bezeichnet daher den primären, quasi echten Namen.
Im einfachsten Fall verweist der von einem CNAME Resource Record definierte weitere Domänenname („Alias“) auf den Domänennamensteil in einem A Resource Record (oder einem AAAA Resource Record). Dieser Resource Record wiederum verbindet dann den ursprünglichen Domänennamen mit einer IP-Adresse. Beim Wechsel einer IP-Adresse muss folglich nur noch dieser Resource Record geändert werden und alle per CNAME Resource Record definierten Aliase verweisen ebenfalls auf die neue IP-Adresse. Im Gegenzug ist die Namensauflösung über den CNAME Resource Record aufwendiger.
CNAME Resource Records sind in den Internetstandards RFC 1034 und RFC 1035 von 1987 definiert und im RFC 2181 von 1997 nochmals klargestellt, weil diesbezügliche Leistungsanforderungen der Standards ignoriert wurden.
Der Begriff des canonical name wurde vielfach als Einschränkung interpretiert, einen letztlich offiziellen Namen festlegen zu müssen. Daraus wurde wiederum abgeleitet, weitere Namen dürften nur solche von CNAME Resource Records sein, auf die andere CNAME Resource Records aber nicht verweisen dürften. Tatsächlich ist aber gemeint, dass es kein Name eines anderen Resource Records sein muss, sondern dass der Name auch nur irgendwo außerhalb vom Domain Name System anerkannt sein kann.[1]
Ein NS-, MX-, PTR- oder SRV Resource Record darf nicht auf einen CNAME Resource Record verweisen. Umgekehrt darf ein PTR Resource Record aber durchaus nur über einen CNAME Resource Record zugänglich sein. Der Name eines CNAME Resource Records darf nicht als Name anderer Resource Records verwendet werden, da er stellvertretend für alle Resource Records des Ziels steht. Einzige Ausnahme hiervon bilden die Domain Name System Security Extensions.
Syntax
<Name> IN CNAME <Ziel>
Beispiele
Im folgenden einfachen Beispiel wird mit einem A-Record sowie einem AAAA-Record zuerst ein Hostname mit einer IP-Adresse angelegt und anschließend mit einem CNAME RR auf diesen CNAME verwiesen (der Begriff „CNAME“ bezieht sich verwirrenderweise auf die rechte Seite des CNAME RR, er bezeichnet den eigentlichen bzw. ursprünglichen Namen der Domäne und bezeichnet nicht den linken Teil, also den „Alias“; häufig wird jedoch fälschlicherweise der Alias als „CNAME“ bezeichnet):
www.example.com. IN A 192.0.2.42 IN AAAA 2001:db8::42 www.example.net. IN CNAME www.example.com.
Mehrere CNAME Resource Records können auf dasselbe Ziel verweisen, aber auch verschachtelt werden:
www.example.com. IN A 192.0.2.42 IN AAAA 2001:db8::42 www.example.org. IN A 192.0.2.42 IN AAAA 2001:db8::42 www.example.net. IN CNAME www.example.com. en.example.net. IN CNAME www.example.net. de.example.net. IN CNAME www.example.net.
Namensauflösung
Wenn ein Nameserver eine Anfrage empfängt, für die ein CNAME RR existiert, so löst er möglichst bis zur IP-Adresse auf. Im Beispiel erkennt der Nameserver, dass www.example.com noch nicht die gewünschte Antwort auf die Anfrage zu www.example.net sein kann.
Bei der Antwort wird neben der IP-Adresse auch der kanonische Name übergeben. Der Client kann so erkennen, dass sich seine ursprüngliche Anfrage auf einen Alias bezogen hatte.
Ein nslookup unter Windows würde folgende Antwort liefern:
C:\>nslookup www.example.net Server: router.box Address: fd00::2666:12ff:feaf:581f
Nicht autorisierende Antwort: Name: www.example.com Addresses: 2001:db8::42 192.0.2.42 Aliases: www.example.net
Unter Unix-Systemen wäre die Ausgabe des Programms host folgende:
$ host www.example.net www.example.net is an alias for www.example.com. www.example.com has address 192.0.2.42 www.example.com has IPv6 address 2001:db8::42
Es kann passieren, dass ein Nameserver nicht bis zur IP-Adresse auflösen kann. In diesem Fall gibt er nur den CNAME zurück. Der Client muss dann versuchen, diesen Namen auf anderem Weg weiter aufzulösen.
Einschränkungen
Für einen Alias in einem CNAME-Record dürfen keine weiteren RR (A-Record, AAAA-Record, MX-Record etc.) gesetzt werden.
If a CNAME RR is present at a node, no other data should be present (...)[2]
CNAME-Records dürfen daher nur bei Subdomains eingesetzt werden, da eine Hauptdomain immer einen SOA-Record, ein bis fünf NS-Records und meist einen MX-Record hat (da E-Mail-Adressen in aller Regel keine Subdomains enthalten). So kann es passieren, dass Nutzer eines solchen falschen CNAME-Records keine E-Mails von bestimmten MTA-Servern empfangen können.
Unzulässig:
example.com. CNAME somedomain.example. example.com. A 192.0.2.42
Zulässig hingegen, da unterschiedliche Namen:
example.com. A 192.0.2.42 www.example.com. CNAME example.com.
Einzelnachweise
- RFC 2181 – Clarifications to the DNS Specification. Internet Engineering Task Force. Juli 1997. Abgerufen am 10. Juli 2011.
- RFC 1034 – DOMAIN NAMES - CONCEPTS AND FACILITIES. Internet Engineering Task Force. Juli 1997. Abgerufen am 7. Mai 2012.