최근 신규 서버와 관련하여 이런 저런 설정들을 진행하고 있다.
그 중 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 은 무엇일까?
이와 관련한 내용을 정리해보려 한다.
생각해보면 신규 서버에 대해서 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)
name | record type | value |
---|---|---|
www.sample.example.com | CNAME record | example.com |
example.com | A record | 1.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)
이와 같이 사용할 경우 다음과 같은 이점을 얻을 수 있다.
hr.example.com
서버를 example.com
이 아닌 다른 서버로 이전할 경우, CNAME record 를 수정하거나 A record 로 변경해 IP 주소를 할당 해[canonical name] https://www.techtarget.com/searchwindowsserver/definition/canonical-name
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 와 비슷하게 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 의 경우, 실제로 도메인을 변경하지 않는 반면 redirect 는 실제로 도메인을 변경한다.
이 경우, CNAME 은 뒤에 어떤 root domain 이 있는지 숨기는 masking 기능을 제공한다.
[CNAME record vs redirect] https://totaluptime.com/kb/whats-the-difference-between-a-cname-and-a-web-redirect/
추가적으로, 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
글 정말 잘 쓰시는것 같아요! 도움 많이 되었습니다 감사합니다 :)