DNS란 무엇인가요?
소개
도메인 네임 시스템(DNS)은 인터넷이나 사설 네트워크에 연결된 컴퓨터, 서비스 또는 기타 리소스를 위한 계층적 분산 명명 시스템입니다. 브라우저가 컴퓨터 서비스나 장치를 찾아 연결해야 할 때마다 DNS는 보이지 않는 곳에서 기억하기 쉬운 도메인 이름을 해당 리소스의 숫자로 된 인터넷 프로토콜(IP) 주소로 변환합니다. DNS는 인터넷의 전화번호부와 같다고 할 수 있습니다. 인터넷에 연결된 모든 장치와 서비스를 사람들이 이름으로 쉽게 식별할 수 있도록 만들어졌기 때문입니다.
DNS 용어
도메인 이름
도메인 이름은 인터넷 리소스에 연결된 사용자 친화적인 이름입니다. 예를 들어 www.f5.com은 도메인 이름이며, 이 URL은 F5가 소유한 서버에 연결되어 있습니다.
도메인을 세분화한 것을 하위 도메인이라고 합니다. 예를 들어 support.f5.com은 F5.com의 지원용 하위 도메인입니다. 하위 도메인은 도메인 이름 왼쪽에서 마침표로 구분되는 부분입니다.
DNS 조회
DNS 조회는 클라이언트(예: 웹 브라우저)가 특정 도메인에 대해 DNS 서버에 질의하는 과정입니다. 그러면 DNS 서버가 IP 주소로 응답하고, 클라이언트는 이 주소를 통해 원하는 목적지에 도달합니다.
도메인 이름 공간
도메인 이름 공간(Domain Name Space)은 인터넷의 전반적인 명명 구조를 정의합니다. 최상위에 루트 도메인 이름이 있는 트리 형태의 도메인 이름 구조입니다. 이 루트 도메인에서 .com, .net, .org 등의 주요 도메인과 기타 도메인이 분기됩니다.
영역
네임스페이스 트리는 여러 영역으로 세분화됩니다. 각 영역은 특정 도메인에서 사용할 수 있는 리소스를 정의합니다.
네임 서버
네임 서버는 영역에 대한 정보를 저장합니다. 네임 서버에는 기본 네임 서버와 보조 네임 서버의 두 가지 유형이 있습니다. 모든 영역의 데이터는 기본 네임 서버와 보조 네임 서버 모두에 저장됩니다.
DNS 리졸버
DNS 리졸버는 DNS의 클라이언트 측 구성 요소입니다. 도메인 이름을 IP 주소로 변환하기 위해 필요한 쿼리를 시작하고 순서대로 처리하는 역할을 합니다.
DNS는 어떻게 작동하나요?
간단히 말해, 사용자가 브라우저에 입력한 도메인 이름(예: www.f5.com)은 DNS 서버를 통해 IP 주소(104.219.105.148)로 변환됩니다. 이를 통해 기기는 인터넷에서 사용자가 찾는 리소스(이 경우 F5 홈페이지)를 찾을 수 있습니다.
이 프로세스를 좀 더 자세히 살펴보겠습니다:
사용자가 브라우저에 도메인 이름 www.f5.com을 입력한다고 가정해 보겠습니다. 브라우저는 www.F5.com의 위치를 알 수 없으므로 로컬 DNS 서버(LDNS)에 요청을 보내 해당 웹사이트의 레코드가 있는지 확인합니다. LDNS에 해당 사이트의 레코드가 없으면 www.F5.com의 소유자를 확인하기 위해 인터넷 도메인을 재귀적으로 검색하기 시작합니다.
먼저 LDNS는 루트 서버 중 하나에 접속하고, 루트 서버는 LDNS를 .com DNS 서버로 안내합니다. 그러면 .com 서버는 www.F5.com의 소유자를 확인한 후 F5.com의 네임 서버(NS) 레코드를 LDNS에 알려 줍니다.

그런 다음 LDNS는 F5.com DNS 서버의 NS 레코드를 쿼리합니다. f5.com DNS 서버는 www.F5.com이라는 이름을 조회합니다. 해당 이름을 찾으면 주소(A) 레코드를 LDNS에 반환합니다. 이 A 레코드에는 요청 이름, LDNS에서 해당 이름에 할당된 IP 주소, 그리고 해당 이름의 TTL(Time to Live)이 포함됩니다. TTL은 LDNS가 F5.com DNS 서버에 다시 질의하기 전까지 A 레코드를 유지할 기간을 지정합니다.
LDNS는 A 레코드를 수신하면 TTL에 지정된 시간 동안 IP 주소 정보를 캐시합니다. 다른 클라이언트가 동일한 정보를 필요로 하는 경우, LDNS는 쿼리를 외부로 보내기 전에 자체 이름 캐시에서 응답합니다. 정보를 로컬에 보관할 수 있으므로 f5.com DNS 서버에 계속 질의할 필요가 없어 향후 해당 리소스에 더 빠르게 연결할 수 있습니다.

그런 다음 브라우저는 IP 주소를 사용하여 www.F5.com의 80번 포트에 연결하고 GET /… 요청을 전송합니다. 그러면 웹 서버가 웹 페이지 응답을 반환합니다.
실제로 DNS는 위의 예시에서 설명한 것보다 훨씬 복잡하지만, 이 예시를 통해 DNS의 작동 방식을 어느 정도 이해할 수 있습니다.
DNS 레코드와 일반적인 유형
DNS 레코드는 어떤 도메인 이름이 어떤 IP 주소와 연결되어 있는지를 DNS 서버에 알려 주는 매핑 파일입니다. 또한 DNS 서버가 해당 요청을 처리하는 방법도 지정합니다. DNS 레코드에는 여러 유형이 있지만, 특정 도메인의 모든 DNS 레코드는 DNS 영역(DNS Zone)이라는 곳에 저장됩니다. DNS 영역은 인터넷에서 단 하나의 특정 도메인에 해당하는 IP 주소를 조회할 수 있도록 해 주는 컨테이너라고 생각하면 됩니다.
일반적인 DNS 레코드 유형은 다음과 같습니다:
A 및 AAAA 레코드
주소 레코드 또는 A 레코드(호스트 레코드라고도 함)는 DNS의 핵심 레코드입니다. 이 레코드는 도메인을 IP 주소에 연결합니다. AAAA 레코드는 A 레코드와 동일한 역할을 하지만, 32비트 IPv4 주소 대신 128비트 IPv6 주소를 반환합니다.
NS 레코드
네임 서버(NS) 레코드는 도메인의 DNS 정보를 전달하는 서버를 지정합니다. 일반적으로 도메인에는 기본 및 보조 네임 서버 레코드가 있습니다.
MX 레코드
메일 교환(MX) 레코드는 이메일 메시지를 특정 도메인의 서버로 전달합니다. 하나의 도메인에 각각 우선순위가 다른 여러 MX 레코드를 정의할 수 있습니다. 숫자가 낮을수록 우선순위가 높습니다. 첫 번째 우선순위 레코드를 사용하여 메일을 전달할 수 없는 경우 두 번째 우선순위 레코드가 사용되며, 이후에도 같은 방식으로 처리됩니다.
TXT 레코드
텍스트 또는 TXT 레코드에는 임의의 텍스트를 포함할 수 있으며, 기계가 읽을 수 있는 텍스트를 정의하는 데에도 사용할 수 있습니다.
CNAME 레코드
정규 이름(Canonical NAME), 즉 CNAME 레코드는 별칭을 다른 정규 도메인 이름에 연결합니다. 예를 들어 alias.example.com을 example.com에 연결할 수 있습니다.
DNS의 중요성과 한계
DNS는 인터넷을 구현하는 핵심 기술 중 하나이며, 네트워크 인프라의 필수 구성 요소이기도 합니다. 가용성과 지능성, 보안성, 확장성을 갖춘 DNS 인프라를 구축하는 것이 매우 중요하기 때문에 DNS는 단순히 콘텐츠와 애플리케이션을 제공하는 데 그치지 않습니다. 분산형 이중화 아키텍처를 관리하여 높은 가용성과 우수한 사용자 응답 시간을 보장합니다. DNS에 장애가 발생하면 대부분의 웹 애플리케이션이 제대로 작동하지 않게 됩니다. 이처럼 DNS는 매우 중요할 뿐만 아니라 공격의 주요 표적이 되기도 합니다. 적절한 DNS 인프라가 없다면 고객이 애플리케이션이나 콘텐츠에 접근할 수 없게 되어 필요한 서비스를 다른 곳에서 찾게 될 수 있습니다.
하지만 표준 DNS 서비스에는 몇 가지 한계가 있습니다. 우선 DNS는 애플리케이션, 웹사이트 또는 콘텐츠에 접근할 수 있도록 해 주지만, 해당 대상이 실제로 정상 작동 중인지, 심지어 존재하는지조차 확인하지 않습니다.
또한 DNS에는 실질적인 부하 분산 기능이 없습니다. 특정 IP에서 지원하는 애플리케이션에 과부하가 걸리거나 애플리케이션이 중단되더라도 모든 IP 주소를 계속 사용합니다.
또한 DNS에는 상태 저장 애플리케이션이라는 개념이 없으므로 사용자가 동일한 IP 주소로 다시 연결된다고 보장할 수 없습니다. 예를 들어 특정 데이터 센터에 접속하여 해당 데이터 센터에서 유지되는 장바구니를 만들더라도, 다음번에 도메인 이름을 확인할 때 동일한 IP를 받는다는 보장은 없습니다.
마지막으로, 표준 DNS 서버는 초당 처리할 수 있는 DNS 쿼리 수가 제한되어 있어 분산 서비스 거부(DDoS) 공격에 취약합니다.
보안 문제
DNS는 인터넷의 중추이지만 네트워크에서 가장 취약한 지점 중 하나이기도 하므로 공격자에게 매우 가치 있는 표적이 됩니다. DDoS 공격은 DNS 서버에 과도한 트래픽을 유발해 서버가 탈취되거나 장애를 일으키게 하고, 요청이 악성 서버로 리디렉션되도록 만들 수 있습니다. 이를 방지하려면 고성능의 분산형 보안 아키텍처를 네트워크에 통합해야 합니다. 또한 기업은 DNS 트래픽 급증 및 DDoS 공격 발생 시 DNS 서버를 추가해야 합니다.
DNS 서버와 클라우드 서비스는 초당 다양한 양의 요청을 처리할 수 있지만, 쿼리가 증가할수록 비용도 늘어나며 변경이 필요할 때 수동 개입이 필요한 경우가 많습니다. 또한 새로운 취약점이 계속 발견되기 때문에 기존 DNS 서버는 잦은 유지보수와 패치가 필요해 비용 부담이 더욱 커집니다.
DNS 인프라에서 애플리케이션 전송 컨트롤러의 역할
이제 DNS가 심각한 공격에 취약하다는 점을 확인했으므로, 애플리케이션 전송 컨트롤러(ADC)가 DNS 인프라를 보호하는 데 어떻게 도움이 되는지 살펴보겠습니다. ADC는 여러 DNS 서버의 부하를 분산하고 응답을 캐싱하여 확장성을 제공하며, DNS 서버가 대량의 트래픽과 대규모 공격을 처리할 수 있도록 합니다. 이 기능을 통해 고객은 여러 DNS 서버를 동시에 배포하여 애플리케이션 가용성을 극대화하고 속도와 성능을 향상할 수 있습니다. 또한 ADC는 DDoS 공격을 신속하게 탐지하여 해당 연결을 서버에서 다른 곳으로 우회시키거나 완전히 차단합니다. ADC는 DNSSEC를 지원하며, 조직이 캐시 포이즈닝 및 중간자 공격과 같은 위협을 방어할 수 있도록 합니다. 이러한 모든 이점 덕분에 ADC는 과부하나 공격에 대비한 백업용 추가 DNS 서버를 구축할 필요성을 줄여 고객의 총소유비용을 절감합니다.
요약하면, 고성능 ADC는 DNS 서버를 다양한 공격으로부터 보호할 뿐만 아니라, DNS 서버가 대량의 트래픽을 처리할 수 있도록 지원하면서 확장성을 제공하고 성능을 개선하며 총소유비용(TCO)을 절감할 수 있습니다.
미래
모바일 앱과 사물 인터넷(IoT) 기기 같은 최신 기술이 성장함에 따라 DNS도 함께 성장하고 있습니다. 또한 애플리케이션 수와 해당 애플리케이션에 접속하는 트래픽 양도 빠르게 증가하고 있습니다. 지난 5년 동안 .com 및 기타 주소에 대한 DNS 쿼리 양은 두 배로 늘었습니다. 2016년에는 1,000만 개가 넘는 도메인 이름이 인터넷에 추가되었으며, 클라우드, 모바일 및 IoT 구현이 갈수록 확대됨에 따라 DNS는 더욱 빠른 속도로 성장할 것으로 예상됩니다. 최근 전 세계 인터넷 트래픽을 대상으로 실시한 일부 연구에 따르면 인터넷 사용자 수는 2020년 말까지 41억 명으로 증가할 것으로 나타났습니다. DNS 서버는 인터넷에 매우 중요한 요소이므로 DNS가 제대로 작동하지 않으면 인터넷은 사실상 무용지물이 됩니다.
IoT와 마찬가지로 클라우드 서비스의 인기도 지난 몇 년간 크게 높아졌습니다. 이에 따라 DNS 인프라와 그에 따른 이점 및 위협을 고려하는 것이 그 어느 때보다 중요해졌습니다. 한편으로 클라우드 기반 권한 DNS는 더 뛰어난 성능과 고가용성, 보안 및 확장성을 제공합니다. 다른 한편으로는 DNS 인프라 공격 및 DDoS 공격과 같은 위협에 취약하기도 합니다.
이러한 위협은 웹사이트, 애플리케이션, 클라우드 서비스 및 기타 리소스에 대한 접근을 심각하게 방해할 수 있습니다. 이러한 공격을 차단하고 직원과 고객이 언제 어디서나 필요한 리소스에 계속 접근할 수 있도록 하려면 IT 인프라를 효과적으로 계획하고 관리하는 것이 무엇보다 중요합니다.
2017년 10월 5일 게시
