Tshark 로 DNS 쿼리 문제 해결

WiresharkBeginner
지금 연습하기

소개

이 랩에서는 실습을 통해 Wireshark 의 Tshark 유틸리티를 사용하여 DNS 쿼리를 문제 해결하는 방법을 배우게 됩니다. "udp port 53" 필터를 사용하여 DNS 트래픽을 캡처하고, "dns.qry.name"과 같은 디스플레이 필터를 사용하여 쿼리를 분석하며, "dns,tree" 옵션을 사용하여 타이밍 통계를 검토합니다.

이 랩은 DNS 패킷을 격리하고, 쿼리 타이밍을 시각화하며, "-V" 플래그를 사용하여 상세한 패킷 정보를 추출하는 실용적인 기술을 안내합니다. 이러한 실습을 완료함으로써 전문적인 패킷 분석 방법을 사용하여 DNS 문제를 진단하는 데 필요한 필수 기술을 개발할 수 있습니다.

-f "udp port 53"으로 DNS 캡처

이 단계에서는 Wireshark 의 캡처 필터를 사용하여 DNS 트래픽을 캡처하는 방법을 배우게 됩니다. DNS (Domain Name System, 도메인 네임 시스템) 는 인터넷의 전화번호부와 같아서, 사람이 읽을 수 있는 도메인 이름 (예: example.com) 을 기계가 읽을 수 있는 IP 주소로 변환합니다. 대부분의 DNS 쿼리는 작고 빠르기 때문에 UDP 포트 53 을 사용하며, 더 큰 응답은 TCP 를 사용할 수 있습니다.

  1. 먼저, 아직 LabEx VM 에서 터미널을 열지 않았다면 엽니다. 모든 명령은 기본 작업 디렉토리 ~/project에서 실행됩니다. 이곳에 캡처 파일을 저장합니다.

  2. 다음 명령으로 터미널에서 Wireshark 를 실행합니다.

wireshark &

& 기호는 Wireshark 를 백그라운드에서 실행하여 Wireshark 가 열린 상태에서 터미널을 계속 사용할 수 있도록 합니다. 이는 네트워크 분석 중에 다른 명령을 실행해야 할 때 유용합니다.

  1. Wireshark 의 메인 인터페이스에서:

    • 활성 네트워크 인터페이스 (일반적으로 eth1) 를 선택합니다. 이렇게 하면 Wireshark 가 모니터링할 네트워크 연결을 지정합니다.
    • 캡처 필드에 다음을 입력합니다: udp port 53. 이 필터는 Wireshark 가 DNS 트래픽만 캡처하도록 하여 다른 네트워크 활동으로 인한 혼란을 줄입니다.
    • 상어 지느러미 아이콘을 클릭하여 패킷 캡처를 시작합니다. 인터페이스가 네트워크 활동을 표시하기 시작하는 것을 볼 수 있습니다.
  2. 테스트를 위해 DNS 트래픽을 생성하려면 다른 터미널을 열고 다음을 실행합니다.

nslookup example.com

이 명령은 시스템에 "example.com"의 IP 주소를 조회하도록 요청하여 캡처하려는 DNS 트래픽을 생성합니다. 이는 모니터링이 제대로 작동하는지 확인하기 위한 테스트 호출과 같습니다.

  1. Wireshark 에서 캡처된 DNS 패킷을 볼 수 있습니다. 이들은 메인 창에 쿼리와 응답을 일반적으로 표시하는 줄로 나타납니다. 충분한 트래픽을 확인했으면 빨간색 사각형 버튼을 클릭하여 캡처를 중지합니다.

  2. 나중에 분석할 수 있도록 캡처 파일을 저장합니다.

    • File → Save As 로 이동합니다.
    • ~/project 디렉토리에 dns_capture.pcapng로 저장합니다. 이 파일 형식은 자세한 검사를 위해 모든 원본 패킷 데이터를 보존합니다.

이해해야 할 주요 사항:

  • -f "udp port 53"은 DNS 트래픽만 기록하는 캡처 필터로, DNS 대화만 듣는 특수 마이크를 설정하는 것과 유사합니다.
  • DNS 는 작은 쿼리에 효율적이기 때문에 주로 UDP 포트 53 을 사용하며, 신뢰할 수 있는 전달이 필요한 더 큰 응답에는 TCP (Transmission Control Protocol, 전송 제어 프로토콜) 가 사용됩니다.
  • 캡처 파일에는 원본 형식의 원시 네트워크 패킷이 포함되어 있으며, 이는 DNS 확인 중에 정확히 어떤 일이 발생하는지 이해하기 위해 이후 단계에서 분석할 것입니다.

-Y "dns.qry.name"으로 쿼리 필터링

이 단계에서는 디스플레이 필터를 사용하여 Wireshark 에서 DNS 쿼리를 필터링하는 방법을 배우게 됩니다. DNS (Domain Name System, 도메인 네임 시스템) 는 인터넷의 전화번호부와 같아서, 사람이 읽을 수 있는 도메인 이름을 기계가 읽을 수 있는 IP 주소로 변환합니다. 네트워크 문제를 해결할 때 DNS 트래픽을 검사하면 중요한 단서를 얻을 수 있습니다.

dns.qry.name 필드에 집중할 것입니다. 이 필드는 DNS 쿼리에서 요청되는 도메인 이름을 구체적으로 보여줍니다. 이는 이전 단계에서 생성한 캡처에서 특정 웹사이트 또는 서비스와 관련된 트래픽을 검사해야 할 때 특히 유용합니다.

  1. 먼저, 이전에 저장한 캡처 파일을 Wireshark 에서 엽니다. 끝에 있는 &는 명령을 백그라운드에서 실행하므로 터미널을 계속 사용할 수 있습니다.
wireshark ~/project/dns_capture.pcapng &
  1. Wireshark 의 디스플레이 필터 바 (툴바 바로 아래의 빈 필드) 에 다음 필터를 입력하여 "example.com"에 대한 DNS 쿼리만 표시합니다.
dns.qry.name == "example.com"

이 엄격한 일치 필터 (==) 는 쿼리된 도메인이 "example.com"과 정확히 일치하는 패킷만 표시합니다.

  1. 요청되는 도메인에 관계없이 모든 DNS 쿼리를 보려면 필드 이름 자체를 사용하십시오.
dns.qry.name

이렇게 하면 DNS 쿼리 이름을 포함하는 모든 패킷이 표시되어 네트워크에서 어떤 도메인이 조회되는지 이해하는 데 도움이 됩니다.

  1. DNS 쿼리 (요청) 와 응답을 모두 표시하는 보다 완전한 보기를 보려면 DNS 응답 플래그를 확인하는 다음 필터를 사용하십시오.
dns.flags.response == 0 || dns.flags.response == 1

여기서 dns.flags.response == 0은 쿼리 (요청) 를 표시하고, dns.flags.response == 1은 응답을 표시합니다.

  1. 때로는 특정 조직 또는 서비스와 관련된 모든 쿼리를 찾고 싶을 수 있습니다. "contains" 연산자를 사용하여 부분 도메인 일치를 필터링해 보십시오.
dns.qry.name contains "example"

이렇게 하면 "example.com", "test.example.org" 또는 "example.net"과 같이 "example"을 포함하는 모든 도메인이 일치합니다.

이해해야 할 주요 사항:

  • -Y는 Wireshark 의 디스플레이 필터 옵션입니다 (필터 바에 입력하는 것과 동일).
  • dns.qry.name은 쿼리되는 도메인 이름을 포함하는 DNS 패킷의 특정 필드입니다.
  • 디스플레이 필터는 관련 없는 패킷을 숨겨 특정 트래픽 패턴에 집중하는 데 도움이 됩니다.
  • 필터는 다양한 비교 연산자를 사용할 수 있습니다.
    • 정확히 일치하는 경우 ==
    • 제외하는 경우 !=
    • 부분 일치하는 경우 contains
  • DNS 프로토콜에는 쿼리 (response == 0) 와 응답 (response == 1) 을 구분하는 플래그가 포함되어 있습니다.

-z dns,tree 로 타이밍 분석

DNS (Domain Name System, 도메인 네임 시스템) 는 인터넷의 전화번호부와 같아서, 사람이 읽을 수 있는 도메인 이름을 기계가 읽을 수 있는 IP 주소로 변환합니다. 네트워크 문제를 해결할 때 DNS 응답 시간을 분석하면 성능 병목 현상을 파악할 수 있습니다. 이 단계에서는 Wireshark 의 내장 통계 기능과 -z dns,tree 옵션을 사용하여 DNS 서버가 쿼리에 얼마나 빨리 응답하는지 측정합니다.

  1. 시작하기 전에 Wireshark 가 실행 중이지 않은지 확인하십시오. 터미널에서 미리 캡처된 DNS 트래픽 파일을 분석합니다. 끝에 있는 &는 Wireshark 가 실행되는 동안 터미널을 사용할 수 있도록 합니다.
wireshark -z dns,tree ~/project/dns_capture.pcapng &
  1. "DNS Statistics"라는 새 창이 열리고 트리 구조로 세 가지 주요 정보가 표시됩니다.

    • 모든 DNS 쿼리와 해당 응답
    • 각 쿼리가 응답을 받는 데 걸린 시간
    • 각 도메인이 요청된 빈도
  2. 통계 열을 자세히 살펴보겠습니다.

    • "Count"는 시스템이 각 도메인을 쿼리한 횟수를 나타냅니다.
    • "Average"는 각 도메인에 대한 일반적인 응답 시간을 보여줍니다.
    • "Min" 및 "Max"는 최상의 경우와 최악의 경우의 응답 시간을 보여줍니다.
  3. 분석에서 더 흥미로운 데이터를 보려면 새로운 DNS 쿼리를 생성해 보겠습니다. 새 터미널 창을 열고 다음 일반적인 조회 명령을 실행합니다.

nslookup google.com
nslookup labex.io
  1. 이러한 명령을 실행한 후 DNS Statistics 창으로 돌아가 "Reload"를 클릭하여 방금 생성한 새 쿼리로 통계를 업데이트합니다.

기억해야 할 주요 개념:

  • -z dns,tree 명령은 Wireshark 의 특수 DNS 분석 모드를 활성화합니다.
  • 응답 시간 측정은 느린 DNS 서버 또는 네트워크 지연을 정확히 찾아내는 데 도움이 됩니다.
  • 트리 보기는 관련 쿼리를 함께 그룹화하여 분석을 용이하게 합니다.
  • 새로운 DNS 활동 후 항상 캡처 파일을 다시 로드하여 최신 통계를 확인하십시오.

-V 옵션으로 결과 표시

이 단계에서는 -V 옵션을 사용하여 Wireshark 의 상세 모드로 DNS 패킷을 자세히 검사하는 방법을 살펴보겠습니다. DNS 문제를 해결할 때 네트워크 트래픽에서 정확히 무슨 일이 일어나고 있는지 이해하려면 모든 프로토콜 세부 정보를 확인하는 것이 중요합니다.

  1. 시작하기 전에 혼동을 피하기 위해 열려 있는 Wireshark 창을 모두 닫으십시오. 그런 다음 이 명령을 실행하여 전체 프로토콜 세부 정보와 함께 캡처 파일을 엽니다.
wireshark -V -r ~/project/dns_capture.pcapng &

-V 플래그는 Wireshark 에 상세 출력을 표시하도록 지시하여 기본 패킷 요약 대신 사용 가능한 모든 프로토콜 정보를 표시합니다.

  1. Wireshark 인터페이스에서 "Packet Details"라는 중간 패널에 집중하십시오. DNS 정보를 검사하는 방법은 다음과 같습니다.

    • "Domain Name System" 옆의 화살표를 클릭하여 확장합니다.
    • 다음을 포함한 전체 DNS 메시지 구조를 볼 수 있습니다.
      • 쿼리인지 응답인지 여부
      • 요청과 응답을 쌍으로 묶는 고유한 트랜잭션 ID
      • 성공 또는 오류를 나타내는 상태 플래그
      • 교환되는 모든 리소스 레코드
  2. DNS 쿼리 패킷 (일반적으로 클라이언트에서 서버로 전송됨) 을 볼 때 다음 사항에 특히 주의하십시오.

    • 쿼리 유형: 요청되는 레코드 유형 (IPv4 의 경우 A, IPv6 의 경우 AAAA, 메일 서버의 경우 MX) 을 보여줍니다.
    • 쿼리 클래스: 거의 항상 인터넷 클래스인 "IN"입니다.
    • 트랜잭션 ID: 이 쿼리를 해당 응답과 일치시키는 데 도움이 되는 임의의 숫자입니다.
  3. DNS 응답 패킷 (서버에서 클라이언트로) 의 경우 다음 중요한 필드를 확인하십시오.

    • 응답 코드: "0"은 오류가 발생하지 않았음을 의미합니다.
    • 응답 수: 반환된 레코드 수
    • TTL 값: 이러한 DNS 응답을 캐시할 수 있는 기간
    • 실제 데이터: A 레코드를 쿼리할 때 IP 주소와 같은 데이터
  4. 나중에 검토하거나 동료와 공유하기 위해 이 상세 분석을 저장하려면 다음 명령을 실행하십시오.

tshark -V -r ~/project/dns_capture.pcapng > ~/project/dns_analysis.txt

이렇게 하면 캡처에서 모든 상세 출력을 포함하는 텍스트 파일이 생성됩니다.

기억해야 할 주요 개념:

  • -V 옵션은 각 패킷의 전체 프로토콜 분석을 보여줍니다.
  • DNS 프로토콜 스택의 모든 계층을 볼 수 있습니다.
  • 이 수준의 세부 정보는 복잡한 DNS 문제를 진단할 때 필요합니다.
  • 필터 (예: dns) 와 결합하여 전체 세부 정보를 유지하면서 특정 패킷에 집중할 수 있습니다.

요약

이 랩에서는 Wireshark 의 Tshark 유틸리티를 사용하여 DNS 쿼리를 문제 해결하는 방법을 배웠습니다. 이 연습에서는 UDP 포트 53 필터를 사용하여 DNS 트래픽을 캡처하고 dns.qry.name과 같은 대상 표시 필터를 통해 쿼리를 분석하는 방법을 보여주었습니다.

nslookup으로 테스트 트래픽을 생성하고 분석을 위해 캡처를 저장하는 연습을 통해 DNS 프로토콜 동작과 특정 도메인 요청을 격리하기 위한 Wireshark 의 강력한 필터링 기능에 대한 통찰력을 얻었습니다. 이러한 기술은 네트워크 문제 해결 및 DNS 관련 조사에 필수적입니다.