일반 DNS 개요

이 페이지에서는 도메인 이름 시스템(DNS)을 간략하게 설명합니다.

Cloud DNS 개요는 Cloud DNS 개요를 참조하세요.

일반 DNS 개념

DNS는 IP 주소 및 기타 데이터를 저장하고 이름별로 쿼리할 수 있게 해주는 계층형 분산 데이터베이스입니다.

즉, DNS는 컴퓨터가 서로 통신하는 데 사용하는 숫자 IP 주소로 변환되는, 쉽게 읽을 수 있는 도메인 이름의 디렉터리입니다. 예를 들어 브라우저에 URL을 입력하면 DNS는 URL을 해당 이름과 연결된 웹 서버의 IP 주소로 변환합니다. DNS 디렉터리는 정기적으로 업데이트되는 전 세계의 도메인 네임서버에 저장되고 배포됩니다.

다음 개념을 알고 있으면 DNS 작업에 도움이 됩니다.

DNS 서버 유형

DNS 서버는 도메인 이름의 데이터베이스를 저장하고 네트워크의 클라이언트에서 오는 DNS 쿼리를 기반으로 도메인 이름을 처리합니다.

권한 서버
권한 서버는 A, AAAA, CNAME 등의 DNS 이름 레코드를 보유하는 서버입니다. 비권한 서버는 도메인에 대한 이전 쿼리를 기반으로 캐시 파일을 생성하며 원본 이름 레코드를 보유하지 않습니다.
재귀 리졸버

재귀 리졸버는 확인을 위해 권한 서버 또는 비권한 서버로 쿼리를 보내는 서버입니다. 재귀 리졸버라는 명칭은 주어진 이름에 대한 각 쿼리를 수행하고 최종 결과를 반환한다는 데서 비롯되었습니다. 답을 알 수 있는 다음 DNS 서버에 대한 참조만 반환하는 반복 리졸버와 대비되는 부분입니다.

예를 들어 'google.com'.이라는 이름을 확인하는 경우 먼저 재귀 리졸버는 '.'에 대한 권한이 누구에게 있는지를 확인해야 합니다(DNS의 루트 영역). 그런 다음 이러한 네임서버에 '.com.'에 대한 권한이 누구에게 있는지 묻습니다. 마지막으로 이러한 네임서버에 'google.com.'에 대한 권한이 누구에게 있는지 묻습니다. 이후 A 레코드의 rdata가 클라이언트에 반환됩니다.

다음은 여기에서 실행되는 재귀 리졸버의 예시입니다. dig +trace google.com을 실행하면 재귀 리졸버가 다음 작업을 수행합니다(8.8.8.8/Google Public DNS는 이러한 리졸버 중 하나임).

dig +trace google.com
; <<>> DiG 9.11.5-P4-5.1-Debian <<>> +trace google.com
;; global options: +cmd
.           168383  IN  NS  a.root-servers.net.
.           168383  IN  NS  b.root-servers.net.
.           168383  IN  NS  c.root-servers.net.
.           168383  IN  NS  d.root-servers.net.
.           168383  IN  NS  e.root-servers.net.
.           168383  IN  NS  f.root-servers.net.
.           168383  IN  NS  g.root-servers.net.
.           168383  IN  NS  h.root-servers.net.
.           168383  IN  NS  i.root-servers.net.
.           168383  IN  NS  j.root-servers.net.
.           168383  IN  NS  k.root-servers.net.
.           168383  IN  NS  l.root-servers.net.
.           168383  IN  NS  m.root-servers.net.
.           168383  IN  RRSIG   NS 8 0 518400 20190810170000 20190728160000 59944 .
ITqCp5bSKwoG1P76GpNfDanh4fXxOtHuld5SJzEm9ez0U/K7kpmBm4TE
cw82zuqtZlqiGOuq+90KHJEhD1fdX3FujgDqe3kaY/41LgFIo76RBeMP
CorYg29lKQOBf7pLPiJWewFmnLsRXsvENzxNXl9mynX80EQSS2YlCWpr
47i2j5SFpGDzmxls7LinB4VvwVLhy0FPwBaVc5NVqQoFS5ZkfKXCUz8x
urExPT2OtPJeDiGzrQGmT6vDbYZtJRWWGK5tPIKZQyF/08YSJlrjebNa
1nKZVN8SsO8s7elz6JGmdoM6D/1ByLNFQmKvU55ikaVSnXylqixLbJQI 7LyQoA==
;; Received 525 bytes from 127.0.0.1#53(127.0.0.1) in 22 ms

com.            172800  IN  NS  a.gtld-servers.net.
com.            172800  IN  NS  b.gtld-servers.net.
com.            172800  IN  NS  c.gtld-servers.net.
com.            172800  IN  NS  d.gtld-servers.net.
com.            172800  IN  NS  e.gtld-servers.net.
com.            172800  IN  NS  f.gtld-servers.net.
com.            172800  IN  NS  g.gtld-servers.net.
com.            172800  IN  NS  h.gtld-servers.net.
com.            172800  IN  NS  i.gtld-servers.net.
com.            172800  IN  NS  j.gtld-servers.net.
com.            172800  IN  NS  k.gtld-servers.net.
com.            172800  IN  NS  l.gtld-servers.net.
com.            172800  IN  NS  m.gtld-servers.net.
com.            86400   IN  DS  30909 8 2
E2D3C916F6DEEAC73294E8268FB5885044A833FC5459588F4A9184CF C41A5766
com.            86400   IN  RRSIG   DS 8 1 86400 20190811170000 20190729160000 59944 .
KXPRdZspxd6hZYRFx3cj7Yp3d6HDzOG5CmoK46ZrrlKnZkCYMPKzyFQ2
15pA+jZ37MbQbhe6+S+C4AHWqv95DDsue85ha3ZmWGhnJxcLnDaL5Twp
Z/W/a+1cTHhhbMZua1riw74mqvzRAF1kVerj7jrvWnOAOZCh69Dr4AFJ
gRN4MAn+wCZDmPQCtkcGVJ9vyNV7Xra45B4ISqEo0xi8CXewp9cc+aW5
TSjFRhj1RM9d3k+3Mrq6AAV8dVgWofYTg6Ihph/SfoIx4TrTrEbgfdsv
MvuLPXvK6Y7oSh5WknbFduw7HQdo1jH3/QR54FORswBJT8VmYD7Zii88 tAjbRQ==
;; Received 1170 bytes from 192.58.128.30#53(j.root-servers.net) in 2 ms

google.com.     172800  IN  NS  ns2.google.com.
google.com.     172800  IN  NS  ns1.google.com.
google.com.     172800  IN  NS  ns3.google.com.
google.com.     172800  IN  NS  ns4.google.com.
CK0POJMG874LJREF7EFN8430QVIT8BSM.com. 86400 IN NSEC3 1 1 0 -
CK0Q1GIN43N1ARRC9OSM6QPQR81H5M9A NS SOA RRSIG DNSKEY NSEC3PARAM
CK0POJMG874LJREF7EFN8430QVIT8BSM.com. 86400 IN RRSIG NSEC3 8 2
86400 20190803044434 20190727033434 17708 com.
rMmiNL7bYvJpB3Bc+WnqS2iiczm2PwxBvJcl7SL/vcTj88GsxM1ycTSV
PsHZHxfrv1dv2C5BCSZ+mzeVBu8upLoeraQy+UVf3VXyt3i3rNGzcXYV
8HSrHcXrRoAJopFim3Ge1xdZ+uERg3cTIcN2tJxxkCeqt/EcUTqtQl8t EAc=
S84BDVKNH5AGDSI7F5J0O3NPRHU0G7JQ.com. 86400 IN NSEC3 1 1 0 -
S84CFH3A62N0FJPC5D9IJ2VJR71OGLV5 NS DS RRSIG
S84BDVKNH5AGDSI7F5J0O3NPRHU0G7JQ.com. 86400 IN RRSIG NSEC3
8 2 86400 20190804045723 20190728034723 17708 com.
jypPsaWVop9rzuf70CFYyiK0hliiJ+YYtkjgb3HVj9ICc57kLmv9DkvG
DddF5GBQpqNEakzyJtya179MAdDT7RhJB4XfmY6fu5I5QTeIjchfP5wt
7gU1AL7cqTmBAo2RWu62vtUytV09+O3KGFq5O+Cwr11dSTfq1yYyw6YW cMI=
;; Received 772 bytes from 192.41.162.30#53(l.gtld-servers.net) in 2 ms

google.com.     300 IN  A   172.217.7.14
;; Received 55 bytes from 216.239.32.10#53(ns1.google.com) in 13 ms

각 DNS 클라이언트가 네임서버를 쿼리합니다. 재귀 리졸버는 필요한 경우 최상위 네임서버까지 다른 네임서버를 쿼리합니다. 상위 수준 네임서버의 영역에 대한 NS 레코드는 다른 네임서버로 리졸버를 내려보내며, 최종적으로 영역을 캐시한 네임서버 또는 영역의 권한 서버에 도달합니다.

영역

공개 영역
공개 영역은 인터넷에 노출됩니다. 공개 영역에 DNS 레코드를 만들어 인터넷에 서비스를 게시할 수 있습니다. 예를 들어 공개 웹사이트 www.example.com.example.com.이라는 공개 영역에 A 레코드를 만들 수 있습니다.
비공개 영역
비공개 영역은 공개 인터넷을 통해 쿼리 할 수 없는 영역입니다.
위임된 하위 영역
DNS를 사용하면 영역 소유자가 NS 레코드를 사용하여 하위 도메인을 다른 네임서버에 위임할 수 있습니다. 리졸버는 이러한 레코드를 따르고 하위 도메인에 대한 쿼리를 위임에서 지정된 타겟 네임서버로 전송합니다.
분할된 범위의 DNS
분할된 범위는 동일한 도메인에 대해 내부 네트워크에서 사용되는 영역과 외부 네트워크(일반적으로 인터넷)에서 사용되는 영역, 두 개가 생성될 때 인스턴스를 나타내는 용어입니다. 분할된 범위의 DNS는 요청자가 누구인지에 따라 동일한 이름에 대해 다른 응답(다른 리소스 레코드 모음)을 제공할 수 있게 해줍니다. 예를 들어 쿼리의 출처가 개발 네트워크인 경우 앱의 개발/스테이징 버전을 제공하고 쿼리의 출처가 공개 인터넷인 경우 앱의 프로덕션/공개 버전을 제공할 수 있습니다.

레코드

레코드는 DNS 리소스와 도메인 이름 간의 매핑입니다. 각 개별 DNS 레코드에는 유형(이름 및 번호), 만료 시간(수명), 유형별 데이터가 있습니다. 일반적으로 사용되는 레코드 유형은 다음과 같습니다.

  • A: 호스트 이름을 IPv4 주소에 매핑하는 주소 레코드
  • AAAA: 호스트 이름을 IPv6 주소에 매핑하는 IPv6 주소 레코드
  • CNAME: 별칭 이름을 지정하는 표준 이름 레코드
  • MX: 요청을 메일 서버로 라우팅하는 데 사용되는 메일 교환 레코드
  • NS: 권한 서버에 DNS 영역을 위임하는 네임서버 레코드
  • PTR: IP 주소와 연결된 이름을 정의하는 포인터 레코드
  • SOA: 권한 시작(Start Of Authority)을 나타내며, 기본 네임서버와 영역을 담당하는 관리자를 지정하는 데 사용됩니다. DNS 서버에서 호스팅되는 각 영역에는 SOA(권한 시작) 레코드가 있어야 합니다. 필요에 따라 레코드를 수정할 수 있습니다(예: 날짜 기반 버전 관리를 지원하기 위해 일련번호를 임의의 숫자로 변경 가능).

레코드 모음

이름과 유형이 동일하지만 데이터 값이 다른 레코드를 레코드 모음이라고 합니다.

레코드를 만들 때 이름과 유형이 동일한 모음이 존재하는 경우 일치하는 모음에 레코드가 추가됩니다. 일치하는 모음이 없으면 새 모음이 생성되어 레코드 모음 목록에 추가됩니다.

다음은 이름과 유형이 같은 레코드가 두 개 이상 있는 레코드 모음의 예시입니다.

DNS 이름 유형 TTL(초) 데이터
db-01.dev.gcp.example.com A 50 10.128.1.35
db-01.dev.gcp.example.com A 50 10.128.1.10

Cloud DNS에서 지원되는 레코드 유형 목록은 지원되는 DNS 레코드 유형을 참조하세요.

하위 도메인 위임

레코드를 만들 때 NS 레코드와 SOA 레코드가 서로 일치하는지 확인합니다. NS 레코드와 SOA 레코드가 충돌하는 경우 일부 리졸버는 위임을 잘못된 것으로 판단하여 거부하고 쿼리에 대해 'NO DATA' 응답 캐시를 거부할 수 있습니다. 이렇게 되면 레코드의 공개 관리형 영역이 존재하지 않는 경우 제3자 재귀 리졸버가 공개 관리형 영역에 예상치 못한 대량의 쿼리를 보낼 수 있습니다.

예를 들어 example.comsubdomain.example.com, 두 개의 하위 도메인이 있는 경우를 가정해 보겠습니다. subdomain.example.com의 NS 및 SOA 레코드가 일치하지 않습니다. 둘 중 어느 영역에도 AAAA 레코드가 포함되어 있지 않습니다. 일부 제3자 재귀 리졸버가 subdomain.example.com에 AAAA 레코드를 쿼리하고 'NO DATA' 응답을 받는다면 리졸버는 subdomain.example.com의 잘못된 위임을 감지할 경우 해당 영역에서 AAAA 레코드의 부재에 대한 캐시를 거부합니다. 결과적으로 쿼리를 다시 시도합니다. 그 다음 이 정보에 대해 모든 Cloud Console 네임서버를 쿼리합니다.

등록기관

도메인 이름 등록기관은 공개 영역에 대한 인터넷 도메인 이름의 예약을 관리하는 조직입니다. 등록기관은 일반 최상위 도메인(gTLD) 레지스트리 또는 국가 코드 최상위 도메인(ccTLD) 레지스트리의 인증을 받아야 합니다. '상위' 수준 네임서버는 이러한 방법으로 SOA에 동의하고 영역의 NS 레코드를 업데이트하여 요청을 캐싱 또는 권한 네임서버로 보냅니다.

SOA 일련번호

SOA 일련번호는 DNS 영역의 버전 번호입니다. 모든 네임서버가 영역의 버전과 일치하려면 SOA 일련번호가 동일해야 합니다. DNS 관리 영역에서 생성되는 SOA 레코드의 일련번호는 영역 레코드 모음의 각 트랜잭션 변경 시 일정하게 증가합니다. 그러나 SOA 레코드의 일련번호를 RFC 1912에서 권장하는 ISO 8601 형식의 날짜를 포함한 임의의 번호로 변경할 수 있습니다.

DNSSEC

도메인 이름 시스템 보안 확장(DNSSEC)은 DNS 데이터의 취약점을 해결합니다. DNSSEC는 DNS 클라이언트(리졸버)에 DNS 데이터 인증, 인증된 존재 부정, 데이터 무결성을 제공하는 IETF 사양 집합입니다. 간단히 말해 DNSSEC는 소프트웨어에서 DNS 데이터의 출처를 확인하고 전송 과정에서 수정되지 않았음을 확인할 수 있는 방법을 제공합니다.

DNSSEC에 대한 자세한 내용은 RFC 4033을 참조하세요.

기타 일반 DNS 용어 목록은 RFC 7719를 참조하세요.