...
DNS 레코드
DNS Record는 DNS 서버가 해당 패킷을 받았을 때 어떤식으로 처리할지를 나타내는 지침을 말한다.
간단히 말하면 DNS 상에서 도메인에 관한 설정을 하기 위해 사용되는 일련의 설정 문자라고 보면 된다.
DNS 레코드에는 서버가 요청에 응답하는 방법에 대한 다양한 구문과 명령이 포함되어 있다.
DNS 레코드를 공부해야 하는 이유는 만일 개인 도메인을 구입하기 위해 도메인 업체 사이트에 접속해서 도메인과 내 서버 IP와 연결하려면 해당 정보가 필요하기 때문이다.
이 밖에 실 서비스의 도메인을 관리하기 위해서는 레코드의 각 특징에 대해 알아둘 필요가 있다.
DNS 레코드 종류
A 레코드
A 레코드(A Record)는 DNS에 저장되는 정보의 타입으로 도메인 주소와 서버의 IP 주소가 직접 매핑시키는 방법이다.
도메인 tistory.com 을 예로 든다면, A record는 '티스토리 도메인은 IP 주소 121.53.105.234 에 연결 되어 있다' 라고 말하는 역할을 한다고 보면 된다.
도메인 이름 | 맵핑된 주소 |
tistory.com | 121.53.105.234 |
참고로 A 레코드는 반드시 도메인과 아이피 간의 일대일 매칭이 될 필요는 없다.
도메인 매핑 설정에 따라서 일대다 / 다대일도 될 수 있다.
도메인 이름 | 맵핑된 주소 |
tistory2.com | 121.53.105.234 |
121.22.10.202 | |
121.6.15.211 |
실제로 naver.com의 A 레코드를 조회하였을 때 223.130.200.104 / 223.130.200.107 / 223.130.195.95 / 223.130.195.200의 IP주소가 매핑 되어있는 것을 볼 수 있다.
TTL(Time To Live)라는 옵션값은 DNS서버나 사용자 PC의 캐쉬(메모리)에 저장되는 시간을 말한다.
CNAME (Canonical Name record)
CName 레코드는 도메인 별명 레코드라고 부르며, 도메인 주소를 또 다른 도메인 주소로 이중 매핑 시키는 형태의 DNS 레코드 타입이다.
쉽게 말하면 도메인 주소로 연결한 부분에 다시 한번 도메인 주소로 연결하는 방식이다.
CNAME 레코드는 무조건 다른 도메인 주소를 등록해야 하며 A 레코드처럼 직접 IP 주소를 등록해서는 안 된다.
예를들어 다음 daum.net 도메인이 있다고 했을 때, 이 도메인의 CNAME 을 daum2.net 로 정해, 브라우저에 daum2.net을 입력하면 daum.net로 접근되는 형식이다.
그리고 daum.net에 매핑된(A 레코드) IP 주소 203.133.167.81를 얻어 최종적으로 서비스에 접속하게 되는 방식인 것이다.
서비스 | 도메인 주소 | 등록 주소 | Type(형식) |
다음(Daum) | daum.net | 203.133.167.81 | A |
다음2(Daum2) | daum2.net | daum.net | CNAME |
A 레코드 vs CNAME 장단점
A 레코드와 CNAME 레코드의 장단점은 명확하다.
A 레코드의 장점은 한번의 요청으로 찾아갈 서버의 IP 주소를 한번에 알 수 있다는 점이다.
즉 빠르다. 반면 단점은 IP 주소가 자주 바뀌는 환경에서는 조금 번거로울 수 있다는 점이다.
예를 들어, 다음과 같이 main.co.kr 와 another.co.kr 두개의 도메인들에 A 레코드로 IP 주소 1.1.1.100 를 맵핑했다고 하자.
도메인 이름 | 맵핑된 주소 |
main.co.kr | 1.1.1.100 |
another.co.kr | 1.1.1.100 |
그러다 실 서버 주소가 업데이트로 인해 22.22.1.30 으로 변경되었다고 가정 하자.
그러면 실 서버 주소와 도메인에 맵핑된 주소가 달라 접속이 불가능해질 것이다. 따라서 일일히 도메인의 A 레코드를 변경해줄 필요가 있게 된다.
지금은 두개밖에 없지만 도메인을 수십개 관리하고 있는 인프라 환경에선 번거로울 수 밖에 없다.
반면에, CNAME 레코드의 장점은 IP 주소가 자주 변경되는 환경에서 유연하게 대응할 수 있다는 점이다.
예를 들어, 아래 그림과 같이 another.co.kr 와 others.co.kr 두개의 서브 도메인을 메인 도메인인 main.co.kr 로 매핑시키는 CNAME 레코드로 저장하고, main.co.kr이라는 주소를 서버 IP 1.1.1.100 주소로 매핑시키는 A 레코드로 저장하여 도메인 인프라를 구성해 놓았다면, 만일 서버의 IP 주소가 바뀌었을 때 main.co.kr의 A 레코드 정보만 변경시키면 나머지 CNAME으로 연결된 서브 도메인들은 따로 작업이 필요 없어진다. (편하다)
그러나 CNAME 레코드의 단점은 아무래도 맵핑을 중복으로 연달아 하여, 실제 IP 주소를 얻을 때까지 여러번 DNS 정보를 요청해야 한다는 점이다.
DNS 정보를 해석하는데 경우에 따라서 성능저하를 유발할 수 있게 된다.
총정리 하자면, A레코드와 CNAME은 장점과 단점이 서로 상반되어 있다고 보면 된다.
장점 | 단점 | |
A 레코드 | 도메인이 바뀌어도 IP는 그대로 이므로 유지가 된다 | 서버 이전등의 문제로 IP가 변동될시에 일일히 변경해야 한다. |
CNAME | 서버 이전등의 문제로 IP가 변동될시에 변경하지 않아도 된다. | 도메인이 바뀌면 변경해야 한다. 그리고 여러번 요청이 될경우 성능 저하가 일어날 수가 있다. |
AAAA
AAAA 레코드는, A레코드의 IPv6 버젼이라고 보면 된다.
A의 확장형으로 도메인에 IPv6주소가 매핑되어 있는 레코드이다.
MX (Mail Exchanger)
MX 레코든느 메일 서버 레코드이며, 해당 도메인과 연동되어있는 메일서버를 확인하는데 사용하는 레코드이다.
즉, MX 레코드가 해당 도메인에 설정되어 있어야, 해당 도메인을 이메일 주소로 사용할 수 있다는 뜻이다.
MX레코드는 일반적으로 도메인을 구입한 회사 홈페이지(예: 호스팅케이알, Cafe24, 가비아 등)에서 설정할 수 있다.
아래 명령어로 CMD에서 도메인의 MX레코드를 확인할 수 있다.
> nslookup -type=mx {도메인}
NS (Name Server)
NS 레코드는 네임 서버 레코드로 도메인에 대한 네임서버의 권한을 누가 관리하고 있는지 알려주는 레코드이다.
쉽게 말해, 내가 example.co.kr 이라는 도메인을 cafe24 업체에서 구입해서 사용하고 있다고 하면, example.co.kr 도메인을 관리하는 네임 서버는 당연히 cafe24가 되게 된다.
즉 NS 레코드는 어떤 도메인에 대한 처리를 다른 도메인 네임 서버에게 위임하는 기능을 가진 레코드이다.
PTR (Pointer)
IP 주소에 대한 도메인 주소를 확인할 수 있는 레코드이다. A 레코드의 반대 방향인 레코드라 볼 수 있다.
A레코드가 도메인네임에 대한 질의를 IP로 응답한다면, PTR레코드는 IP에 대한 질의를 도메인네임으로 응답한다.
단, A레코드와 달리, PTR레코드는 1개의 IP에 1개의 도메인 네임만 가질 수 있다는 점이 다르다.
아이피 | 도메인 |
121.53.105.234 | tistory.com |
SOA (Start of Authority)
SOA레코드는 네임서버가 해당 도메인에 관하여 인증된 데이터를 가지고 있음을 증명하는 레코드이다.
이 레코드는 기본 이름 서버, 도메인 관리자의 전자 메일, 도메인 일련 번호 및 영역 새로 고침과 관련된 여러 타이머를 포함하여 DNS 영역에 대한 핵심 정보를 지정한다.
즉, SOA레코드가 없는 도메인은 네임서버에서 정상적으로 동작하지 않게 되는 것이다. SOA레코드는 도메인당 1개이다.
naver의 경우 ns1.naver.com webmaster.naver.com 2021012809 21600 1800 1209600 180 이렇게 보여주고 있는데, 마스터 네임서버, 존 관리자 연락처, 존 데이터 동기화 시간, 갱신주기, 시도, 만료 등 정보를 나타내고 있는 것이다.
- Mname / primary name : 도메인에 대한 기본 호스트네임
- RName / mail addr : 관리자의 이메일 주소. 일반적인 이메일 형식인 @가 아니라 마침표가 들어있음.
- serial : 도메인의 갱신 버전 번호. 일반적으로 날짜(YYYYMMDD)형식.
- refresh : 도메인 영역의 데이터 갱신 여부를 체크하는 주기(초 단위)
- retry : (장애 등의 이유로)refresh 주기로 체크하지 못했을 경우, 체크를 재시도하는 주기(초 단위)
- expire : retry의 주기로 체크를 수차례 반복하다가, 도메인을 더이상 신뢰할 수 있는 영역이라고 간주하지 않아 서비스를 중단하는 최대 기한.
- minimum : 도메인을 찾을 수 없는 경우, 네임 서버가 도메인의 부재정보를 캐싱하는 시간
TXT (TEXT)
TXT 레코드는 텍스트를 입력할 수 있는 레코드이며, 주로 메모를 남기는 용도라고 보면 된다.
실제로 네이버의 TXT 레코드를 살펴보면 다음과 같이 key:value 구조로 정보를 적어놓은걸 볼 수 있다.
SPF (Sender Policy Framework)
SPF 레코드는 특정 도메인에서 이메일을 보낼 수 있도록 메일 수신을 승인할 모든 주소를 명시하는 이메일 인증 역할을 한다.
SPF 레코드를 등록하게 되면, 메일을 받는 서버는 보낸 메일 주소로부터 취득한 도메인 정보로 그 DNS 레코드를 SPF 레코드의 값과 비교하여 원본 주소를 위장한 스팸 메일이 아닌 여부를 판단할 수 있게 된다.
SPF 레코드는 도어맨이 관리하는 손님 목록으로 생각하면 된다.
목록에 없는 사람이 오면 도어맨은 출입을 허가하지 않고, 발신자의 IP 주소나 도메인이 없다면 수신 서버(도어맨)은 해당 이메일을 배달하지 않거나 스팸으로 표시하게 되는 것이다.
SPF 레코드는 원래 이메일에 이용되는 표준 프로토콜 SMTP(Simple Mail Transfer Protocol)이 본질적으로 이메일의 "발신" 주소를 인증하지 않기 때문에 만들어진 녀석이다.
추가로 알아두어야할 점은 SPF 레코드는 공식적으로 지원 중단(deprecated)되었다는 점이다. 그래서 SPF 레코드를 설정하려면 바로 위에서 배운 TXT레코드에서 설정해야한다.
위의 네이버의 TXT 레코드 내용 사진을 보면 다음과 같은 문자열을 볼수 있다.
TXT 레코드에 간단한 정보 메모를 해도 되지만, 다음과 같이 SPF 레코드를 기재하는데 많이 이용된다.
위의 문자열을 보면 무슨 뜻인지는 모르겠지만 무언가 체계가 잡혀있음을 볼 수 있다.
예상한 바와 같이 SPF 레코드는 작성할때 특정 표준을 따라야 한다.
v=spf1 ip4=192.0.2.0 ip4=192.0.2.1 include:examplesender.net -all
- v=spf1는 SPF 레코드가 포함되어 있다고 서버에게 알려주는 예약어 이다.
SPF 레코드는 모두 이 문자열로 시작해야 한다. - 이 다음으로 SPF의 승인된 IP 주소의 목록이 이어진다.
위의 예제 스트링에서는 ip4=192.0.2.0 및 ip4=192.0.2.1이 해당 도메인에서 이메일을 보낼 수 있도록 승인 받았음을 알려준다. - include:examplesender.net는 include 태그의 예로서 해당 도메인에서 이메일을 보낼 수 있는 제3자 조직을 서버에 알려주는 키워드 이다.
- 마지막으로 -all은 SPF 레코드에 열거되지 않은 주소는 이메일을 보낼 수 있도록 승인 받지 않았으므로 거부하라고 서버에 알리는 키워드이다.
※ 아이피를 작성할때 IPv4가 아니라 반드시 IP4 방식으로 작성해야 한다.
※ 마지막에 반드시 ~all을 기재해야 하며 IP에서 띄어쓰기를 해야 한다.
※ all의 다른 옵션으로는 열거되지 않은 이메일은 안전하지 않음 혹은 스팸으로 표시하되 수락하라는 ~all과 어떤 서버라도 귀하의 도메인을 대신해 이메일을 보낼 수 있음을 알리는 +all이 있다.
CAA (Certificat Authority Authorization)
도메인 인증기관에 관련된 레코드
HINFO (Host Information)
HINFO 레코드는 호스트에 대한 일반 정보를 얻는 데 사용된다. CPU 및 OS 유형을 얻을 수 있다.
HINFO 레코드 데이터는 두 호스트가 통신하기를 원할 때 운영 체제 특정 프로토콜을 사용할 수있는 가능성을 제공한다.
하지만 일반적으로 보안상의 이유 때문에 HINFO 레코드는 공용 서버에서 사용되지 않는 편이다.
ISDN (Integrated Services Digital Network)
ISDN 리소스 레코드는 호스트의 ISDN 주소를 알려준다.
ISDN 주소는 국가 코드, 국가 별 대상 코드, ISDN 가입자 번호 및 선택적으로 ISDN 하위 주소로 구성된 전화 번호이다.
DNS 레코드 확인 방법
CMD 명령어
> nslookup {도메인}
윈도우 CMD 명령을 이용하여 원하시는 도메인의 DNS 레코드를 확인할 수 있다.
nslookup은 여러 운영체제에서 사용할 수 있는 네트워크 관리 명령줄 도구이다.
nslookup을 사용하면 도메인네임, IP주소, 기타 DNS레코드를 알 수 있다.
만일 위에서 배운 각 레코드 타입에 대한 정보를 얻고 싶다면 -type 이나 -query 옵션을 주면 된다.
> nslookup -type=MX naver.com # 네이버의 MX 레코드 얻기
> nslookup -type=a naver.com # 네이버의 A 레코드 얻기
> nslookup -type=ns naver.com # 네이버의 ns 레코드 얻기
Dig (Google 관리 콘솔 도구 상자)
cmd보다 훨씬 편리하게 GUI로 되어있는 구글에서 제공하는 DNS 레코드 조회 사이트이다.
도메인 명을 쓰고 클릭만으로 정보를 손쉽게 얻을 수 있다.
whatmydns.net
역시 손쉽게 DNS 레코드를 검색할수 있는 사이트. 전세계를 기준으로 검색되는 특징을 가지고 있다.
# 참고자료
https://osc131.tistory.com/12
https://www.cloudflare.com/ko-kr/learning/dns/dns-records/dns-spf-record/
https://helpdesk.midasinsight.com/hc/ko/articles/900000287723--%EA%B0%80%EC%9D%B4%EB%93%9C-SPF-%EB%93%B1%EB%A1%9D-%EA%B0%80%EC%9D%B4%EB%93%9C
https://happylie.tistory.com/51
https://server-talk.tistory.com/176
이 글이 좋으셨다면 구독 & 좋아요
여러분의 구독과 좋아요는
저자에게 큰 힘이 됩니다.