DNS 레코드 종류 정리 — A, AAAA, MX, TXT 등

DNS 레코드 종류 정리 — A, AAAA, MX, TXT 등

도메인을 서버에 연결할 때 A레코드와 CNAME을 설정하는 방법은 이전 글에서 다뤘습니다. 그런데 DNS 관리 페이지에 들어가보면 A와 CNAME 말고도 MX, TXT, AAAA, NS 같은 레코드 타입이 여러 개 있습니다. 처음 보면 뭐가 뭔지 알 수 없고, 건드리면 안 될 것 같아서 그냥 넘어가게 됩니다. 하지만 이메일 설정을 하거나 도메인 소유권을 인증하거나 보안 설정을 할 때 이 레코드들을 직접 다뤄야 하는 상황이 생깁니다. 이번 글에서는 실무에서 만나게 되는 DNS 레코드 종류를 하나씩 정리해보겠습니다.

DNS 레코드가 하는 일

DNS 레코드는 도메인에 대한 정보를 담고 있는 설정 항목입니다. 누군가 브라우저에 도메인을 입력하면 DNS 서버가 해당 도메인의 레코드를 찾아서 적절한 응답을 돌려줍니다. 어떤 레코드냐에 따라 IP 주소를 알려줄 수도 있고, 메일 서버 주소를 알려줄 수도 있고, 도메인의 소유자가 누구인지 증명하는 텍스트를 돌려줄 수도 있습니다.

하나의 도메인에 여러 종류의 레코드가 동시에 존재할 수 있습니다. today-play.com이라는 도메인에 A레코드로 서버 IP를 연결해두고, MX레코드로 메일 서버를 지정하고, TXT레코드로 소유권 인증 코드를 넣어두는 식입니다. 각 레코드는 서로 독립적으로 동작합니다.

A 레코드

A레코드는 도메인을 IPv4 주소에 연결하는 가장 기본적인 레코드입니다. 이전 글에서 자세히 다뤘기 때문에 간단하게만 짚겠습니다.

타입: A
호스트: @
값: 143.198.241.73
TTL: 3600

호스트에 @을 넣으면 도메인 자체를 의미하고, 특정 서브도메인을 넣을 수도 있습니다. 호스트에 blog를 넣으면 blog.today-play.com이 해당 IP를 가리키게 됩니다. 하나의 도메인에 A레코드를 여러 개 등록하면 DNS가 요청마다 다른 IP를 돌려주는 라운드 로빈 방식으로 동작합니다. 간단한 로드 밸런싱 용도로 쓸 수 있지만 실무에서는 전용 로드 밸런서를 사용하는 게 일반적입니다.

AAAA 레코드

AAAA 레코드는 A레코드의 IPv6 버전입니다. 도메인을 IPv6 주소에 연결합니다.

타입: AAAA
호스트: @
값: 2001:0db8:85a3:0000:0000:8a2e:0370:7334
TTL: 3600

IPv4 주소는 32비트라서 약 43억 개밖에 안 되는데, 인터넷에 연결되는 장비가 늘어나면서 주소가 부족해지고 있습니다. IPv6는 128비트라서 사실상 무한에 가까운 주소를 제공합니다. AAAA라는 이름은 A레코드가 32비트 주소를 가리키니까 그 4배인 128비트를 가리킨다는 의미에서 A를 네 번 쓴 것입니다.

아직 대부분의 서비스가 IPv4로 운영되고 있어서 AAAA 레코드를 당장 설정해야 하는 경우는 많지 않습니다. 하지만 IPv6 지원이 점점 확대되고 있기 때문에 서버가 IPv6를 지원한다면 AAAA 레코드도 함께 등록해두는 게 좋습니다. A레코드와 AAAA레코드가 둘 다 있으면 클라이언트가 자신의 환경에 맞는 쪽으로 접속합니다.

CNAME 레코드

CNAME 레코드는 도메인을 다른 도메인에 연결하는 별명 레코드입니다. 이것도 이전 글에서 다뤘으니 핵심만 짚겠습니다.

타입: CNAME
호스트: www
값: today-play.com
TTL: 3600

www.today-play.com으로 접속하면 today-play.com을 거쳐서 최종적으로 A레코드의 IP에 도달합니다. 외부 서비스에 연결할 때도 많이 사용합니다. Vercel이나 Netlify에서 커스텀 도메인을 연결할 때 CNAME으로 해당 서비스의 주소를 가리키도록 설정합니다.

주의할 점은 루트 도메인(@)에는 CNAME을 설정하지 못하는 DNS 업체가 많다는 것입니다. CNAME은 해당 이름에 다른 레코드가 존재하면 안 된다는 DNS 표준 규칙이 있는데, 루트 도메인에는 SOA와 NS 레코드가 필수로 존재하기 때문입니다. Cloudflare는 CNAME Flattening이라는 기술로 이 제한을 우회해줍니다.

MX 레코드

MX 레코드는 Mail Exchanger의 약자로, 해당 도메인으로 이메일이 들어왔을 때 어떤 메일 서버로 보낼지 지정하는 레코드입니다.

타입: MX
호스트: @
값: mail.today-play.com
우선순위: 10
TTL: 3600

누군가 admin@today-play.com으로 메일을 보내면, 보내는 쪽의 메일 서버가 today-play.com의 MX 레코드를 조회합니다. MX 레코드에 적힌 메일 서버 주소로 메일을 전달합니다.

MX 레코드에는 우선순위 값이 있습니다. 숫자가 낮을수록 우선순위가 높습니다. MX 레코드를 여러 개 등록할 수 있는데, 우선순위가 높은 서버로 먼저 시도하고 그 서버가 응답하지 않으면 다음 우선순위 서버로 시도합니다.

타입: MX  호스트: @  값: mail1.today-play.com  우선순위: 10
타입: MX  호스트: @  값: mail2.today-play.com  우선순위: 20

이렇게 설정하면 평소에는 mail1으로 메일이 가고, mail1이 다운되면 mail2로 갑니다.

구글 워크스페이스나 네이버 웍스 같은 기업용 메일 서비스를 사용하면 해당 서비스에서 안내하는 MX 레코드를 그대로 등록하면 됩니다. 구글 워크스페이스의 경우 다섯 개 정도의 MX 레코드를 등록하라고 안내합니다.

TXT 레코드

TXT 레코드는 도메인에 텍스트 정보를 추가하는 레코드입니다. 이름 그대로 임의의 텍스트 값을 넣을 수 있습니다. 용도가 다양하지만 실무에서 가장 많이 마주치는 세 가지가 있습니다.

첫 번째는 도메인 소유권 인증입니다. 구글 서치 콘솔에 사이트를 등록하거나, 외부 서비스에서 도메인 소유자를 확인할 때 TXT 레코드에 특정 값을 넣으라고 안내합니다.

타입: TXT
호스트: @
값: google-site-verification=AbCdEf123456
TTL: 3600

서비스 제공자가 이 TXT 레코드를 조회해서 값이 일치하면 도메인 소유자가 맞다고 인증합니다. 도메인의 DNS 설정을 변경할 수 있다는 건 도메인을 관리할 권한이 있다는 뜻이니까요.

두 번째는 SPF(Sender Policy Framework) 설정입니다. 이메일 스푸핑을 방지하기 위한 설정인데, 이 도메인에서 메일을 보낼 수 있는 서버가 어디인지를 TXT 레코드로 선언합니다.

타입: TXT
호스트: @
값: v=spf1 include:_spf.google.com ~all
TTL: 3600

이렇게 설정하면 구글의 메일 서버에서 보낸 메일만 today-play.com의 정당한 메일로 인정한다는 뜻입니다. 다른 서버에서 today-play.com을 사칭해서 메일을 보내면 수신 측에서 스팸으로 처리할 수 있습니다.

세 번째는 DKIM(DomainKeys Identified Mail)과 DMARC 설정입니다. 둘 다 이메일 인증과 관련된 것으로 TXT 레코드를 사용합니다. DKIM은 메일에 디지털 서명을 추가해서 메일이 변조되지 않았음을 증명하고, DMARC는 SPF와 DKIM 검증이 실패했을 때 어떻게 처리할지 정책을 정의합니다. 기업 메일을 운영한다면 SPF, DKIM, DMARC 세 가지를 전부 설정해야 메일이 스팸함에 들어가는 걸 방지할 수 있습니다.

NS 레코드

NS 레코드는 Name Server의 약자로, 이 도메인의 DNS 정보를 어떤 네임서버에서 관리하는지를 지정합니다.

타입: NS
호스트: @
값: ns1.example-dns.com
TTL: 86400

도메인을 구매하면 등록업체의 기본 네임서버가 설정되어 있습니다. 가비아에서 도메인을 사면 가비아의 네임서버가 기본으로 들어갑니다. Cloudflare로 DNS 관리를 옮기고 싶으면 NS 레코드를 Cloudflare의 네임서버로 변경하면 됩니다. 네임서버를 변경한 후에는 A레코드, CNAME, MX 같은 모든 DNS 설정을 새 네임서버 쪽에서 관리해야 합니다.

NS 레코드는 직접 수정하기보다는 도메인 등록업체의 네임서버 변경 기능을 통해 바꾸는 게 일반적입니다. 잘못 건드리면 도메인 전체가 응답하지 않을 수 있으니 주의해야 합니다.

SOA 레코드

SOA 레코드는 Start of Authority의 약자로, 해당 도메인의 DNS 영역에 대한 기본 정보를 담고 있습니다. 주 네임서버 이름, 관리자 이메일, 시리얼 번호, 갱신 주기 같은 정보가 들어 있습니다.

SOA 레코드는 모든 도메인에 반드시 하나 존재해야 하는 필수 레코드입니다. DNS 서버 간의 동기화에 사용되는 기술적인 레코드라서 일반적인 서버 운영에서 직접 수정할 일은 거의 없습니다. DNS 관리 서비스에서 자동으로 설정해줍니다.

SRV 레코드

SRV 레코드는 특정 서비스의 서버 위치를 알려주는 레코드입니다. 어떤 서비스가 어떤 호스트의 어떤 포트에서 동작하는지를 지정합니다.

타입: SRV
호스트: _sip._tcp.today-play.com
값: 10 60 5060 sipserver.today-play.com
TTL: 3600

값에 들어가는 숫자들은 순서대로 우선순위, 가중치, 포트 번호, 대상 호스트입니다. VoIP, 마인크래프트 서버, XMPP 같은 서비스에서 사용됩니다. 마인크래프트 서버를 운영할 때 SRV 레코드를 설정하면 사용자가 포트 번호 없이 도메인만으로 접속할 수 있게 됩니다. 일반적인 웹 서비스에서는 거의 사용하지 않습니다.

CAA 레코드

CAA 레코드는 Certificate Authority Authorization의 약자로, 이 도메인에 대해 SSL 인증서를 발급할 수 있는 인증 기관을 제한하는 레코드입니다.

타입: CAA
호스트: @
값: 0 issue "letsencrypt.org"
TTL: 3600

이렇게 설정하면 Let’s Encrypt만 이 도메인의 인증서를 발급할 수 있습니다. 다른 CA에서 인증서 발급을 시도하면 CAA 레코드를 확인하고 거부합니다. 누군가 내 도메인에 대해 무단으로 인증서를 발급받는 걸 방지할 수 있습니다.

필수는 아니지만 보안을 강화하고 싶다면 설정해두는 게 좋습니다. 여러 CA를 허용하고 싶으면 CAA 레코드를 여러 개 추가하면 됩니다.

PTR 레코드

PTR 레코드는 Pointer의 약자로, A레코드의 반대 방향입니다. IP 주소로 도메인을 찾는 역방향 조회에 사용됩니다. 일반적인 DNS 조회가 도메인에서 IP를 찾는 것이라면 PTR은 IP에서 도메인을 찾는 겁니다.

PTR 레코드는 주로 이메일 서버에서 중요합니다. 수신 측 메일 서버가 발신 서버의 IP를 역방향 조회해서 도메인과 일치하는지 확인합니다. PTR 레코드가 없거나 도메인과 일치하지 않으면 스팸으로 분류될 수 있습니다.

PTR 레코드는 DNS 관리 패널이 아니라 IP를 할당해준 호스팅 업체에서 설정합니다. AWS에서는 역방향 DNS 설정을 별도로 요청해야 하고, 다른 클라우드 업체들도 각자의 방식으로 PTR 레코드 설정을 지원합니다.

레코드 확인하는 방법

설정한 DNS 레코드가 제대로 반영됐는지 확인하려면 터미널에서 dig 명령어를 사용합니다.

dig today-play.com A
dig today-play.com MX
dig today-play.com TXT

dig 뒤에 도메인과 레코드 타입을 입력하면 해당 레코드의 현재 값을 보여줍니다. nslookup을 써도 되지만 dig이 더 자세한 정보를 제공합니다.

특정 네임서버에서의 결과를 확인하고 싶으면 @을 사용합니다.

dig @8.8.8.8 today-play.com A

이건 구글의 공개 DNS 서버(8.8.8.8)에서 조회한 결과를 보여줍니다. DNS 설정을 변경한 직후에 로컬 DNS에는 아직 캐시가 남아있을 수 있는데, 이렇게 외부 DNS 서버에서 확인하면 전파 상태를 알 수 있습니다.

마무리

DNS 레코드는 종류가 많지만 실무에서 직접 다루는 건 몇 가지로 한정됩니다. 서버 연결에는 A레코드와 CNAME, 이메일 설정에는 MX레코드, 도메인 인증과 메일 보안에는 TXT레코드를 주로 사용합니다. 나머지는 특수한 상황에서 필요할 때 찾아보면 됩니다. 중요한 건 각 레코드가 어떤 역할을 하는지 큰 그림을 알아두는 것입니다. 그래야 DNS 설정을 변경할 때 뭘 건드려야 하는지 판단할 수 있습니다. 다음 글에서는 네트워크 문제를 진단할 때 자주 사용하는 ping, traceroute, nslookup 명령어 사용법을 다뤄보겠습니다.

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *