To jest kanoniczne pytanie o CNAME na wierzchołkach (lub korzeniach) stref
Stosunkowo powszechnie wiadomo, że CNAME
zapisy na szczycie domeny są praktyką tabu.
Przykład:
example.com. IN CNAME ithurts.example.net.
W najlepszym przypadku oprogramowanie serwera nazw może odmówić załadowania konfiguracji, aw najgorszym przypadku może zaakceptować tę konfigurację i unieważnić konfigurację na przykład.com.
Ostatnio miałem firmę hostingową, która przekazała instrukcje jednostce biznesowej, która była nam potrzebna do CNAME wierzchołka naszej domeny do nowego rekordu. Wiedząc, że byłaby to konfiguracja samobójcza po karmieniu BIND, poradziłam im, że nie będziemy w stanie się zastosować i że jest to ogólnie porada prycza. Firma zajmująca się hostingiem przyjęła stanowisko, że nie jest to absolutnie zabronione przez standardowe definiowanie RFC i że ich oprogramowanie to obsługuje. Gdybyśmy nie mogli CNAME wierzchołka, ich radą było, aby w ogóle nie mieć rekordu wierzchołka i nie zapewniliby serwera przekierowującego. ...Co?
Większość z nas wie, że RFC1912 nalega na to A CNAME record is not allowed to coexist with any other data.
, ale bądźmy szczerzy tutaj, że RFC ma jedynie charakter informacyjny. Najbliższe znane mi słowo, które zabrania praktyki, pochodzi z RFC1034 :
Jeśli CNAME RR jest obecny w węźle, żadne inne dane nie powinny być obecne; zapewnia to, że dane dla nazwy kanonicznej i jej aliasów nie mogą się różnić.
Niestety, jestem w branży wystarczająco długo, aby wiedzieć, że „nie powinien” to nie to samo, co „nie wolno”, i to wystarczy, aby większość projektantów oprogramowania mogła się zawiesić. Wiedząc, że nic poza zwięzłym linkiem do slamowego wsadu byłoby stratą mojego czasu, w końcu pozwoliłem firmie uniknąć zbesztania za zalecanie konfiguracji, które mogłyby zepsuć powszechnie używane oprogramowanie bez odpowiedniego ujawnienia.
To prowadzi nas do pytań i odpowiedzi. Tym razem chciałbym, abyśmy naprawdę spytali o szaleństwo wierzchołków CNAME, a nie omijali tego problemu, jak to zwykle bywa, gdy ktoś pisze na ten temat. RFC1912 jest poza limitem, podobnie jak inne informacyjne RFC obowiązujące tutaj, o których nie myślałem. Zamknijmy to dziecko.
źródło
Odpowiedzi:
CNAME
rekordy zostały pierwotnie utworzone, aby umożliwić aliasy wielu nazw zapewniających ten sam zasób do pojedynczej „nazwy kanonicznej” dla zasobu. Wraz z pojawieniem się wirtualnego hostingu opartego na nazwach stało się powszechne stosowanie ich jako ogólnej formy aliasingu adresów IP. Niestety większość osób pochodzących z hostingu oczekuje, żeCNAME
rekordy wskażą równoważność w systemie DNS , co nigdy nie było zamierzone. Wierzchołek zawiera typy rekordów, które najwyraźniej nie są używane do identyfikacji kanonicznego zasobu hosta (NS
,SOA
), którego nie można aliasować bez złamania standardu na poziomie podstawowym. (szczególnie w odniesieniu do cięć stref )Niestety oryginalny standard DNS został napisany, zanim organy zarządzające standardami zdały sobie sprawę z tego, że wyraźne określenie było konieczne do zdefiniowania spójnego zachowania ( RFC 2119 ). Konieczne było stworzenie RFC 2181 w celu wyjaśnienia kilku przypadków narożnych z powodu niejasnego sformułowania, a zaktualizowany verbage wyjaśnia, że
CNAME
nie można użyć aliasingu wierzchołka bez złamania standardu.Potwierdza to, że
SOA
iNS
zapisy są obowiązkowe, ale nie mówi nic oA
lub innych rodzajów występujących tutaj. To może wydawać się zbyteczne, że zacytuję to, ale za chwilę stanie się ono bardziej odpowiednie.RFC 1034 był nieco niejasny w kwestii problemów, które mogą pojawić się, gdy
CNAME
istnieje obok innych typów rekordów. RFC 2181 usuwa niejasności i wyraźnie określa typy rekordów, które mogą istnieć obok nich:„nazwa aliasu” w tym kontekście odnosi się do lewej strony
CNAME
rekordu. Wypunktowanie sprawia, że wyraźnie jasne, żeSOA
,NS
iA
rekordy nie mogą być postrzegane w węźle, w którymCNAME
pojawia się również. Kiedy połączymy to z sekcją 6.1, niemożliwe jestCNAME
istnienie na szczycie, ponieważ musiałby żyć obok obowiązkowychSOA
iNS
zapisów.(Wydaje się, że to robi robotę, ale jeśli ktoś ma krótszą ścieżkę do udowodnienia, prosimy o złamanie tego.)
Aktualizacja:
Wydaje się, że ostatnie zamieszanie wynika z niedawnej decyzji Cloudflare o zezwoleniu na zdefiniowanie nielegalnego rekordu CNAME na szczycie domen, dla których będą one syntetyzować rekordy A. „Zgodny z RFC”, zgodnie z opisem w powiązanym artykule, odnosi się do faktu, że rekordy zsyntetyzowane przez Cloudflare będą dobrze działać z DNS. Nie zmienia to faktu, że jest to zachowanie całkowicie niestandardowe.
Moim zdaniem jest to szkoda dla większej społeczności DNS: w rzeczywistości nie jest to rekord CNAME i wprowadza w błąd ludzi, którzy wierzą, że inne oprogramowanie nie jest w stanie na to pozwolić. (jak pokazuje moje pytanie)
źródło
SOA
+NS
rekordy, 2.CNAME
rekordy nie mogą współistnieć z innymi danymi)CNAME
naprawdę oznacza rekord, ponieważ jest to prawdopodobnie najbardziej niezrozumiany typ rekordu. Chociaż jest to coś więcej niż punkt, myślę, że to FAQ jest bezpośrednim wynikiem wielu (większości?) Nie posiadających właściwego zrozumieniaCNAME
.SRV
, że zamiast tego powinny były zostać wdrożone implementacje HTTP , co sprawiłoby, że nie byłoby to problemem. Problem nie ogranicza się do tego, o czym tu mowa;CNAME
jest, wbrew powszechnemu przekonaniu, niezbyt dobrym dopasowaniem do potrzeb. W końcu, ponieważCNAME
nie działa tak, jak ludzie się spodziewają (!) I nie można go przeprojektować z mocą wsteczną, a ponieważ implementacje HTTP nie korzystająSRV
, wydaje się bardziej prawdopodobne, że funkcjonalność w stylu „aliasu” staje się bardziej rozpowszechniona w celu dostosowania do HTTP (specyficzne dla typu rekordu aliasing zaimplementowany za scenami, a nie jako widoczny typ nagrania)Konsorcjum Systemów Internetowych opublikowało niedawno na szczycie strefy napis na CNAME , dlaczego istnieje to ograniczenie, oraz szereg alternatyw. Niestety nie zmieni się to w najbliższym czasie:
Ale jest nadzieja:
źródło
Jeśli przekierowujesz całą strefę, powinieneś użyć DNAME. Zgodnie z RFC 6672 ,
źródło