CS/네트워킹

DNS 레코드

TTOII 2023. 9. 16. 14:58
728x90

AWS Route53을 이용해 Application LoadBalancer에 도메인을 연결하는 과정에서 DNS 레코드에 대한 이해가 부족하다고 생각해 공부하며 기록한 글입니다.
 

나는 현재 Route53에 shinsohui.com 이라는 호스팅 영역을 가지고 있다.
Application LB에 연결된 레코드 명은 poc.shinsohui.com이며 이 레코드의 유형은 A이다. 
이 외에도 A 레코드, NS 레코드, SOA 레코드가 있는데 각 레코드 유형별로 어떤 의미를 가지고 있는지 알아보겠다.
 

DNS 레코드 종류

A 도메인 주소가 가지는 IP(1:1)
CNAME 별칭을 부여한 특정 도메인 주소
MX Mail Exchanger, 메일을 주고 받기 위한 서비스 레코드 
TXT 일반적인 텍스트 내용을 기록 
SOA 도메인의 시작점 
PTR IP주소에 대한 호스트명
AAAA 호스트에 관련된 모든 레코드들의 정보, A 레코드의 IPv6 버전
NS 영역을 풀이할 수 있는 DNS 서버 목록 

 
 

A 레코드

A 레코드란 도메인의 주소와 서버의 IP 주소를 직접 매핑시키는 방법이다.
 
만약 shinsohui.com 이라는 도메인이 있고 해당 도메인의 IP 주소가 10.0.10.10 이라면 A 레코드는 shinohui.com은 10.0.10.10에 연결되어 있다고 말하는 것이다.
A 레코드는 반드시 도메인 : IP 간 1:1 매칭이 될 필요는 없다.
 
 

CNAME

CNAME 레코드는 도메인 별명 레코드라고 부르며 도메인 주소를 또 다른 도메인 주소로 매핑시키는 형태의 레코드 타입이다.
CNAME 레코드는 무조건 다른 도메인 주소를 등록해야 하며 A 레코드처럼 직접 IP 주소를 등록해서는 안된다.
 
shinsohui.com 도메인이 있다고 했을 때, 이 도메인의 CNAME을 sohui.com로 정해 브라우저에 sohui.com을 입력하면 shinsohui.com으로 접근되는 형식이다.
그리고 shinsohui.com에 매핑된 IP 주소 10.0.10.10을 얻어 최종적으로 서비스에 접속하게 되는 방식이다.
 
 
A record VS CNAME

  A 레코드 CNAME
장점 한번의 요청으로 찾아갈 서버의 IP 주소를 한번에 알 수 있다는 점이다. IP 주소가 자주 변경되는 환경에서 유연하게 대응할 수 있다는 점이다.
여러개의 서브 도메인을 메인 도메인으로 매핑시키는 CNAME 레코드로 저장하고 메인 도메인을 IP 주소로 매핑시켜 도메인 인프라를 구성해놨다면 서버의 IP 주소가 바뀌어도 메인 도메인의 IP 주소만 변경시키면 되어 나머지 서브 도메인에는 작업이 필요하지 않다.
단점 IP 주소가 자주 바뀌는 환경에서 여러개의 도메인에 하나의 IP를 맵핑해놓은 상태에서 일일히 모든 도메인에 매핑된 IP를 바꿔줘야 하는 번거로움이 있다. 맵핑을 중복으로 하여 실제 IP 주소를 얻기 위해서는 여러번의 DNS 요청을 해야한다는 점이다.
DNS 정보를 해석하는 데 성능저하가 유발될 수 있다.

 
 

MX (Mail Exchanger)

MX 레코드는 메일 서버 레코드이며, 해당 도메인과 연동되어있는 메일 서버를 확인하는데 사용하는 레코드이다.
즉, MX 레코드가 해당 도메인에 설정되어 있어야, 해당 도메인을 이메일 주소로 사용할 수 있다는 뜻이다.
 

메일을 받을 서버(MX 레코드)는 A 레코드가 지정되어 있어야 한다.
 

MX 레코드 예시

example.com 레코드 유형 우선 순위 TTL
@ MX 10 mailhost1.example.com 45000
@ MX 20 mailhost2.example.com 45000

MX 레코드의 도메인 앞에 있는 '우선 순위' 번호는 기본 설정을 내며 더 낮은 '우선 순위' 값이 선호된다.
따라서 서버는 항상 mailhost1을 먼저 시도하고 메시지 전송이 실패한다면 서버는 기본적으로 mailhost2로 설정된다.
이메일 서비스는 두 서버의 우선 순위가 같고 동일한 양의 메일을 수신하도록 이 MX 레코드를 구성할 수도 있다.
 

example.com 레코드 유형 우선 순위 TTL
@ MX 10 mailhost1.example.com 45000
@ MX 10 mailhost2.example.com 45000

이렇게 구성하면 이메일 공급자가 두 서버 간에 부하를 균등하게 분산시킬 수 있다.
 

 sohuishin@sohuishinui-MacBookAir  ~   sohui ±  nslookup
> set q=mx
> naver.com
Server:		168.126.63.1
Address:	168.126.63.1#53

Non-authoritative answer:
naver.com	mail exchanger = 10 mx3.naver.com.
naver.com	mail exchanger = 10 mx2.naver.com.
naver.com	mail exchanger = 10 mx1.naver.com.

Authoritative answers can be found from:
mx1.naver.com	internet address = 125.209.238.100
mx2.naver.com	internet address = 125.209.238.137
mx3.naver.com	internet address = 125.209.222.14
>

naver.com로 확인해본 결과이다. 총 3개의 다중 MX 레코드를 사용하고 있으며 해당 메일 서버들에 균등하게 부하 분산하고 있다. 
 
 

NS (Name Server)

NS 레코드는 도메인에 대한 네임서버의 권한을 누가 관리하고 있는지 알려주는 레코드이다.
예를 들어 내가 example.co.kr 이라는 도메인을 cafe24 업체에서 구입해서 사용하고 있다면 example.co.kr 도메인을 관리하는 네임 서버는 당연히 cafe24가 된다.
즉, NS 레코드는 어떤 도메인에 대한 처리를 다른 도메인 네임 서버에게 위임하는 기능을 가진 레코드이다.

 sohuishin@sohuishinui-MacBookAir  ~   sohui ±  nslookup -type=ns google.com
Server:		168.126.63.1
Address:	168.126.63.1#53

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

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

 
 

PTR (Pointer)

IP 주소에 대한 도메인 주소를 확인할 수 있는 레코드이다. A 레코드의 반대 방향인 레코드라고 볼 수 있다.
A 레코드가 도메인 네임에 대한 질의를 IP로 응답한다면, PTR 레코드는 IP에 대한 질의를 도메인 네임으로 응답한다.
 
단, A 레코드와 달리, PTR 레코드는 1개의 IP에 1개의 도메인 네임만 가질 수 있다는 점이 다르다.
 
 

SOA (Start of Authority)

SOA 레코드는 네임서버가 해당 도메인에 관해 인증된 데이터를 가지고 있음을 증명하는 레코드이다.
이 레코드는 기본 이름 서버, 도메인 관리자의 전자 메일, 도메인 일련 번호 및 영역 새로 고침과 관련된 여러 타이머를 포함하며 DNS 영역에 대한 핵심 정보를 지정한다.
즉, SOA 레코드가 없는 도메인은 네임서버에서 정상적으로 동작하지 않게 되는 것이다.
SOA 레코드는 도메인당 1개이다.

 sohuishin@sohuishinui-MacBookAir  ~   sohui ±  dig naver.com soa +multiline

; <<>> DiG 9.10.6 <<>> naver.com soa +multiline
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 31680
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
;; QUESTION SECTION:
;naver.com.		IN SOA

;; ANSWER SECTION:
naver.com.		300 IN SOA ns1.naver.com. webmaster.naver.com. (
				2023091504 ; serial
				21600      ; refresh (6 hours)
				1800       ; retry (30 minutes)
				1209600    ; expire (2 weeks)
				180        ; minimum (3 minutes)
				)

;; Query time: 20 msec
;; SERVER: 168.126.63.1#53(168.126.63.1)
;; WHEN: Sat Sep 16 14:41:10 KST 2023
;; MSG SIZE  rcvd: 88
  • MNAME : ns1.naver.com
  • RNAME : webmaster.naver.com
  • Serial : 2023091504
  • Refresh : 6 hours
  • Retry : 30 minutes
  • Expire : 14 days
  • TTL : 3 minutes

 
1. Mname / primary name : 도메인에 대한 기본 호스트네임
2. RName / mail address : 관리자의 이메일 주소. 일반적인 이메일 형식인 @이 아니라 마침표가 들어있음
3. serial : 도메인의 갱신 버전 번호. 일반적으로 날짜(YYYYMMDD) 형식
4. refresh : 도메인 영역의 데이터 갱신 여부를 체크하는 주기 (초 단위)
5. retry : (장애 등의 이유로) refresh 주기로 체크하지 못했을 경우, 체크를 재시도하는 주기(초 단위)
6. expire : retry의 주기로 체크를 수차례 반복하다가, 도메인을 더 이상 신뢰할 수 있는 영역이라고 간주하지 않아 서비스를 중단하는 최대 기한
7. minimum : 도메인을 찾을 수 없는 경우, 네임서버가 도메인의 부재 정보를 캐싱하는 시간
 
 

TXT (TEXT)

TXT 레코드는 텍스트를 입력할 수 있는 레코드이며, 주로 메모를 남기는 용도라고 보면 된다.
실제로 네이버의 TXT 레코드를 살펴보면 다음과 같이 Key:Value 구조로 정보를 적어놓은 것을 볼 수 있다.

 sohuishin@sohuishinui-MacBookAir  ~   sohui ±  nslookup -type=TXT naver.com
Server:		168.126.63.1
Address:	168.126.63.1#53

Non-authoritative answer:
naver.com	text = "facebook-domain-verification=0qyhf0qnkiuqfx4owhfuvwvsvjz8fk"
naver.com	text = "v=spf1 ip4:111.91.135.0/27 ip4:125.209.208.0/20 ip4:125.209.224.0/19 ip4:210.89.163.112 ip4:210.89.173.104/29 ip4:117.52.140.128/26 ip4:114.111.35.0/24 ~all"
naver.com	text = "google-site-verification=fK9dDFcEOeNM2Wr3xzNAN-XLcerfAGpOABdSYiqw4_s"
naver.com	text = "google-site-verification=B_dAfnJNNK2GwYDLRl2bdAGtfiyqMjEddjUeDI1Z6sk"

Authoritative answers can be found from:

 
 

DNS 레코드 확인 명령어 모음

nslookup은 네임서버 관련한 조회를 할 수 있는 명령어이다.

IP 조회  nslookup [도메인]
MX 확인 nslookup -type=mx [도메인]
CNAME 조회 nslookup -type=cname [도메인]
NS로 DNS 목록 확인 nslookup -type=ns [도메인]
PTR 조회 nslookup -type=ptr [도메인] (type 옵션 생략 가능)
TXT 조회 nslookup -type=txt [도메인]
SOA 조회 dig [도메인] soa +multiline

 
 
 
참고

728x90