Czy CNAME należy stosować w przypadku poddomen?

84

Zarządzam wieloma stronami internetowymi, które obecnie mają następującą konfigurację DNS:

example.com      - A Record - Production Server IP
test.example.com - A Record - Test Server IP
www.example.com  - CNAME    - example.com
beta.example.com - CNAME    - test.example.com
dev.example.com  - CNAME    - test.example.com

Czy jest to właściwe wykorzystanie rekordów CNAME? Szukałem w Internecie i nie znalazłem jasnej odpowiedzi. Niektóre osoby twierdzą, że rekordy CNAME są złe (nie są jednak jasne, dlaczego tak się dzieje) i proponują następującą konfigurację:

example.com      - A Record - Production Server IP
test.example.com - A Record - Test Server IP
www.example.com  - A Record - Production Server IP
beta.example.com - A Record - Test Server IP
dev.example.com  - A Record - Test Server IP

Który z nich jest lepszy (i dlaczego)?

Uwaga: poddomeny nie wymagają własnych rekordów MX, więc nie stanowi to problemu.

Joseph Sturtevant
źródło
1
czuję, że powinna to być odpowiedź wiki. DNS jest tak trudny do prawidłowego ustalenia i czy ta zaakceptowana odpowiedź jest nadal dobra 6 lat później?
thetherther
1
@ the0ther Tak, nawet dzisiaj potwierdzona odpowiedź Jespera Mortensena jest nadal aktualna (nawet jeśli można się spierać o nazewnictwo rzeczy lub poprawne wartości TTL do użycia, ale są to odrębne punkty od kwestii używania rekordów CNAME, czy nie ). DNS to 30-letni protokół, więc podstawowe rzeczy, takie jak rekordy CNAME, nie zmieniają się z czasem.
Patrick Mevzek,

Odpowiedzi:

85

Tak, to właściwe użycie CNAME. W dyskusjach, w których uczestniczyłem, argumenty wyglądają następująco:

Przeciw CNAME:

  • Występuje (niewielka) utrata wydajności, ponieważ pobliskie pamięci podręczne DNS muszą wykonać 2 wyszukiwania DNS, jeden dla CNAME i jeden dla rekordu A, na który wskazuje CNAME.
  • Niejasne, fałszywe argumenty o tym, że CNAME mają mniej „autorytetów” lub problemów ze zgodnością.

Na korzyść CNAME:

  • Zapewniają czystą abstrakcję między sprzętem (serwerami fizycznymi) a usługami.
  • Upraszczają zarządzanie DNS - gdy serwer się porusza, wystarczy zmienić tylko jeden rekord.

Po wypróbowaniu kilku różnych sposobów, aby to zrobić, mam teraz swój ulubiony styl. To jest:

  • Jeden rekord A dla każdego serwera fizycznego; z dość niskim TTL (może 30 minut); nadając serwerowi przyjazną dla człowieka nazwę .
  • Jeden CNAME dla każdej usługi; z wysokim TTL (być może 24 godziny); wskazując powyższe nazwy serwerów.
  • Jako jedyny wyjątek od powyższych zasad, katalogiem głównym domeny jest rekord A, wskazujący na moduł równoważenia obciążenia serwera WWW / sieci. (@ Musi być rekordem A.)

Uważam, że ta konfiguracja działa dobrze. Utrzymuje dodatkowe wyszukiwania DNS dla CNAMES w dół; a jeśli serwer ulegnie awarii, nadal mogę dość szybko zmienić publiczny DNS.

Oto (improwizowany) przykład w składni BIND:

;name     ttl   class rr     value 
server01  30m   IN    A      192.168.0.3
server02  30m   IN    A      192.168.0.4

webmail   24h   IN    CNAME  server01
extranet  24h   IN    CNAME  server02
ftp       24h   IN    CNAME  server02
Jesper Mortensen
źródło
1
Dziękuję, wreszcie rozsądna opinia na temat CNAME, która została jasno i zwięźle przedstawiona.
Tyler,
@Jesper Mortensen: czy mógłbyś zaktualizować nieco odpowiedź małym przykładem, szczególnie nie zrozumiałem twojego trzeciego punktu, kiedy powiedziałeś „Jako jedyny wyjątek od powyższych zasad, katalog główny domeny jest rekordem A”, już powiedział w pierwszym punkcie, że używasz jednego rekordu A dla każdego serwera warstwy fizycznej. (BTW, linki zniknęły)
Marco Demaio
2
@Marco Demaio: O „katalogu głównym A-Record”: Domeną drugiego poziomu company.comjest wierzchołek strefy. Potrzebuje rekordu SOA. Zatem musi to być rekord A, a nie CNAME - patrz serverfault.com/questions/170194/…
Jesper Mortensen
4
@ nie musi mieć rekordu A; raczej CNAME jest zabronione.
Michael Hampton
1
Chciałem tylko dodać, że CNAME są szczególnie przydatne, jeśli twój serwer (y) również obsługują adresy IPv6, ponieważ będziesz potrzebował co najmniej dwóch wpisów na serwer (po jednym rekordie A i AAAA), więc używając CNAME dla subdomen w tym przypadku jest o wiele prostsze. Jeśli zastosujesz zalecenia Jespera dotyczące TTL (lub twój dostawca DNS ma dobrą automatyczną obsługę), nie powinno być żadnej rzeczywistej obniżki wydajności.
Haravikk,
13

Tak, jest to właściwe.

Moimi najlepszymi praktykami, którymi dzieli się wiele osób, jest utworzenie rekordu 1 A dla każdego adresu IP serwera; i używaj CNAMES do wszystkiego innego.

Typowym przykładem może być:

server1.example.com.      IN A      192.168.0.1
server2.example.com.      IN A      192.168.5.2
www                       IN CNAME  server1
ftp                       IN CNAME  server1
beta                      IN CNAME  server2
Chris S.
źródło
Wiem, że w tym pytaniu powiedzieli, że poczta nie jest tutaj problemem, ale załóżmy, że używasz również poczty, jak byś poszedł z rekordami MX? Dzięki!
Marco Demaio
1
Rekord MX wskazywałby również na nazwę serwera. IN MX server1i dla wygody Polecam również utworzenie imaplub popi smtprekordy CNAME, ewentualnie także mail, jak wiele programów e-mail, że to. Ustawienie prawidłowych rekordów SRV jest również dobrym pomysłem, ale ponieważ jest to stosunkowo podstawowe pytanie, rekordy SRV mogą być nieco za proste w przypadku prostej konfiguracji.
Chris S
1
Szybki komentarz, MXrekordy nie mogą być nazwami CNAME, patrz serverfault.com/a/232243/2874 Prawdopodobnie w praktyce działa dobrze - ale lepiej tego nie robić.
Jesper Mortensen
BIND odmówi załadowania strefy, jeśli wskażesz rekord MX lub SRV na CNAME ... Prawdopodobnie powinienem był wyjaśnić, że rekord MX musi wskazywać na rekord A. Dziękuję Ci.
Chris S
@ChrisS, co powiesz na edycję odpowiedzi i wyraźne wspomnienie, że rekord MX nie może wskazywać na wpis CNAME?
Alexis Wilke,