도메인 이름을 컴퓨터가 읽을 수 있는 IP 주소와 일치시키는 DNS 조회에서 DNS 트리 위로의 이동은 DNS 서버 또는 클라이언트에 의해 수행될 수 있습니다.
이 글을 읽은 후에 다음을 할 수 있습니다:
관련 콘텐츠
인터넷에서 가장 인기 있는 인사이트를 한 달에 한 번 정리하는 Cloudflare의 월간 요약본 theNET를 구독하세요!
글 링크 복사
재귀 DNS 조회는 한 DNS 서버에서 다른 여러 DNS 서버와 통신하여 IP 주소를 찾아내고 클라이언트에 반환하는 것입니다.이는 클라이언트가 조회와 관련된 각 DNS 서버와 직접 통신하는 반복 DNS 쿼리와 대조됩니다.이는 아주 기술적인 정의이지만, DNS 시스템 및 재귀와 반복의 차이점을 자세히 살펴보면 문제를 해결하는 데 도움이 될 것입니다.
사용자가 도메인 이름(예: 'cloudflare.com')을 브라우저 창에 입력할 때마다 DNS 조회가 트리거됩니다. 그런 다음 DNS 서버라고 하는 일련의 원격 컴퓨터가 해당 도메인의 IP 주소를 찾아 사용자의 컴퓨터로 반환하여 올바른 웹 사이트에 액세스할 수 있도록 합니다.
DNS 조회를 완료하려면 여러 가지 유형의 DNS 서버가 함께 작동해야 합니다.DNS 확인자, DNS 루트 서버, DNS TLD 서버, DNS 권한 있는 네임서버는 모두 조회를 완료하기 위한 정보를 제공해야 합니다.캐싱의 경우 이러한 서버 중 하나가 이전 조회 중의 쿼리에 대한 응답을 저장한 다음 메모리로부터 전달할 수 있습니다.
DNS 조회의 작동 방식에 대한 자세한 내용은 DNS 서버란?을 참조하세요.
재귀와 반복은 문제를 해결하는 방법 두 가지를 설명하는 컴퓨터 과학 용어입니다. 재귀에서는 프로그램에서 조건이 충족될 때까지 반복해서 자신을 호출하는 반면, 반복에서는 조건이 충족될 때까지 일련의 명령이 반복됩니다. 이 미묘한 차이는 코드에 들어가지 않고는 설명하기 어렵지만, 핵심은 재귀가 반복해서 호출되는 솔루션이라는 점입니다.
예를 들어, Jim이 집안에서 열쇠를 잃어 버렸고 열쇠를 찾을 수 있는 체계적인 방법을 찾고 있다고 상상해 보세요. 재귀 솔루션은 Jim이 키를 찾을 때까지 키를 계속 찾는 것입니다. Jim은 찾기 시작하고, 열쇠를 찾지 못하면, 원래 지시로 돌아가 열쇠를 찾을 때까지 계속 찾습니다. 반복 솔루션은 Jim이 5분 동안 방 하나를 찾아본 다음 지시로 돌아가서 5분 동안 다음 방을 찾아보고, 키를 찾거나 찾아볼 전체 방 목록을 찾아볼 때까지 이 주기를 계속하는 것입니다.
재귀와 반복에 대한 심층적인 이해는 재귀 및 반복 DNS 조회의 차이점을 이해하는 데는 필요하지 않습니다. 재귀 조회에서 DNS 서버는 재귀를 수행하고 클라이언트(종종 사용자의 운영 체제)로 반환할 IP 주소가 있을 때까지 다른 DNS 서버에 계속 쿼리합니다. 반복 DNS 쿼리에서 각 DNS 쿼리는 다른 DNS 서버가 요청할 주소를 사용하여 클라이언트에 직접 응답하고 클라이언트는 DNS 서버 중 하나가 지정된 도메인에 대한 올바른 IP 주소로 응답할 때까지 DNS 서버 쿼리를 계속합니다.
즉, 클라이언트는 재귀 DNS 쿼리에서 일종의 위임을 수행합니다. 클라이언트는 DNS 확인자에게 "이봐요, 난 이 도메인의 IP 주소가 필요해요. 찾아보고 찾을 때까지 내게 연락하지 마세요"라고 이야기하는 셈입니다. 한편, 반복 쿼리에서 클라이언트는 DNS 확인자에게 "이봐요, 난 이 도메인의 IP 주소가 필요해요. 조회 과정에서 다음 DNS 서버의 주소를 알려 주면 내가 직접 찾을 수 있어요."라고 이야기하는 셈입니다.
재귀 DNS 쿼리는 일반적으로 반복 쿼리보다 빠르게 해결되는 경향이 있습니다. 이는 캐싱 때문입니다. 재귀 DNS 서버는 수행하는 모든 쿼리에 대한 최종 응답을 캐시하고 특정 시간(Time-To-Live라고 함) 동안 최종 응답을 저장합니다.
재귀 확인자는 캐시에 이미 있는 IP 주소에 대한 쿼리를 받으면 다른 DNS 서버와 통신하지 않고도 캐시된 응답을 클라이언트에게 신속하게 제공할 수 있습니다. 캐시에서 응답을 신속하게 제공하는 것은 a) DNS 서버가 많은 클라이언트에게 서비스를 제공하거나 b) 요청된 웹 사이트가 매우 인기 있는 경우 매우 가능성이 높습니다.
아쉽게도, 개방형 DNS 서버에서 재귀 DNS 쿼리를 허용하는 구성에서는 공격자가 DNS 증폭 공격 및 DNS 캐시 포이즈닝을 수행할 수 있으므로 보안 취약점이 발생합니다.
DNS 증폭 공격에서 공격자는 일반적으로 컴퓨터 그룹(봇넷이라고 함)을 사용하여 스푸핑된 IP 주소를 사용하여 대량의 DNS 쿼리를 보냅니다. 스푸핑된 IP 주소는 위조된 반환 주소와 같습니다. 공격자는 자신의 IP에서 요청을 보내지만, 피해자에게 응답을 보내도록 요청합니다. 공격을 악화시키기 위해 공격자는 증폭이라는 기술도 사용하는데, 증폭의 경우 스푸핑된 요청이 매우 긴 응답을 요청합니다. 피해를 입은 서비스에서는 길고 원치 않는 DNS 응답의 폭주를 받게 되며, 이에 따라 서버가 방해 받거나 심지어 다운까지 될 수 있는 습니다. 이는 일종의 DDoS 공격입니다.
이것은 십대 장난 꾸러기 그룹이 피자 가게에 를 전화해서 각각 피자 12판을 주문하는 것과 같습니다. 배달 주소지로 자신의 주소를 알려주는 대신 전혀 의심하지 않는 이웃집의 주소를 알려줍니다. 그러면 원치 않는 큰 피자를 여러 판 배달 받는 피해자는 그날 많은 혼란을 겪을 것입니다.
증폭된 DNS 패킷은 재귀 DNS 쿼리에 대한 응답이므로 이러한 종류의 공격을 수행하려면 재귀 쿼리를 수락하는 DNS 서버가 필요합니다.
DNS 캐시 포이즈닝 공격에서 재귀 DNS 서버가 다른 DNS 서버의 IP 주소를 요청하면 공격자는 요청을 가로채서 악의적 웹 사이트의 IP 주소인 가짜 응답을 제공합니다. 재귀 DNS 서버는 원래 클라이언트에 이 IP 주소를 보낼 뿐만 아니라 캐시에 응답을 저장하기도 합니다. 동일한 도메인 이름에 대한 IP를 요청하는 모든 사용자는 악의적 웹 사이트로 보내집니다. 인기 있는 도메인 이름과 인기 있는 DNS 확인자의 경우 이 공격으로 수천 명의 사용자에게 영향이 미칠 수 있습니다.
반복 DNS 쿼리에서 클라이언트는 각 DNS 서버에 직접 응답을 요청합니다. 공격자가 쿼리에 대해 위조된 응답을 보낼 수 있더라도 단일 클라이언트에만 영향을 미치므로 일반적으로 공격자가 시간을 할애할 가치가 없습니다.
Cloudflare의 관리형 DNS 서비스는 일반적으로 경쟁업체의 DNS 또는 공용 DNS보다 빠르게 DNS 쿼리를 해결합니다.또한 Cloudflare DNS는 DNS 서버와 쿼리를 안전하게 유지하도록 설계된 엄격한 보안 프로토콜인 DNSSEC를 지원합니다.