IP 주소로 CNAME을 사용할 수 있습니까? 왜 작동 하는가 (때로는)? 가능했는지 궁금 하신가요? 이제 집에서 확인할

첫 번째 질문에 대한 가장 쉬운 대답은 “아니오, 당신은 이것을 위해”A “입니다”라고 생각하지만 실수로 CNAME을 사용하여 ip 주소를 가리키는 일부 하위 도메인을 설정했으며 내 사무실의 일부 컴퓨터에서 작동했습니다. 어떻게 가능했는지 궁금 하신가요?

이제 집에서 확인할 때 다음과 같은 오류가 있습니다.

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

나는 사무실에서 일하는 데 사용 된 100 %입니다 (현재는 그렇지 않은 것처럼 보이지만 다른 컴퓨터에서 확인하고 있습니다). 따라서 특별한 네트워크 설정으로 인해 또는 DNS 항목을 추가 한 직후 테스트했기 때문에 100 %가 아닙니다.

나는이 이야기가 약간 미치거나 놀랍게 들린다는 것을 알고 있지만 누군가이 퍼즐을 풀도록 도와 줄 수있다.

// 편집 : 발굴 출력을 추가하고 있습니다

; <<>> 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



답변

CNAME레코드 의 데이터 는 항상 다른 DNS 이름이어야합니다 CNAME.

RFC 1034에서 간결하게 말하면, 데이터는 다음과 CNAME같아야합니다.

            CNAME           a domain name.

IP 주소를 가리키고 있다면 티켓은 다음과 같습니다.

            A               For the IN class, a 32 bit IP address

CNAMEDNS 별칭으로 설계 및 구현되었습니다. 해당 데이터 필드에 IP 주소가 있다는 개념은 없습니다. 따라서 설계된대로 다른 DNS 이름의 별칭으로 해석됩니다. 결국 IP 주소는 DNS 이름의 구문에 맞습니다.

예를 들어 DNS 데이터가 다음과 같다고 가정 해 보겠습니다.

somesubdomain.somedomain.com.   60  IN  CNAME   192.0.2.1.

쿼리하는 재귀 DNS 서버는 레코드가이며 레코드에 CNAME포함 된 실제 데이터를 원한다는 것을 알 수 있습니다. 이외의 기록 CNAME이 없으므로 고객에게 제공 할 답변이 없습니다.

192도메인 내에서 호스트 이름에 대한 레코드를 쿼리하려고 시도 합니다 0.2.1. 해당 이름에 대해 캐시 된 것이 없으므로 루트 서버에 요청합니다. .com그리고와 같은 TLD에 대한 요청을 처리 .net하지만이 요청은에 대한 요청입니다 .1. 그들은 그러한 것이 없다고 신속하게 응답하며, 이것이 리 커서가 당신에게 보내는 것입니다.

당신이보고있는 응답 dig은 재귀 이름 서버입니다. “글쎄, 당신이 찾은 이름이 다른 곳을 가리키고 있고 어딘가에 존재하지 않았다고 생각합니다. 당신이 나를 믿지 않으면 루트 서버에 문의하십시오.”


따라서 IP 주소를 CNAME레코드 에 넣는 것은 결코 유효하지 않으며 작동하는 시스템이 호스트 파일 또는 로컬 이름 확인과 같은 다른 메커니즘을 통해 올바르게 작동한다고 생각합니다. 이름 확인 동작을 조사하십시오.


답변

cname은 정식 이름으로, 다른 이름의 별칭 일 뿐이며 일반적으로 A 레코드 또는 다른 cname 등입니다. IP를 가리 키도록 cname을 설정 한 경우 해당 IP의 별칭 일뿐입니다. 표준 RFC가 실제로 cname의 대상에 대한 데이터 형식 / 유효성이 무엇인지 말하지 않기 때문에 DNS 서버가 대상이 적법한 지 여부를 확인하지 않는다고 생각합니다. 이것은 일반적인 사용법은 아니지만 작동하는 경우 작동합니다. 때때로 작동하지 않는다는 사실은 일반적으로 사용되는 것을 사용하기에 충분해야한다고 생각합니다.


답변

당신은 할 수 있습니다 :

example IN CNAME 1.2.3.4.

여기서 1.2.3.4는 작동중인 IP 주소입니다. 그러나 CNAME에서 마지막 점을 주목하십시오. 사무실의 일부 컴퓨터 가이 작업을 수행하는 반면 다른 컴퓨터는 하위 도메인이 설정된 컴퓨터가 lmhosts또는 /etc/hosts파일 에 있다고 생각하지 않습니다 .


답변