[DNS] apex 도메인을 cname레코드에 사용하지 않도록 하자

작성일 : 2023년 06월 16일
  • #BIND
  • #DNS

서비스 운영을 위해 서버 주소를 도메인과 연결하는 건 필수다보니 개발하다보면 DNS 설정을 접하게 된다. 그런데 종종 cname 레코드에 apex 도메인을 사용하려는 사람이 있다. apex 도메인은 서브도메인을 제외한 개인이 소유한 도메인이다. 왜 apex 도메인을 cname 레코드에 설정하면 안되는지 알아보자.

cname 레코드에 apex 도메인을 쓰려는 경우

내가 접한 경우는 다음과 같았다.


  1. aws 사용 시 고정 IP가 없어 cname에 로드 밸런서 주소를 넣어 사용하려는 경우

  2. 상용 서비스(스토어, 블로그 등)를 개인 도메인으로 연결 하고 싶은 경우

  3. 기존 사용 중이던 도메인 주소를 다른 도메인 주소로 변경 하고 싶은 경우

cname 레코드에는 왜 apex 도메인을 사용할 수 없을까?

일단 RFC 규정 내 언급 되어있다.


  • RFC 1034 Section 3.6.2 Internet Standard

If a CNAME RR is present at a node, no other data should be present; this ensures that the data for a canonical name and its aliases cannot be different.

  • RFC 1912 Section 2.4 Informational

Don't use CNAMEs in combination with RRs which point to other names like MX, CNAME, PTR and NS.

  • RFC 2181 Section 10.1 Proposed Standard

An alias name (label of a CNAME record) may, if DNSSEC is in use, have SIG, NXT, and KEY RRs, but may have no other data.


CNAME은 별칭(Canonical Name)이며 사람들의 인식엔 소유 도메인(left hand)의 별칭이 대상 도메인(right hand)라고 생각하지만,

인식과 달리 소유 도메인이 대상 도메인의 별칭이다.


DNS의 CNAME은 운영상 소유 도메인의 모든 레코드를 대상 도메인의 DNS로 재작성 한다.

이 과정에서 apex 도메인이 가지고 있는 도메인 자체의 정보도 변경 되어 의도치 않은 결과를 가져 올 수 있다고 한다.

실제로 소유 도메인의 apex 도메인은 보통 도메인 자체의 정보도 가지고 있다 (soa, ns, 종종 mx)


  • 실제 설정 후 zone파일의 유효성 검증을 해보면 다음과 같이 나오게 된다.

 # named-checkzone zoda.land zoda.land.zone
dns_master_load: zoda.land.zone:13: zoda.land: CNAME and other data
zone zoda.land/IN: loading from master file zoda.land.zone failed: CNAME and other data
zone zoda.land/IN: not loaded due to errors.

이러한 규정을 완화 할 수 없는 이유

DNS 프로토콜 규약(인터넷 표준이므로)에 따르는 전세계 모든 DNS 구현이 동시에 변경 되긴 어렵다.

그래서 CNAME이 apex도메인에 사용되도록 DNS 방식을 느슨하게 동작하도록 변경하면

해당 DNS 서버에서 운영되는 도메인의 웹 혹은 이메일 서비스를 간헐적으로 사용 할 수 없게 될 수 있다.

대안

이에 대한 대안은 다음과 같다.


  1. 리디렉션

    • example.com 접속 시 www.example.com 등으로 리디렉션 하도록 설정한다.

    • 애플리케이션 서버 혹은 웹 서버 단에서 설정 가능하다.

    • 경우에 따라 리디렉션 용 서버만 따로 필요 할 경우가 있다.

  2. 목적지 도메인에 A레코드 추가

    • apex 도메인을 cname으로 설정하며 대상 도메인의 주소가 IP를 값으로 갖는 A레코드로 설정한다.

    • 장기적으로 권장되는 설정은 아니며 일부 DNS 제공 서비스에서만 설정 할 수 있다.

References

https://www.isc.org/blogs/cname-at-the-apex-of-a-zone/

https://datatracker.ietf.org/doc/html/rfc1034

https://datatracker.ietf.org/doc/html/rfc2181

https://datatracker.ietf.org/doc/html/rfc1912