하위 도메인에 CNAME을 사용해야합니까?


84

현재 다음 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

이것이 CNAME 레코드의 적절한 사용입니까? 온라인에서 보았지만 명확한 답변을 찾지 못했습니다. 일부 사람들은 CNAME 레코드가 잘못되었다고 주장하지만 (이 이유가 명확하지 않음) 다음 설정을 제안합니다.

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

이 중 어느 것이 더 나은 접근 방식입니까 (그리고 왜)?

참고 : 하위 도메인에는 자체 MX 레코드가 필요하지 않으므로 여기서는 문제가되지 않습니다.


1
나는 이것이 위키 답변이어야한다고 생각합니다. DNS는 너무 어려워 6 년이 지나도 받아도 괜찮습니까?
the0ther

1
@ the0ther 예, 오늘날에도 Jesper Mortensen 의 검증 된 답변 은 여전히 ​​유효합니다 (사물 이름 지정 또는 올바른 TTL 값 사용에 대해 논쟁 할 수는 있지만 CNAME 레코드 사용 문제와는 다른 점입니다) ). DNS는 30 개의 오래된 프로토콜이므로 CNAME 레코드와 같은 기본 사항은 시간이 지나도 변경되지 않습니다.
Patrick Mevzek 19

답변:


85

예, CNAME을 적절히 사용하는 것입니다. 내가 참여한 토론에서 논증은 다음과 같은 경향이 있습니다.

CNAME에 대하여 :

  • 다운 스트림 DNS 캐시는 2 개의 DNS 조회를 수행해야하기 때문에 (작은) 성능 저하가 있습니다. 하나는 CNAME에 대한 것이고 다른 하나는 CNAME이 가리키는 A- 레코드에 대한 것입니다.
  • "권한"이 적거나 호환성 문제가있는 CNAME에 대한 모호한 주장.

CNAME에 찬성하여 :

  • 하드웨어 (물리적 서버)와 서비스 사이를 깔끔하게 추상화합니다.
  • DNS 관리를 단순화하여 서버를 이동할 때 하나의 레코드 만 변경하면됩니다.

이 작업을 수행하기 위해 몇 가지 다른 방법시도한 후 개인적으로 좋아하는 스타일이 생겼습니다. 그것은:

  • 각 물리적 서버에 대해 하나의 A 레코드; 상당히 낮은 TTL (약 30 분); 서버에 인간에게 친숙한 이름을 부여합니다 .
  • 각 서비스 당 하나의 CNAME; 높은 TTL (약 24 시간); 위의 서버 이름을 가리 킵니다.
  • 위 규칙에 대한 단독 실행으로 도메인 루트는 웹 서버 / 웹로드 밸런서를 가리키는 A 레코드입니다. @는 A 레코드 여야합니다.

이 설정이 잘 작동한다는 것을 알았습니다. CNAME에 대한 추가 DNS 조회를 유지합니다. 서버가 충돌해도 여전히 공용 DNS를 상당히 빠르게 변경할 수 있습니다.

다음 은 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
명확하고 간결하게 작성된 CNAME에 대한 합리적인 의견에 감사드립니다.
Tyler

@Jesper Mortensen : 작은 예제로 약간의 답변을 업데이트 해 주시겠습니까? 특히 "위의 규칙에 대한 유일한 실행으로 도메인 루트는 A- 레코드"라고 말할 때 세 번째 요점을 이해하지 못했습니다. 첫 번째 지점에서 각 물리 계층 서버에 대해 하나의 A 레코드를 사용한다고 말했습니다. (BTW 링크가왔다)
마르코 Demaio

2
@Marco Demaio : "도메인 루트 A- 레코드"정보 : 두 번째 수준의 도메인 company.com은 영역 정점입니다. SOA 레코드가 필요합니다. 따라서는 A 레코드가 아닌 CNAME해야합니다 - 볼 serverfault.com/questions/170194/...
제스퍼 모텐슨

4
@는 A 레코드가 필요하지 않습니다. 오히려 CNAME은 금지되어 있습니다.
Michael Hampton

1
서버가 IPv6 주소를 지원하는 경우 CNAME이 특히 유용하다는 점을 추가하고 싶었습니다. 서버 당 최소 두 개의 항목 (각 A 및 AAAA 레코드)이 필요하므로 하위 도메인에 CNAME을 사용하는 것입니다. 이 경우 훨씬 간단합니다. TTL에 대한 Jesper의 권장 사항을 사용하거나 DNS 공급자가 자동 ​​처리를 잘 수행하면 실제 성능 저하가 발생하지 않습니다.
하라 빅

13

그렇습니다.

많은 사람들이 공유하는 나의 모범 사례는 각 서버 IP에 대해 1 A 레코드를 작성하는 것입니다. CNAMES를 다른 용도로 사용하십시오.

일반적인 예는 다음과 같습니다.

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

이 질문에서 그들은 메일이 여기서 문제가 아니라고 말했지만 MX 레코드를 어떻게 사용하겠습니까? 감사!
Marco Demaio 2013

1
MX 레코드는 서버 이름도 가리 킵니다. IN MX server1및 편의를 위해 또한 설정 추천 imap또는 popsmtpCNAME이는 아마도 또한 mail, 많은 전자 메일 프로그램이 추측. 올바른 SRV 레코드를 설정하는 것도 좋은 생각이지만 이는 비교적 기본적인 질문이므로 SRV 레코드는 간단한 구성에 다소 도움이 될 수 있습니다.
Chris S

1
빠른 설명, MX레코드는 CNAME이 아니어야합니다. serverfault.com/a/232243/2874를 참조하십시오 . 실제로 는 제대로 작동하지만 여전히 그렇게하지 않는 것이 좋습니다.
Jesper Mortensen

CNAME에서 MX 또는 SRV 레코드를 가리킬 경우 BIND는 영역로드를 거부합니다. 아마도 MX 레코드가 A 레코드를 가리켜 야한다는 것을 분명히했을 것입니다. 감사합니다.
Chris S

@ChrisS, 답변을 수정하고 MX 레코드가 CNAME 항목을 가리킬 수 없다는 사실을 분명히 언급하는 것은 어떻습니까?
Alexis Wilke
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.