진진리 2024. 5. 24. 14:26
728x90

도메인 이름 시스템(DNS, Domain Name Service)

  • DNS의 필요성
    • 도메인 이름과 IP주소를 매핑
    • 컴퓨터는 통신할 때 숫자인 IP 주소를 처리
    • 사람들은 IP 주소보다 사용하기 편리한 이름을 사용함
  • DNS 변환 과정

FTP를 사용하는 상황인 경우

  • 사용자는 호스트 이름을 파일 전송 클라이언트에게 전달
  • 파일 전송 클라이언트는 호스트 이름을 DNS 클라이언트에 전달
  • 부팅 시 알게된 DNS 서버의 IP주소를 이용하여 파일 서버의 도메인 이름을 조회(query)
  • DNS 서버는 파일 서버의 IP 주소를 응답
  • DNS 클라이언트는 IP 주소를 파일 전송 클라이언트에게 전달
  • 파일 전송 클라이언트는 수신한 IP 주소로 파일 서버에 접속

이름 공간

  • 계층적 이름 공간을 가지기 위해 도메인 이름 공간을 만들어야 함
  • 트리는 0에서 127까지의 128개 레이블(label)을 가짐
    • 레이블: 각 노드는 레이블을 가지는데 이는 최대 63개의 문자로 구성
    • 루트 레이블은 null string, empty string으로 불림
    • 자식 노드들이 다른 레이블을 가지도록 하여 도메인 이름의 유일성을 보장
  • 모든 트리는 루트에서 연결되며 트리의 각 레벨이 계층 레벨을 나타냄

  • 도메인 이름
    • 점(.)으로 구분
    • 항상 노드에서 루트 방향으로 읽음
    • 완전한 도메인 이름은 항상 점으로 끝남

아래부터 위로 찾아 올라감, www는 서비스의 종류(Web, Mail FTP 등)

  • FQDN(Fully Qualified Domain Name)
    • ex) chanllenger.aic.hu.ac.kr.
    • 레이블이 널 스트링으로 끝나는 것
    • 호스트의 완전한 이름을 포함하는 도메인 이름
    • DNS 서버는 하나의 주소에 대해 하나의 FQDN을 가짐
  • PQDN: 레이블이 널 스트링으로 끝나지 않을 때
    • 해석할 이름이 클라이언트와 동일한 사이트에 속해 있을 때

 

  • 도메인
    • 도메인 이름 공간의 서브 트리
    • 도메인 이름은 서브 트리의 맨 상위에 있는 도메인 이름

 

  • 이름 서버의 계층 구조
    • 도메인 이름 공간에 포함된 정보를 이름 공간의 첫 번째 레벨에 기초하여 많은 도메인으로 나눔

 

  • 영역(Zone)
    • 서버가 책임을 지거나 권한을 가지는 곳
    • 서버가 도메인을 서브 도메인으로 나누고 다른 서버에 권한을 이양하지 않았다면 도메인 = 영역
    • 서버는 영역 파일(zone file)이라는 데이터베이스를 가지며 그 도메인 내의 모든 노드 정보를 여기에 보관

 

  • 루트 서버
    • 전체 트리를 영역으로 가지는 서버
    • 보통 도메인에 대한 어떠한 정보도 가지지 않으며 권한을 이양한 서버들에 대한 참조만 가짐
    • 13대 이상 -> 부하 분산을 위한 미러 서버 운영
  • 1차 및 2차 서버
    • 1차 서버: 자신이 권한을 가지는 영역에 대한 파일을 가짐
    • 2차 서버: 다른 서버로부터 영역에 관한 정보를 수신하여 로컬 디스크에 파일을 저장
      • 영역 파일을 생성하지 않고 갱신하지 않음

인터넷에서 사용되는 DNS

  • 도메인 이름 공간(트리)
    • 일반 도메인, 국가 도메인, 인버스(inverse)

  • 일반 도메인
    • mil, com, net, org, edu, gov 등 - 도메인을 통해 성격 유추 가능

 

  •  국가 도메인
    • ISO에서 정한 ISO 3166-1 표준에 따름
    • ex. 한남대학교 주소: hnu,ac,kr
  • 인버스 도메인
    • IP 주소를 호스트 이름으로 변환하는데 사용
    • 서버가 클라이언트에게 이러한 변환을 요청 받은 경우만 수행
    • 인버스 또는 포인터 조회라고 함
    • 인버스 도메인을 처리하는 서버들도 계층적

 

  • 도메인 관리 체계
    • ICANN: 국제 인터넷 주소 관리 기구
      • DNS 루트 관리, 새로운 최상위 도메인 할당, IP 주소 관리, 레지스트리와 레지스트라 승인
    • 레지스트리: 각각의 최상위 도메인을 관리하는 기관
      • .kr의 경우 한국인터넷진흥원에서 관리
    • 레지스트라: 도메인 등록 대행업체
      • 레지스트리의 위탁을 받아 도메인을 등록 대행하는 업체
      • 도메인 소유자(레지스트란트)에게 일정한 비용을 받고 등록
    • 레지스트란트: 도메인을 개인 목적이나 사업 목적으로 소유권을 등록하여 사용하는 자
    • 리셀러: 레지스트라가 되기 위해서 다른 레지스트라에서 도메인을 사 와서 되파는 형식으로 운영

 

 


변환

  • 이름-주소 변환
    • 호스트 이름(도메인 주소) <-> IP 주소 변환
    • DHCP 프로토콜로 IP 주소를 할당 받으면서 DNS 서버 IP 주소를 DHCP Option 6을 통해 함께 받음
    • 보통 2개의 DNS IP 주소를 받는다.
      • 1차 DNS 서버가 동작하지 않으면 2차 DNS 서버에게 조회
  • 변환기
    • 변환을 원하는 호스트는 변환기(resolver)라는 DNS 클라이언트를 호출
    • 가장 가까운 DNS 서버에 접속
    • 정보가 없다면 다른 서버를 참조하거나 다른 서버가 응답하도록 요청
  • 재귀적 변환
    • 사용자 PC -> 로컬 DNS 서버 -> Root 서버 -> 최상위 계층 도메인 서버(.com 서버) -> 목적지 호스트의 IP 주소를 알고 있는 로컬 DNS 서버
    • 다시 역순으로 응답

  • 반복적 변환
    • 사용자 PC -> 로컬 DNS 서버
    • 로컬 DNS 서버 <-> Root 서버
    • 로컬 DNS 서버 <-> .com 서버
    • 로컬 DNS 서버 <-> 로컬 DNS 서버

 

  • 캐싱
    • 서버가 다른 서버에게 매핑 정보를 요청하고 응답을 수신하면 클라이언트에 전달하기 전에 캐시 메모리에 저장
    • 자신의 캐시 메모리에 검색하는 경우: 캐시 메모리에서 얻은 것임을 알리기 위해 서버는 응답을 '인증받지 못했다(unauthoritative)'라는 내용과 함께 보냄
    • 주소 변환 속도를 높일 수 있음
    • 문제점: 잘못된 매핑 정보를 보낼 수도 있음 -> TTL

DNS 메시지 유형

  • 조회(query)
  • 응답(response)

  • 헤더(12바이트)
    • 식별자: 조회와 응답이 한쌍임을 나타내는 16비트 길이의 식별자
    • 플래그
      • QR(query/response): 0 or 1
      • OpCode, AA, TC, RD, RA, Reserved, rCode
    • 조회 레코드/응답 레코드/권한 레코드/추가 레코드 수

  • DNS 메시지
    • 질문 섹션: 조회와 응답 메시지에 모두 들어있음
    • 응답 섹션: 응답 메시지에만 존재
    • 권한 섹션: 응답 메시지에만 존재
    • 추가 정보 섹션: 응답 메시지에만 존재
  • 레코드 유형
    • 조회 레코드: 조회와 응답 메시지의 질문 섹션에 사용
      • 클라이언트가 서버로부터 정보를 얻기 위해 사용
        • 조회 이름: 가변 길이, 도메인 이름 포함
        • 조회 유형: 16비트
        • 조회 클래스: 16비트, DNS를 사용하는 특정 프로토콜을 나타냄
    • 자원 레코드: 응답 메시지의 응답, 권한 및 추가 정보 섹션에 사용
      • 서버에서 클라이언트로 반환되는 것
      • 서버 데이터베이스는 자원 레코드들로 구성
      • 각 도메인 이름은 자원 레코드와 관계됨
        • 도메인 이름: 가변 길이, 도메인 이름 포함
        • 도메인 유형: 조회 레코드의 조회 유형 필드
        • 도메인 클래스: 조회 레코드의 조회 클래스 필드
        • 수명(ttl): 32비트, 응답 시간을 초 단위로. 이 시간 동안 캐시에 저장
        • 자원 데이터 길이: 16비트
        • 자원 데이터: 가변 길이, 응답/권한있는 서버의 도메인 이름/추가 정보 등

NS, CNAME, PTR, AAAA

 

캡슐화

  • DNS는 UDP 또는 TCP를 사용
  • 포트는 53
  • 응답 메시지의 크기가 512 바이트보다 작으면 UDP, 이상이면 TCP 연결을 사용
  • 응답 메시지의 크기에 대해 사전에 알지 못하면 UDP 포트를 사용
    • 이 경우 응답 메시지의 크기가 512 바이트 이상이면 서버는 메시지를 512바이트 크기로 자른 뒤 TC 비트를 1로 설정
    • 변환기는 TCP 연결을 설정한 후에 서버로부터 완전한 응답을 요청

DDNS(동적 도메인 이름 시스템)

  • DNS에 변화가 생기면 주 파일을 변경해야 함
  • 수작업으로 처리하기에는 너무 방대
  • 자동 갱신
    • 이름과 주소 간의 매핑이 필요하면 주로 DHCP로부터 1차 DNS 서버로 정보가 전송
    • 1차 서버는 영역을 갱신, 2차 서버는 능동 혹은 수동으로 이를 통보 받음
    • 영역 전달, 보안 제공

DNS 보안

  • DNS Spoofing:
    • 공격자는 DNS 서버의 응답을 읽어볼 수 있다.
    • DNS 서버의 응답을 변경하거나 새로운 위조 응답을 만들어 사용자를 원하는 도메인이나 사이트로 가도록 할 수 있음
    • DNS 서버가 다운되도록 대량 트래픽 공격(flooding)을 할 수 있다.

 


<필기>

도메인 이름(ex. www.naver.com)을 입력했을 때의 동작 과정:: 도메인 이름 -> IP 주소 변환 필요

웹 서버 주소가 211.45.10.5라고 가정

1.

hosts 파일에 접근 (C:\windows\system32\drivers\etc\hosts) -> IP와 도메인을 mapping

DNS가 없을 때에는 hosts 파일을 사용했음

DNS Spoofing을 막기 위한 방법으로도 사용됨

먼저 hosts 파일에 도메인에 해당하는 IP 주소가 있는지 확인

2.

Cache를 확인

ipconfig/ displaydns

이전에 접속했다면 캐시에 보관됨

3.

DNS 서버에게 질의(Query)

-> DNS Spoofing 발생 가능 (다른 IP 주소를 알려줌 - 피싱, 사전에 스니핑하고 있음)

 

1, 2 -> PC 내부

3 -> PC 외부