네트워크/와이어샤크

[와이어샤크][Day 4] DNS 트래픽 분석

playalone 2025. 7. 17. 22:16

이 글은 제 공부의 목적으로 작성하는 글로써, 틀린 부분이 있을 수 있습니다.

틀린 부분이 있을시, 댓글로 친절히 설명해 주시면 감사하겠습니다.

 

오늘은 dns 트래픽을 분석해보도록 하겠다.

 

DNS란?

일단 dns가 무엇인지부터 살펴보도록 하자.

dns는 domain name service의 약자로, 도메인 네임을 ip 주소로 바꾸거나, ip 주소를 도메인 네임으로 바꾸는 역할을 수행한다.

여기서 도메인은 google.com과 같은 것을 의미하고, ip 주소는 142.250.206.238 등을 나타낸다.

 

DNS 패킷 분석

daum.net으로 요청을 보내었고, 다음과 같은 캡처를 얻었다.

이때, 필터는 다음과 같다.

 

dns.qry.name contains "http://www.daum.net"

 

결과를 살펴보면, A와 HTTPS가 있음을 확인할 수 있다.

A: A 레코드를 물어보기 위함이다. 클라이언트가 DNS서버에 url의 ipv4 주소를 요청하는 것이다. 이때, A는 ipv4, AAAA는 ipv6이다.

HTTPS: url이 어떤 https 설정을 가지고 있는지 물어보기 위함이다.

 

DNS 요청

이제, dns 요청을 먼저 살펴보도록 하자.

 

결국엔, dns 요청은 tcp 요청이기 때문에 데이터관련 부분만 빠르게 살펴보도록 하겠다.

length: dns 요청 메시지의 총 길이를 나타낸다.

transaction id: dns 서버가 응답할때, transaction id를 같이 보내게 되는데, 응답에 대해, transaction id가 같은 것이 해당 요청으로부터 온 응답임을 확인하기 위한 용도이다.

flags: 

 - response: query(0) vs response(1)

 - opcode: 

    0: query

    1: iquery(inver query)

    2: status

    3: unassigned

    4: notify

    5: update

    6: dns stateful operations

    7-15: unassigned

 - truncated: 잘림 여부

 - recursion desired: dns 서버 질의 재귀(1) vs 반복(0)

 - Z: 예약된 비트

 - Non-authenticated data: 보안 확장을 통해 인증된 데이터를 원하는지 여부

 - questions: 질문 개수

 - answer RRs: 응답 답변 개수

 - authoritative RRs: 도메인을 관리하는 네임 서버 개수

 - additional RRs: 추가 정보 개수

 - querys

    > name: 도메인 네임

    > type: 어떤 쿼리인지에 대한 정보

    > class: 사용중인 네트워크

 

즉, 이 요청은 www.daum.net의 의 ipv4의 주소를 알아내기 위한 dns 요청이다.

이때, type을 제외하고는 A와 HTTPS는 모든 정보가 같다.

DNS 응답

이번엔, dns 응답을 살펴보도록 하겠다. 응답 역시 tcp이므로, dns answer만 살펴보도록 하겠다.

 

앞선 부분은 대부분 같기 때문에 answer 부분만 살펴보도록 하겠다.

다음은 type A의 결과이다.

 

name: 어떠한 dns 도메인 요청인지에 대한 것이다.

type: cname : 레코드 타입은 cname으로, 진짜 이름이 다른 것임을 알려주는 역할을 한다.

ttl: 264초 이후 자동 소멸한다.

data length: cname의 길이를 말한다.

cname: 진짜 이름을 알려준다.

 

즉, 이 결과는 daum.net에서 daum-4vdtymgd.kgslb.com으로, daum-4vdtymgd.kgslb.com에서, 211.249.220.24으로 넘어감을 알려주는 응답결과이다.

즉, daum.net의 ipv4의 주소는 211.249.220.24이다.

다음은 type HTTPS의 결과이다.

 

answer의 부분은 A레코드와 같다.

 

Authoritative nameservers를 살펴보도록 하자.

 

name: 호스트 네임이다.

type: soa : 권한 시작 레코드이다. dns존의 가장 기본적인 설정과 관리 정보를 담기 위한 레코드임을 알려준다.

ttl: 1초 이후 자동 수멸한다.

data length: soa 데이터 길이이다.

primary name server: 도메인을 관리하는 주 네임서버의 이름이다.

responsible authority's mailbox: 도메인 관리 책임자의 이메일 주소이다.

Serial Number: 연도 + 월 + 일 + 일련번호 형식으로써, 이 번호의 변경으로, 보조 네임 서버들이 정보의 수정을 인지한다.

Retry Interval: refresh에 실패한 경우 재시도 간격이다.

expired limit: 보조 네임서버가 가지고 있던 정보를 파기하는 간격이다.

minimum ttl: 별도의 ttl을 지정하지 않은 경우 최소의 ttl값이다.

 

즉, 관련 정보와 권한 정보를 알려주는 응답이다.

 

dns 서버에서 가져온 ipv4의 결과를 바탕으로 3 way handshake를 하며 연결이 이뤄짐을 확인할 수 있다.

 

그럼 이제 의문이 생긴다. 만약 daum.net 대신 실제 ipv4의 주소에 브라우저를 통해 접근하면 어떠한 결과가 나올까?

 

실습과정에서의 의문점 - ip를 통한 브라우저 접속

ipv4로 접속한 결과이며, 404 not found가 나온다.

 

그 이유를 살펴보자면, 

 

첫번째, 브라우저는 도메인 이름을 기반으로 서버에 접속한다는 것이다. 서버는 해당 도메인에 맞는 올바른 인증서를 제공하는데, ip로 접속하면, 서버는 기본 인증서 혹은 이상한 인증서를 반환하고, 그 결과, 인증서 이름과 맞지 않게 된다.

두번째, 호스트 헤더가 다르기 때문에 에러가 발생할 수 있다.

 

이를 실제로 확인해보면

인증서와 관련된 오류가 발생한다.

따라서, 인증서를 건너뛰도록 하면, 

 

아까 확인한것처럼 404가 뜨고 있다. 

따라서, 브라우저로 접속하였을때 404가 뜨는것은 인증서와 관련된 문제가 아니었음을 확인할 수 있다.

 

이제, header의 호스트를 www.daum.net으로 변환시켜보자.

header를 변환하였을때 정상 작동함을 확인할 수 있다.

이렇게, ip를 통해서도 사이트에 접속하는 방법을 확인할 수 있다.

 

이것으로 이번 글을 마치도록 하겠다.