나의 삽질 저장소!

DNS 원리와 동작 - 2편

by softPine

이전 글에서 언급한 것처럼 DNS에서는 각 계층의 권한 DNS 서버가 각각의 DB를 가지고 있고, 폴 리졸버가 이름 변환 처리를 하면서 계층을 순회하고 검색한다. 풀 리졸버에서는 이름 변환 비용을 낮추기 위해 캐시를 활용하기도 한다.

DNS 구성 요소와 각 요소의 역할

DNS에서 위임하는 쪽을 부모(Parent)라 하고 위임받는 쪽을 자식(Child)이라고 한다. DNS 기능은 크게 정보를 제공하는 기능이름을 변환하는 기능으로 나눌 수 있다. 이름에 관한 정보를 제공하는 기능은 권한 DNS 서버가 제공하고 이름을 변환하는 기능은 리졸버(Resolver)가 제공한다. 리졸버는 클라이언트 애플리케이션의 이름 변환 라이브러리에 해당하는 스텁 리졸버 (Stub Resolver)와 이름 변환 서비스를 제공하는 풀 리졸버(Full Resolver)로 나뉜다. 스텁 리졸버와 풀 리졸버 사이에는 질의와 응답을 중계하는 포워더(DNS 프록시)가 들어갈 수 있다.

이름 변환 과정

  1. 애플리케이션에서 이름 변환을 요청받은 스텁 리졸버는 풀 리졸버에게 DNS 질의를 보냄
  2. 풀 리졸버는 루트 DNS 서버의 정보가 사전에 설정되어 있으므로 스텁 리졸버에게 받은 질의와 동일한 내용을 루트 DNS 서버에 질의한다.
  3. 루트 DNS 서버는 TLD의 위임 정보만 알고 있으므로 위임 정보를 반환한다.
  4. 풀 리졸버는 루트 DNS 서버에서 얻은 위임 정보에 따라 스텁 리졸버에게 받은 질의와 동일한 내용을 TLS DNS 서버로 질의한다.
  5. TLD DNS 서버는 조직 도메인명의 위임 정보만 알고 있으므로 위임 정보를 반환한다.
  6. 풀 리졸버는 TLD DNS 서버로부터 얻은 위임 정보에 따라 스텁 리졸버에게 받은 질의와 동일한 내용을 조직의 DNS 서버로 질의한다.
  7. 풀 리졸버는 이름 변환이 완료되었음을 판정하고 스텁 리졸버로 결과를 반환한다.


위 순서를 거쳐서 애플리케이션은 IP 주소와 같은 정보를 얻을 수 있다.

풀 리졸버에서 이름을 변환하는 것은 비용도 많이 들고 시간도 오래 걸리는 작업이다. 따라서 검색 도중의 정보와 검색 결과를 캐시(Cache)에 보관했다 이후에 사용하여 클라이언트가 질의한 내용에 응답하는 시간을 줄임과 동시에 권한 DNS 서버로의 질의 수를 줄인다. 이 캐시 기능에 주목해서 풀 리졸버를 '캐시 DNS 서버'라고도 부른다. 하지만 DNS 사용을 정의하는 RFC 1034/1035에는 이러한 내용이 없다.

캐시라는 양날의 검

풀 리졸버의 캐시는 이름을 변환할 때 부하나 시간을 단축하는 이점은 있지만, 도메인명과 주소값을 빠르게 대응하여 변경할 수 없다는 약점이 있다. 이 문제를 해결하기 위해 DB의 엔트리에 캐시 가능한 시간(Time To Live, TTL)을 설정하고, 단시간에 변경하는 경우에는 짧은 TTL을 지정한다. 또한 캐시에 악의적인 정보를 주입하면 캐시가 유지되는 동안 풀 리졸버는 해당 정보에 기반해서 응답하게 되므로 문제가 생긴다. 이런 공격 수법을 '캐시 오염 공격(Cache Poisoning Attack)'이라 한다.

DNS에 등록된 정보

타입에는 IPv4 주소를 저장하는 A나 IPv6 주소를 저장하는 AAAA, 메일 서버 정보를 저장하는 MX, 위임 정보를 나타내는 NS, 존 관리 정보를 저장하는 SOA, 별칭 변환의 정식 이름을 저장하는 CNAME 등이 있다. 각 타입의 리소스 레코드를 A 리소스 레코드, AAAA 리소스 레코드라 한다.

또한 도메인명 마지막에 점(.)이 있으면 절대 도메인명이라고 하며 완전한 도메인명을 나타낸다. 반대로 마지막에 점을 생략한 것은 상대 도메인명이라고 하며 문맥에 따라 도메인명이 채워진다.


출처 : 인프라 엔지니어의 교과서 시스템 구축과 관리편 5장 DNS

'IT 기반 지식 > DNS' 카테고리의 다른 글

DNS에서 사용되는 레코드 유형 - 3편  (0) 2021.03.19
DNS란? - 1편  (0) 2021.03.19

블로그의 정보

나의 삽질저장소

softPine

활동하기