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.


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

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

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,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.