Czy mogę używać CNAME z adresem IP? Dlaczego jeśli działa (czasami)?

13

Uważam, że najłatwiejszą odpowiedzią na pierwsze pytanie jest „Nie, masz do tego„ A ”, ale przypadkowo skonfigurowałem subdomenę za pomocą CNAME wskazującego adres IP i działało to na kilku komputerach w moim biurze. Zastanawiam się, jak to było możliwe?

Teraz, gdy sprawdzam to z domu, mam następujący błąd:

beast:~ viroos$ host somesubdomain.somedomain.com
Host somesubdomain.somedomain.com not found: 3(NXDOMAIN)

W 100% pracowałem w moim biurze (obecnie wygląda na to, że tak nie jest, ale sprawdzam to na innym komputerze). Dlatego nie jestem w 100%, jeśli zadziałało to ze względu na jakąś specjalną konfigurację sieci lub ponieważ przetestowałem to zaraz po dodaniu wpisu DNS.

Wiem, że ta historia brzmi trochę szalenie / niewiarygodnie, ale czy ktoś może mi pomóc rozwiązać tę zagadkę.

// edytuj: Dodaję wynik kopania

; <<>> DiG 9.6-ESV-R4-P3 <<>> somesubdomain.somedomain.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 60224
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 0

;; QUESTION SECTION:
;somesubdomain.somedomain.com.      IN  A

;; ANSWER SECTION:
somesubdomain.somedomain.com.   67  IN  CNAME   xxx.xxx.xxx.xx1.

;; AUTHORITY SECTION:
.           1800    IN  SOA a.root-servers.net. nstld.verisign-grs.com. 2012040901 1800 900 604800 86400

;; Query time: 72 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Tue Apr 10 00:11:01 2012
;; MSG SIZE  rcvd: 136
Maciek Sawicki
źródło
2
Czy na pewno to nie sprawiło, że maszyny biurowe działały? Wpisy z pamięci podręcznej? Autorytatywny serwer dla tej domeny w sieci lokalnej przesłaniający rozdzielczość publiczną? Hostuje pliki?
Shane Madden
Mówiąc dokładniej, działał na dwóch komputerach, oba są OSX. Nie działał na maszynie Ubuntu. Ponieważ działał na dwóch komputerach, zignorowałem problem „ubuntu” (to był błąd), ponieważ uważałem, że jest to problem z propagacją dns ​​lub cache dns. Sprawdziłem tylko konfigurację DNS na każdym kliencie i było tak samo (pozostawiło to pewną niepewność co do teorii propagacji DNS). Jednym z tych komputerów jest mój MacBook i obecnie używam go z domu, a witryna, którą skonfigurowałem, nie działa już na nim poprawnie: „Nie można znaleźć serwera somesubdomain.somedomain.com, ponieważ DNS wyszukiwanie nie powiodło się. ”
Maciek Sawicki
Co jest zwracane, gdy używasz zapytania o nazwę dig?
Shane Madden
Do pytania dodałem wynik kopania.
Maciek Sawicki
Podejrzewam, że komputery OSX używają do wyszukiwania czegoś innego niż DNS, takiego jak mDNS (co wcale nie jest tym samym).
Chris S

Odpowiedzi:

16

Dane w CNAMErekordzie muszą zawsze mieć inną nazwę DNS - taki jest sens CNAME.

Jak zwięźle ujęto w RFC 1034, dane w a CNAMEpowinny być:

            CNAME           a domain name.

Jeśli jednak chcesz wskazać adres IP, Twój bilet to:

            A               For the IN class, a 32 bit IP address

CNAMEzostał zaprojektowany i wdrożony jako alias DNS; nie ma koncepcji posiadania adresu IP w tym polu danych. Jako taki jest interpretowany jako alias do innej nazwy DNS, zgodnie z przeznaczeniem; w końcu adres IP pasuje do składni nazwy DNS.

Na przykład, powiedzmy, że twoje dane DNS to:

somesubdomain.somedomain.com.   60  IN  CNAME   192.0.2.1.

Rekursywny serwer DNS, o który pytasz, widzi, że rekord jest CNAME, i stwierdza, że ​​będziesz chciał rzeczywistych danych, które on zawiera. Nie znaleziono innego zapisu niż CNAMEten, więc nie ma odpowiedzi dla klienta.

Próbuje wyszukać rekord dla nazwy hosta 192w domenie 0.2.1. Nie ma nic buforowanego dla tej nazwy, więc pyta serwery root. Obsługują one żądania TLD, takie jak .comi .net, ale to żądanie jest żądaniem .1. Szybko odpowiadają, że takiego nie ma i to właśnie rekurser wysyła do ciebie.

Odpowiedź, którą widzisz, digto Twój rekurencyjny serwer nazw, który mówi: „cóż, nazwa, której szukałeś, wskazywała gdzieś indziej, a gdzieś nie istniało - spytaj serwer root, jeśli mi nie wierzysz”.


Tak więc wpisanie adresu IP do CNAMErekordu nigdy nie jest ważne i podejrzewam, że działające systemy działają poprawnie za pomocą innego mechanizmu, takiego jak plik hosts lub rozpoznawanie nazw lokalnych - sprawdź ich zachowanie podczas rozpoznawania nazw.

Shane Madden
źródło
2

cname to nazwa kanoniczna, która jest tylko aliasem innej nazwy, zwykle jest to rekord A lub inna nazwa itp. Jeśli skonfigurujesz cname, aby wskazywał adres IP, to jest to tylko alias tego adresu IP. Nie sądzę, aby Twój serwer DNS sprawdzał, czy cel jest zgodny z prawem, czy nie, ponieważ standardowy RFC tak naprawdę nie mówi, jaki jest format danych / sprawdzanie poprawności dla celu nazwy cname. To nie jest zwykłe użycie, ale jeśli działa dla ciebie, to działa. Myślę, że fakt, że czasami nie działa, powinien wystarczyć, abyś użył tego, co jest konwencjonalnie używane.

johnshen64
źródło
0

Możesz mieć:

example IN CNAME 1.2.3.4.

gdzie 1.2.3.4 to działający adres IP. Zwróć jednak uwagę na kropkę w CNAME. Fakt, że niektóre komputery w twoim biurze działają z tym, a inne nie prowadzi mnie do przekonania, że ​​te, które mają poddomenę ustawioną w pliku lmhostslub /etc/hosts.

adamo
źródło
1
Chociaż są to poprawne dane dla CNAME, jestem całkiem pewien, że nie spowoduje to dodatkowego wyszukiwania .. oprócz serwerów głównych, w przypadku nieistniejącej TLD o nazwie 4?
Shane Madden
Dodatkowe wyszukiwanie zostanie wykonane za pomocą DOWOLNEGO (np. host -a) Zapytania.
adamo
@ShaneMadden BTW, twój komentarz przypomniał mi o lokalnych TLD
adamo