DNS 프로토콜의 작동 원리와 실제 구현 분석

DNS 프로토콜 개요

대부분의 사용자는 웹사이트 접속 시 IP 주소 대신 도메인 이름을 사용합니다. 그러나 네트워크 계층은 IP 주소만 인식할 수 있기 때문에, 도메인 이름을 IP 주소로 변환하는 과정이 필수적입니다. DNS(Domain Name System) 프로토콜은 바로 이러한 도메인-IP 매핑 기능을 담당합니다.

DNS 서비스 동작 과정

  1. 클라이언트가 로컬 DNS 서버에 특정 도메인의 IP 주소를 질의합니다.
  2. DNS 서버는 자체 캐시나 데이터베이스에서 해당 도메인의 레코드를 찾습니다. 만약 로컬에 정보가 없다면, 상위 DNS 서버로 재귀적 질의를 수행하여 정보를 획득합니다.
  3. 획득한 IP 주소(또는 오류 메시지)를 클라이언트에 반환합니다.

실습을 통한 이해

1. DNS 서버 설정 확인

시스템에 구성된 DNS 서버 주소는 /etc/resolv.conf 파일에서 확인할 수 있습니다.

[user@localhost ~]$ cat /etc/resolv.conf
# Generated by NetworkManager
nameserver 202.116.32.254
nameserver 222.200.129.134

첫 번째 nameserver가 주 DNS 서버이며, 두 번째는 보조 서버입니다.

2. host 명령어로 DNS 조회

host 명령어를 사용하여 특정 도메인의 IP 주소를 조회할 수 있습니다. 만약 명령어가 없으면 bind-utils 패키지를 설치하십시오(CentOS 기준: yum install -y bind-utils).

[user@localhost ~]$ host -t A www.baidu.com
www.baidu.com is an alias for www.a.shifen.com.
www.a.shifen.com has address 183.2.172.185
www.a.shifen.com has address 183.2.172.42

-t A 옵션은 도메인 이름으로 IPv4 주소를 질의한다는 의미입니다.

주요 질의 유형:

  • A: 도메인 → IPv4 주소
  • CNAME: 도메인 → 별칭(Canonical Name)
  • PTR: IP 주소 → 도메인 (역방향 질의)

3. tcpdump로 DNS 패킷 분석

터미널을 두 개 준비합니다. 하나는 패킷 캡처용, 다른 하나는 DNS 질의 실행용입니다.

3.1. 패킷 캡처 시작

첫 번째 터미널에서 다음 명령을 실행하여 DNS 트래픽을 모니터링합니다.

tcpdump -i ens33 -nt -s 500 port 53

옵션 설명:

  • -i ens33: 모니터링할 네트워크 인터페이스
  • -s 500: 캡처할 패킷의 최대 크기(바이트)
  • port 53: DNS 서비스 포트(기본 53번)만 필터링

3.2. DNS 질의 실행

두 번째 터미널에서 앞서 사용한 host 명령을 다시 실행합니다.

3.3. 캡처 결과 확인

캡처 터미널에서 다음과 유사한 출력을 확인할 수 있습니다.

IP 10.255.79.186.43686 > 202.116.32.254.domain: 32449+ A? www.baidu.com. (31)

IP 202.116.32.254.domain > 10.255.79.186.43686: 32449 3/0/0 CNAME www.a.shifen.com., A 183.2.172.42, A 183.2.172.185 (90)

첫 번째 패킷(질의) 분석:

  • 10.255.79.186.43686: 클라이언트 IP와 임시 포트
  • 202.116.32.254.domain: DNS 서버 IP와 서비스 포트(domain은 53번을 의미)
  • 32449+: DNS 세션 식별자(ID), +는 재귀 질의 플래그
  • A?: 질의 유형
  • (31): 패킷 전체 길이(바이트)

두 번째 패킷(응답) 분석:

  • 3/0/0: 응답 레코드 수 (3개의 Answer, 0개의 Authority, 0개의 Additional)
  • CNAME www.a.shifen.com.: 별칭 정보
  • A 183.2.172.42, A 183.2.172.185: 실제 IP 주소들

서비스 포트 번호 확인 명령어: cat /etc/services | grep domain

태그: DNS 도메인네임시스템 네트워크프로토콜 tcpdump DNS질의

6월 29일 01:32에 게시됨