개요

호스트 네임IP 주소로 변환시켜주는 디렉터리 서비스를 DNS [domain name system]이라 호칭한다. DNS 는 서버들이 계층구조로 구현된 분산 데이터베이스이고, 호스트가 분산 데이터베이스로 질의하도록 허락하는 애플리케이션 계층 프로토콜이다. DNS 서버는 주로 BIND를 수행하는 유닉스 컴퓨터 이다. DNS 프로토콜은 UDP 상에서 수행되고 포트 번호 53을 사용한다. DNS는 DNS를 사용하는 애플리케이션에 추가 지연을 주지만, 캐시 서버를 이용하거나 내부 캐시를 사용함으로써 지연을 줄일 수 있다.

제공하는 서비스

  1. 호스트 주소 변환: 호스트 주소를 IP 주소로 변환한다.
  2. 호스트 엘리어싱: 제시한 별칭 호스트 네임에 대한 정식 호스트 네임을 얻기 위해 사용될 수 있다.
  3. 메일 서버 엘리어싱: 전자메일 주소는 기억하기 쉬운 것이 좋다. 대부분의 경우 메일 서버의 내부 도메인은 mail.hostname.com 으로 주어지는데, 이를 호스트 네임으로 접근 할 수 있게 해주는 서비스이다. 보통 MX 레코드를 통해 구현한다.
  4. 부하 분산: DNS는 중복 웹 서버 같은 여러 중복 서버 사이에 부하를 분산하기 위해서도 사용되고 있다. 중복 웹 서버의 경우 여러 IP주소가 하나의 정식 호스트 네임으로 연결되며, 클라이언트가 주소 집합으로 매핑하는 호스트 네임에 대한 질의를 하면, 서버는 IP 주소의 집합 전체를 전송한다. 각 응답에서의 주소는 순환식으로 오며 클라이언트는 도착한 주소의 첫번째 IP 주소로 메시지를 보내어서 트래픽을 분산시킨다.

동작 원리

분산계층 데이터 베이스

DNS분산계층.png

어떠한 단일 DNS서버도 인터넷에 있는 모든 호스트에 대한 매핑을 갖지 않지만, 그것은 DNS 서버 사이에 분산되어 저장된다.

  1. 루트 DNS 서버 : 모든 DNS 트래픽은 우선 이곳으로 향한다. 이곳에서 .com .kr 같은 최상위 레벨 도메인 네임서버의 주소를 알려준다.
  2. 최상위 레벨 도메인 네임 서버 (TLD) : 국가 코드, 기관 코드등을 가지며 책임 서버의 IP 주소로 보낸다.
  3. 책임 도메인 네임 서버 (Authoritative) : 기관이나 개인이 운영하며, 네임서버를 통해 자신의 IP 주소나 원하는 IP 주소를 반환한다.
  4. 로컬 DNS 서버: 기관, 대학이나 ISP 에서 운영하는 DNS 서버로 호스트의 근처에서 프록시로 동작하는 DNS 서버에게 전달되고, 로컬 DNS 서버는 그 질의를 DNS 서버 계층으로 전달한다.

DNS 캐싱

DNS는 지연 성능 향상과 네트워크의 DNS 메시지 수를 줄이기 위해서 캐싱을 사용한다. 질의 사슬에서 DNS 서버가 DNS 응답을 받았을떄, 그것은 로컬 메모리에 응답에 대한 정보를 저장한다. 그 후에는 저장된 정보를 바탕으로 바로 DNS 응답을 보낼 수 있게 되어, 지연속도가 낮아진다.

DNS 레코드

DNS레코드.png

DNS 분산 데이터베이스를 구현한 DNS 서버들은 호스트 네임을 IP 주소로 매핑하기 위한 자원 레코드(resource record RR)을 저장한다. 각 DNS는 최소 하나이상의 자원 레코드로 응답을 한다. 자원 레코드는 다음과 같은 필드를 포함하는 4개의 투플로 되어 있다.

Name Value Type TTL
  1. Name: 호스트 네임이나 도메인
  2. Value: 해당하는 주소
  3. Type: DNS 질이 응답 종류
  4. TTL: 캐시에서 제거되는 시간설정 (응답되지 않는다.)

DNS 메시지

DNS메시지.png

DNS 공격

  1. 대역폭 플러딩 공격: 다량의 가짜 질이를 보냄으로써 DNS 서버를 마비
  2. 중간자 공격: DNS 질이를 가로채어 가짜 응답을 리턴
  3. DNS 중독 공격: DNS 서버로 가짜 응답을 보내어 캐시에 이상한 정보가 저장되도록 함

DNS 에 문제가 생기면 인터넷이 마비되고 위조나 변조로 보안상 매우 취약해 진다.