728x90
도메인 이름 시스템(DNS, Domain Name Service)
- DNS의 필요성
- 도메인 이름과 IP주소를 매핑
- 컴퓨터는 통신할 때 숫자인 IP 주소를 처리
- 사람들은 IP 주소보다 사용하기 편리한 이름을 사용함
- DNS 변환 과정
- 사용자는 호스트 이름을 파일 전송 클라이언트에게 전달
- 파일 전송 클라이언트는 호스트 이름을 DNS 클라이언트에 전달
- 부팅 시 알게된 DNS 서버의 IP주소를 이용하여 파일 서버의 도메인 이름을 조회(query)
- DNS 서버는 파일 서버의 IP 주소를 응답
- DNS 클라이언트는 IP 주소를 파일 전송 클라이언트에게 전달
- 파일 전송 클라이언트는 수신한 IP 주소로 파일 서버에 접속
이름 공간
- 계층적 이름 공간을 가지기 위해 도메인 이름 공간을 만들어야 함
- 트리는 0에서 127까지의 128개 레이블(label)을 가짐
- 레이블: 각 노드는 레이블을 가지는데 이는 최대 63개의 문자로 구성
- 루트 레이블은 null string, empty string으로 불림
- 자식 노드들이 다른 레이블을 가지도록 하여 도메인 이름의 유일성을 보장
- 모든 트리는 루트에서 연결되며 트리의 각 레벨이 계층 레벨을 나타냄
- 도메인 이름
- 점(.)으로 구분
- 항상 노드에서 루트 방향으로 읽음
- 완전한 도메인 이름은 항상 점으로 끝남
- 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의 경우 한국인터넷진흥원에서 관리
- 레지스트라: 도메인 등록 대행업체
- 레지스트리의 위탁을 받아 도메인을 등록 대행하는 업체
- 도메인 소유자(레지스트란트)에게 일정한 비용을 받고 등록
- 레지스트란트: 도메인을 개인 목적이나 사업 목적으로 소유권을 등록하여 사용하는 자
- 리셀러: 레지스트라가 되기 위해서 다른 레지스트라에서 도메인을 사 와서 되파는 형식으로 운영
- ICANN: 국제 인터넷 주소 관리 기구
변환
- 이름-주소 변환
- 호스트 이름(도메인 주소) <-> 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비트
- 자원 데이터: 가변 길이, 응답/권한있는 서버의 도메인 이름/추가 정보 등
- 조회 레코드: 조회와 응답 메시지의 질문 섹션에 사용
캡슐화
- 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 외부