DNS 프로토콜 개요
대부분의 사용자는 웹사이트 접속 시 IP 주소 대신 도메인 이름을 사용합니다. 그러나 네트워크 계층은 IP 주소만 인식할 수 있기 때문에, 도메인 이름을 IP 주소로 변환하는 과정이 필수적입니다. DNS(Domain Name System) 프로토콜은 바로 이러한 도메인-IP 매핑 기능을 담당합니다.
DNS 서비스 동작 과정
- 클라이언트가 로컬 DNS 서버에 특정 도메인의 IP 주소를 질의합니다.
- DNS 서버는 자체 캐시나 데이터베이스에서 해당 도메인의 레코드를 찾습니다. 만약 로컬에 정보가 없다면, 상위 DNS 서버로 재귀적 질의를 수행하여 정보를 획득합니다.
- 획득한 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