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 |
참고
'CS > 네트워킹' 카테고리의 다른 글
[네트워킹] 웹소켓(WebSocket) (0) | 2023.01.18 |
---|---|
[네트워킹] CDN (0) | 2022.11.09 |
VLAN이란 ? (0) | 2022.10.04 |
서브넷과 게이트웨이 (0) | 2022.10.03 |
GARP(Gratuitous ARP) (0) | 2022.10.03 |
영차영차 성장 블로그
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!