네트워크 - DNS(2)

2020-11-19

컴퓨터 네트워크를 공부하면서 정리를 한 내용들 입니다.

-참고 K-mooc 부산 대학교 유영환 교수님 : 컴퓨터 네트워크 강의


Local DNS server

계층구조 Root, Top-Level Domain, Authoritative 여기에 들어가는 것이 아니라

Local DNS server는 클라이언트 입장에서 이야기 하는 것입니다.

클라이언트 입장에서 처음 접속하는 서버인 것이죠.

‘amazon.com에 접속 하고 싶은데 amazon.com의 주소를 아는가’ 물어보고

Local DNS Server가 모른다면 root나 Top-Lever Domain에서 알아 와 알려 줍니다.

Local DNS들은 최근에 알아냈던 것을 저장하고, 한동안 쓰지 않으면 운영 체제의 캐시처럼 정보가 삭제 됩니다.

DNS Name Resolution

실제로 도메인 네임 시스템이 어떤 식으로 동작하는지 살펴 보겠습니다.

Cis.poly.edu 이런 주소를 가진 호스트가 있고,

클라이언트가 gaia.cs.umass.edu로 접속하고 싶은 것입니다.

호스트 네임은 아는데 호스트의 실제 IP 주소는 모르는 상황이고,

알아 내기 위해서 query 메시지를 보내게 되는데

IP 주소를 찾아 오는 방식으로 Iterated query

Recursive query라는 것이 있습니다.

Iterated query : 계속 반복해서 query를 날리는 방식

Iterated query

그럼 먼저 같은 기관에 있는 로컬 DNS 서버에게

gaia.cs.umass.edu의 IP 주소를 가지고 있는가 확인합니다.

만약에 이 서버를 이전에 접속 한 적이 있다,

로컬 DNS 서버는 이 주소를 가지고 있을 것입니다.

그 경우에는 바로 응답이 되고,

그런데 만일 없을 경우,

그 때 로컬 DNS 서버는 root한테 물어봅니다.

만약 root도 모른다면?

root는 그것 까지는 모르지만 edu를 대표하는 TLD 서버는 알고 있다 라고 가르쳐 줍니다.

그러면 edu에 해당하는 TLD 서버에게 확인합니다.

특정한 호스트는 모르지만 umass라는 대학을 대표하는

authoritative DNS 서버 주소는 알고 있으니까 확인해보라고 주소를 알려줍니다.

그럼 해당 DNS는 자신의 기관 내에 있는 모든 서버의 IP를 갖고 있기 때문에

응답을 해 줄 수 있고 그 응답을 받아서 클라이언트한테 알려 줍니다.

recursive query

로컬 DNS 서버한테 물어 보면 로컬 DNS 서버는

자기가 모를 경우에 root 한테 물어보고,

root가 Iterated query에서는 root가 로컬 DNS 서버에게 바로 응답을 했지만,

그렇게 하지 않고 직접 물어보는 방식입니다.

다음에 TLD DNS서버는 Authoritative DNS Server한테 직접 물어보고

최종적으로 알아내서 그 결과를 거꾸로 전달 해 주는

이런 recursive, 순환적인 형태를 가지는 query 입니다.

어떤것이 더 나을까?

사용자 입장에서 편리한 것은 recursive query가 편리해 보입니다.

그러나 recursive query는 별로 권장하지 않습니다.

많은 DNS 서버에서는 recursive query 방식을 못 하도록 제한을 해 놓고 있습니다.

그 이유는 상위 계층으로 갈 수록 더 많은 일을 수행해야 하기 때문입니다.

이 예에서는 Root DNS가 로컬 DNS의 요청을 받아서

그것을 TLD에게 전달하고 또 밑으로 전달하고 해서

이 응답이 올 때 까지 기다렸다가 그 응답이 오면

다시 응답 해 주는 과정을 거쳐야 합니다.

Root의 밑에는 많은 로컬 DNS들이 요청을 보낼 수 있는데

이것들을 다 처리하려면 굉장히 오버헤드가 심해지게 됩니다.

Attacking DNS

DNS에 가해질 수 있는 공격의 유형을 살펴 보면 기본적으로

DDoS attack(Distributed Denial of Service attack)이 가능합니다.

DDoS attack

recursive query를 할 경우에는 많은 request가 root나 TLD에 몰려서 문제가 발생 할 수 있습니다.

그런데 root에 대해서는 사실 이런 공격이 크게 성공하지 못했습니다.

왜냐하면 왠만한 DNS 서버들은 root에 직접 갈 필요가 없습니다.

로컬 DNS들이 TLD 주소를 이미 알고 있기 때문에 root서버를 통과하지 않아서 DDoS attack이 성공하지 못했습니다.

Amplification attacks

공격하려는 사람이 피해자에게 공격하려고 할 때

자신이 직접 request를 보내면 정체가 탄로 날 수가 있기 때문에

그래서 다른 컴퓨터들을 감염 시켜서 DNS 서버한테 데이터를 보내게 합니다.

어떤 데이터를 보내냐 하면 특정한 서버의 주소를 알려달라는 query 메시지를 보내는데

query 메시지를 보낼 때 자신들의 주소를 담지 않고 query를 마치 피해자가 보낸 것 처럼

피해자의 IP 주소를 담아서 보냅니다.

그러면 서버들은 query에 대한 response를 각각 query를 보냈던 얘들한테 해야 하는데

DNS query에 대한 response가 다 피해자에게 가 버려서 보내지도 않은 query 메시지 때문에

동작을 할 수 없게 되는 문제가 발생할 수 있습니다.