[Domain] canonical name

Younghwan Cha·2023년 2월 23일
0

Network

목록 보기
3/9
post-thumbnail

최근 신규 서버와 관련하여 이런 저런 설정들을 진행하고 있다.
그 중 SSL 인증서 발급과 관련하여 다른 서버들을 참고하여 진행하고 있었는 데 이상한 점을 발견했다.

server1.server-01.helloServer.com
server-01.helloServer.com

참고하는 다른 서버들의 경우 위와 같이 도메인 두 가지를 모두 사용하고 있어 nslookup 명령어를 통해서 다시 확인해보았다.

> nslookup server1.server-01.helloServer.com
Server:		127.0.0.53
Address:	127.0.0.53#53

Non-authoritative answer:
Name:	server-01.helloServer.com
Address: 0.0.0.0

> nslookup server-01.helloServer.com      
Server:		127.0.0.53
Address:	127.0.0.53#53

Non-authoritative answer:
server-01.helloServer.com	canonical name = server1.server-01.helloServer.com
Name:	server1.server-01.helloServer.com
Address: 0.0.0.0

하지만 server1.server-02.helloServer.com 도메인을 발급 받은 신규 서버의 경우 아래와 같은 로그가 발생했다.

> nslookup server1.server-02.helloServer.com
Server:		127.0.0.53
Address:	127.0.0.53#53

Non-authoritative answer:
Name:	server1.server-02.helloServer.com
Address: 0.0.0.0

> nslookup server-02.helloServer.com      
Server:		127.0.0.53
Address:	127.0.0.53#53

Non-authoritative answer:
*** Can't find server-02.helloServer.com

역시나 발급을 받지 않은 server-02.helloServer.com 의 경우 도메인을 찾지 못 하였다.
여기서 의문점이 생겼다.
canonical name 이란 무엇일까?
round robin, nslookup 으로 ip 가 두개가 나오는 건 뭘까?
Non-authoritative answer 은 무엇일까?

이와 관련한 내용을 정리해보려 한다.


canonical name ( CNAME ) 이란 무엇일까?

생각해보면 신규 서버에 대해서 server1.server-02.helloServer.com 으로 도메인을 발급 받았기 때문에 server-02.helloServer.com 이라는 도메인은 해당 도메인을 발급받은 경우가 아니라면 당연히 접근이 불가능 할 것이다.
따라서 canonical name 를 보고는 linux 의 symbolic link 와 같은 경우가 아닐까 하는 생각이들었다.

찾아본 결과, CNAME( canonical name ) record 란, 도메인의 별명 또는 별칭을 저장한 record를 의미하며, 이는 DNS 서버에 저장되어있다.
다음 예시를 통해서 CNAME 이 동작하는 과정을 살펴보자.

DNS Server             CNAME record                A record
www.sample.example.com ---------------> example.com -----------> 1.2.3.4(ip)
namerecord typevalue
www.sample.example.comCNAME recordexample.com
example.comA record1.2.3.4(ip)

사용자가 www.sample.example.com 으로 요청을 보낼 경우, DNS server 에서 www.sample.example.com 과 관련된 DNS record 를 확인한다.
예시의 경우, CNAME record 를 참조하여 example.com 으로 이동하여 새로운 DNS lookup 을 진행한다.
이후 A record 를 통해 얻은 ip 를 사용자에게 반환하는 것이다.

그렇다면 CNAME record 는 언제 사용할까?
1.2.3.4 IP 주소를 사용하는 example.com 도메인이 존재한다고 생각해보자.
CNAME record 를 통해서 다음과 같이 사용할 수 있다.

                  CNAME record                A record
www.example.com ---------------> example.com -----------> 1.2.3.4(ip)
hr.example.com  ---------------> example.com -----------> 1.2.3.4(ip)

이와 같이 사용할 경우 다음과 같은 이점을 얻을 수 있다.

  • 하나의 IP 주소로 다양한 서비스를 제공 가능하다
  • IP 주소에 변경이 있더라도 마지막 단의 A record 만 수정하면 기존의 서비스를 문제없이 사용 할 수 있어 관리에 용이하다
  • hr.example.com 서버를 example.com 이 아닌 다른 서버로 이전할 경우, CNAME record 를 수정하거나 A record 로 변경해 IP 주소를 할당 해
    사용하는 등 관련 처리가 간단하다

[canonical name] https://www.techtarget.com/searchwindowsserver/definition/canonical-name


CNAME record vs A record

A record 의 경우 특정한 IP 주소를, CNAME 은 다른 CNAME 이나 A record 를 가리킨다.

# A record
A record -> IP address

# CNAME
CNAME -> A record -> IP address
CNAME -> CNAME -> A record -> IP address

[CNAME record vs A record] https://support.dnsimple.com/articles/differences-a-cname-records/


CNAME record vs alias record

CNAME record 와 비슷하게 alias record 라는 것이 존재한다.
CNAME record 와 다른 점은 alias record 의 경우 같은 subdomain 에 여러개의 hostname 을 등록 할 수 있으며, root domain 등록이 가능하다.
이를 통해서 alias record 와 A/AAAA record 를 사용한 round robin DNS 서비스가 가능하다.

[CNAME record vs alias record] https://www.cloudns.net/wiki/article/18/


CNAME record vs redirect

CNAME record 의 경우, 실제로 도메인을 변경하지 않는 반면 redirect 는 실제로 도메인을 변경한다.
이 경우, CNAME 은 뒤에 어떤 root domain 이 있는지 숨기는 masking 기능을 제공한다.

[CNAME record vs redirect] https://totaluptime.com/kb/whats-the-difference-between-a-cname-and-a-web-redirect/


Non-authoritative answer

추가적으로, nslookup 명령어 실행 시 나왔던 Non-authoritative answer 은 무엇인지 google.com 을 예시로 알아보자.

> nsloolup google.com

Server:		127.0.0.53
Address:	127.0.0.53#53

Non-authoritative answer:
Name:	google.com
Address: 142.250.207.14
Name:	google.com
Address: 2404:6800:4004:820::200e

이는 권한있는 서버, 즉 authoritative nameserver 에서 반환한 결과값이 아니기 때문에 결과값이 정확( 변경 사항이 아직 반영되지 않음) 하지 않을 수도 있다고 알려주는 것이다. 그렇다면 authoritative nameserver 에 요청을 보내려면 어떻게 해야할까?
먼저 조회하려는 nameserver 를 알아야한다.

> nslookup -type=ns google.com

Server:		127.0.0.53
Address:	127.0.0.53#53

Non-authoritative answer:
google.com	nameserver = ns1.google.com.
google.com	nameserver = ns3.google.com.
google.com	nameserver = ns2.google.com.
google.com	nameserver = ns4.google.com.

Authoritative answers can be found from:
ns1.google.com	internet address = 216.239.32.10
ns1.google.com	has AAAA address 2001:4860:4802:32::a
ns3.google.com	internet address = 216.239.36.10
ns3.google.com	has AAAA address 2001:4860:4802:36::a
ns2.google.com	internet address = 216.239.34.10
ns2.google.com	has AAAA address 2001:4860:4802:34::a
ns4.google.com	internet address = 216.239.38.10
ns4.google.com	has AAAA address 2001:4860:4802:38::a

반환된 결과값을 사용하여 다시 요청을 보내면 문제가 해결된 것을 볼 수 있다.

# nslookup  [domain]   [nameserver]
> nslookup google.com ns1.google.com

Server:		ns1.google.com
Address:	216.239.32.10#53

Name:	google.com
Address: 142.250.207.78
Name:	google.com
Address: 2404:6800:4005:820::200e

[Non-authoritative answer 란?] https://www.lesstif.com/system-admin/nslookup-non-authoritative-answer-129008899.html


명령어 정리

ip 주소 확인

hostname -I 
  • dig
  • nslookup
  • host
profile
개발 기록

1개의 댓글

comment-user-thumbnail
2024년 9월 4일

글 정말 잘 쓰시는것 같아요! 도움 많이 되었습니다 감사합니다 :)

답글 달기