Linux에서 dig 명령을 사용하는 방법

0
1054
Linux 시스템의 양식화 된 터미널 창
Fatmawati Achmad Zaenuri / 셔터 스톡

리눅스 dig 명령을 사용하면 DNS 서버를 쿼리하고 DNS 조회를 수행 할 수 있습니다. IP 주소로 연결되는 도메인을 찾을 수도 있습니다. 우리는 당신에게 방법을 보여줄 것입니다!

dig 명령의 작동 방식

사람들은 리눅스를 사용 dig DNS (Domain Name System) 서버를 쿼리하는 명령입니다. dig Domain Information Groper의 약자입니다. 와 dig호스트 주소, 메일 교환, 이름 서버 및 관련 정보를 포함하여 다양한 DNS 레코드와 관련된 정보를 DNS 서버에 쿼리 할 수 ​​있습니다. DNS 문제를 진단하기위한 도구입니다. 그러나 인터넷 라우팅 트래픽을 유지하는 중앙 시스템 중 하나 인 DNS에 대해 자세히 알아볼 수 있습니다.

인터넷은 인터넷 프로토콜 (IP) 주소를 사용하여 웹에서 “위치”를 식별하지만 사람들은 도메인 이름을 사용합니다. 웹 브라우저 나 SSH 클라이언트와 같은 응용 프로그램에 도메인 이름을 입력하면 도메인 이름에서 실제 IP 주소로 무언가를 변환해야합니다. 이것은 도메인 네임 시스템이 들어오는 곳입니다.

인터넷에 연결된 프로그램에서 도메인 이름을 사용하면 이전 요청에서 캐시되지 않은 한 로컬 라우터가 도메인 이름을 확인할 수 없습니다. 따라서 라우터는 인터넷 서비스 제공 업체의 ISP (ISP) DNS 서버 또는 시스템이 사용하도록 구성한 다른 서버를 쿼리합니다. 이것을 DNS 선구자 서버라고합니다.

DNS 서버가 최근 같은 컴퓨터에있는 다른 사람으로부터 동일한 요청을받은 경우 응답이 이것의 은닉처. 이 경우 동일한 정보를 프로그램으로 다시 보냅니다.

DNS 전구체 서버가 캐시에서 도메인을 찾을 수 없으면 DNS 루트 이름 서버에 접속합니다. 루트 서버는 도메인 이름을 IP 주소로 확인하는 데 필요한 정보를 보유하지 않지만 요청을 도울 수있는 서버 목록을 보유합니다.

루트 서버는 도메인 이름이 속한 최상위 도메인 (예 : .COM, .ORG, .CO.UK)을 확인합니다. 그런 다음 해당 도메인 유형을 처리하는 최상위 도메인 서버 목록을 다시 DNS 전구체 서버로 보냅니다. 그런 다음 DNS 전구체 서버는 최상위 도메인 서버에 다시 요청을 할 수 있습니다.

최상위 도메인 서버는 “권한있는 이름 서버”(도메인의 세부 정보가 저장된)의 세부 정보를 다시 DNS 전구체 서버로 보냅니다. 그런 다음 DNS 서버는 원래 프로그램에 입력 한 도메인 영역을 호스팅하는 신뢰할 수있는 이름 서버를 쿼리합니다. 신뢰할 수있는 이름 서버는 IP 주소를 DNS 서버로 다시 보낸 후 다시 서버로 보냅니다.

발굴 설치

dig Ubuntu 18.04 및 Fedora 30 컴퓨터에 이미 설치되어 있습니다. 그러나 다음 명령을 사용하여 Manjaro 18.04 컴퓨터에 설치해야했습니다.

sudo pacman -Sy bind-tools

터미널 창에서 "sudo pacman -Sy bind-tools"명령

발굴 시작하기

첫 번째 예에서는 도메인 이름과 관련된 IP 주소를 반환합니다. 종종 여러 IP 주소가 단일 도메인 이름과 연결됩니다. 예를 들어로드 밸런싱이 사용되는 경우에 종종 발생합니다.

우리는 +short 아래와 같이 쿼리 옵션을 사용하면 간단한 응답을 얻을 수 있습니다.

dig howtogeek.com +short

터미널 창에서 "dig howtogeek.com + short"명령

howtogeek.com 도메인과 관련된 모든 IP 주소가 표시됩니다. 스펙트럼의 다른 쪽 끝에서 하지마 사용 +short 쿼리 옵션에서 출력은 매우 장황합니다.

파이프를 통해 다음을 입력합니다. less:

dig howtogeek.com | less

터미널 창에서 "dig howtogeek.com | less"명령

출력은 less, 아래 그림과 같이.

터미널 창에서 "dig howtogeek.com | less"명령의 출력

전체 목록은 다음과 같습니다.

; <<>> DiG 9.11.3-1ubuntu1.11-Ubuntu <<>> howtogeek.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 12017
;; flags: qr rd ra; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 65494
;; QUESTION SECTION:
;howtogeek.com. IN A

;; ANSWER SECTION:
howtogeek.com. 3551 IN A 151.101.194.217
howtogeek.com. 3551 IN A 151.101.130.217
howtogeek.com. 3551 IN A 151.101.66.217
howtogeek.com. 3551 IN A 151.101.2.217

;; Query time: 0 msec
;; SERVER: 127.0.0.53#53(127.0.0.53)
;; WHEN: Sun Mar 22 07:44:37 EDT 2020
;; MSG SIZE rcvd: 106

한 조각 씩 해보자.

헤더

먼저 헤더에있는 내용을 살펴 보겠습니다.

; <<>> DiG 9.11.3-1ubuntu1.11-Ubuntu <<>> howtogeek.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 12017
;; flags: qr rd ra; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 1

이제 그 의미가 다음과 같습니다.

  • 첫 줄: 의 버전 dig 쿼리 된 도메인
  • 글로벌 옵션 : 보시다시피, 당신은 사용할 수 있습니다 dig 여러 도메인을 동시에 쿼리합니다. 이 줄은 모든 도메인 쿼리에 적용된 옵션을 보여줍니다. 우리의 간단한 예에서, 그것은 단지 기본값이었습니다 +cmd (명령) 옵션.
  • Opcode : 쿼리 : 요청 된 작업 유형이며이 경우에는 query. 이 값은 iquery 역 쿼리의 경우 status DNS 시스템의 상태 만 테스트하는 경우
  • 상태 : 오류 없음 : 오류가 없었으며 요청이 올바르게 해결되었습니다.
  • ID : 12017:이 임의의 ID는 요청과 응답을 함께 묶습니다.
  • 플래그 : qr rd ra : 이것들은 query, recursion desired, recursion available. 재귀는 DNS 조회의 한 형태입니다 (다른 하나는 반복적 임). 당신은 또한 볼 수 있습니다 AA, 이는 정식 답변을 나타내며 정식 이름 서버가 응답을 제공했음을 의미합니다.
  • 쿼리 : 1 : 이 세션의 쿼리 수 중 하나입니다.
  • 답 : 4 : 이 응답에 대한 답변 수는 4입니다.
  • 권한 : 0 : 정식 이름 서버에서 발생한 응답 수 (이 경우 0) DNS 전구체 서버의 캐시에서 응답이 리턴되었습니다. 응답에 권한 섹션이 없습니다.
  • 추가 : 1 : 한 가지 추가 정보가 있습니다. (이상하게도이 값이 2 이상이 아니면 아무것도 표시되지 않습니다.)

의사 의사 섹션 선택

다음으로 Opt Pseudo 섹션에서 다음을 확인하십시오.

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 65494

그것을 분해하자 :

  • EDNS : 버전 0 : 사용중인 DNS 확장 시스템의 버전입니다. EDNS는 UDP (User Datagram Protocol) 패킷의 크기를 확장하여 확장 데이터 및 플래그를 전송합니다. 이것은 가변 크기 플래그로 표시됩니다.
  • 플래그 : 사용중인 플래그가 없습니다.
  • UDP: 4096 : UDP 패킷 크기입니다.

질문 섹션

질문 섹션에는 다음이 표시됩니다.

;; QUESTION SECTION:
;howtogeek.com. IN A

이것이 의미하는 바는 다음과 같습니다.

  • howtogeek.com : 우리가 쿼리하는 도메인 이름입니다.
  • 에: 우리는 인터넷 수업 쿼리를 만들고 있습니다.
  • ㅏ: 달리 명시하지 않는 한 dig DNS 서버에서 A (주소) 레코드를 요청합니다.

답변 섹션

답변 섹션에는 DNS 서버로부터받은 다음 네 가지 답변이 있습니다.

howtogeek.com. 3551 IN A 151.101.194.217
howtogeek.com. 3551 IN A 151.101.130.217
howtogeek.com. 3551 IN A 151.101.66.217
howtogeek.com. 3551 IN A 151.101.2.217

이 답변의 의미는 다음과 같습니다.

  • 3551 : 레코드를 캐시 할 수있는 시간 간격을 유지하는 32 비트 부호있는 정수인 TTL (Time to Live)입니다. 만료되면 DNS 서버가 새로 고칠 때까지 요청에 대한 응답으로 데이터를 사용해야합니다.
  • 에: 우리는 인터넷 클래스 쿼리를 만들었습니다.
  • ㅏ: DNS 서버에서 A 레코드를 요청했습니다.

통계 섹션

통계는 마지막 섹션이며 다음 정보를 포함합니다.

;; Query time: 0 msec 
;; SERVER: 127.0.0.53#53(127.0.0.53) 
;; WHEN: Sun Mar 22 07:44:37 EDT 2020 
;; MSG SIZE rcvd: 106

우리가 가진 것은 다음과 같습니다.

  • 쿼리 시간 : 0msec : 응답을받는 데 걸린 시간입니다.
  • 서버 : 127.0.0.53 # 53 (127.0.0.53) : 응답 한 DNS 서버의 IP 주소 및 포트 번호입니다. 이 경우에는 로컬 캐싱 스터브 리졸버를 가리 킵니다. 그러면 업스트림 DNS 서버가 구성되어있는 DNS 요청이 전달됩니다. Manajro 테스트 컴퓨터에서 여기에 나열된 주소는 8.8.8.8 # 53으로 Google의 공개 DNS 서비스입니다.
  • 언제 : 일요일 3 월 22 일 07:44:37 EDT 2020 : 요청한 시간
  • MSG 크기 rcvd : 106 : DNS 서버에서받은 메시지의 크기입니다.

선택적인 것

딱딱하고 끔찍한 두 가지 극단에 안주하지 않아도됩니다. 그만큼 dig 명령을 사용하면 결과에서 섹션을 선택적으로 포함하거나 제외 할 수 있습니다.

다음 쿼리 옵션은 해당 섹션을 결과에서 제거합니다.

  • + 코멘트 : 주석 줄을 표시하지 마십시오.
  • + 권한 없음 : 권한 섹션을 표시하지 마십시오.
  • + 추가 : 추가 섹션을 표시하지 마십시오.
  • + 통계 : 통계 섹션을 표시하지 마십시오.
  • + 답변 없음 : 답변 섹션을 표시하지 마십시오.
  • + 없음 : 아무 것도 표시하지 마십시오!

그만큼 +noall 쿼리 옵션은 일반적으로 결과에 섹션을 포함하기 위해 위의 옵션 중 하나와 결합됩니다. 따라서 긴 섹션의 쿼리 옵션을 입력하여 여러 섹션을 끄는 대신 +noall 모두 해제합니다.

그런 다음 다음과 같은 포괄적 인 쿼리 옵션을 사용하여 다시보고 싶은 옵션을 설정할 수 있습니다.

  • + 댓글 : 주석 행을 표시하십시오.
  • + 권한 : 권한 섹션을 표시하십시오.
  • + 추가 : 추가 섹션을 표시하십시오.
  • + 통계 : 통계 섹션을 표시하십시오.
  • + 답변 : 답변 섹션을 표시하십시오.
  • + 모두 : 모든 것을 보여주십시오.

요청을하고 주석 행을 제외하려면 다음을 입력하십시오.

dig howtogeek.com +nocomments

터미널 창에서 "dig howtogeek.com + nocomments"명령

우리가 +noall 아래 표시된 것처럼 자체적으로 검색어 옵션을 사용하면 유용한 결과를 얻을 수 없습니다.

dig howtogeek.com +noall

터미널 창에서 "dig howtogeek.com + noall"명령

보고자하는 섹션을 선택적으로 추가 할 수 있습니다. 답변 섹션을 추가하려면 다음을 입력하십시오.

dig howtogeek.com +noall +answer

터미널 창에서 "dig howtogeek.com + noall + answer"명령

다음을 입력하여 켜면 +stats통계 섹션도 볼 수 있습니다.

dig howtogeek.com +noall +answer +stats

터미널 창에서 "dig howtogeek.com + noall + answer + stats"명령

그만큼 +noall +answer 조합이 자주 사용됩니다. 필요에 따라 명령 줄에 다른 섹션을 추가 할 수 있습니다. 입력을 피하려면 +noall +answer 사용할 때마다 명령 행에서 dig".digrc"라는 구성 파일에 넣을 수 있습니다. 홈 디렉토리에 있습니다.

우리는 다음을 입력하여 하나를 만듭니다. echo:

echo "+noall +answer" > $HOME/.digrc

그런 다음 내용을 확인하기 위해 다음을 입력 할 수 있습니다.

cat .digrc

터미널 창에서 "echo"+ noall + answer "> $ HOME / .digrc"및 "cat .digrc"명령

이 두 가지 옵션은 이제 모든 향후 사용에 적용됩니다. dig, 아래 그림과 같이:

dig ubuntu.org
dig linux.org
dig github.com

터미널 창에서 "dig ubuntu.org", "dig linux.org"및 "dig github.com"

dig 이 기사의 나머지 예제에는 구성 파일이 사용됩니다.

DNS 레코드

귀하에게 반환 된 정보 dig DNS 서버에 보관 된 다른 유형의 레코드에서 요청을 가져옵니다. 우리가 다른 것을 요구하지 않는 한 dig A (주소) 레코드를 쿼리합니다. 다음은 일반적으로 사용되는 레코드 유형입니다 dig:

  • 기록 : 도메인을 IP 버전 4 주소에 연결합니다.
  • MX 레코드 : 메일 교환은 도메인으로 전송 된 이메일을 올바른 메일 서버로 보냅니다.
  • NS 레코드 : 이름 서버 레코드는 도메인 (또는 하위 도메인)을 DNS 서버 세트에 위임합니다.
  • TXT 레코드 : 텍스트 레코드는 도메인에 관한 텍스트 기반 정보를 저장합니다. 일반적으로 스푸핑 또는 위조 된 전자 메일을 억제하는 데 사용될 수 있습니다.
  • SOA 레코드 : 권한 시작 레코드는 도메인에 대한 많은 정보를 보유 할 수 있습니다. 여기에서 기본 이름 서버, 담당자, 변경 시간 소인, 영역 새로 고침 빈도 및 재시도 및 포기에 대한 일련의 시간 제한을 찾을 수 있습니다.
  • TTL : TTL (Time to Live)은 DNS 전구체 서버가 각 DNS 쿼리를 캐시 할 수있는 시간을 지정하는 각 DNS 레코드에 대한 설정입니다. 해당 시간이 만료되면 후속 요청을 위해 데이터를 새로 고쳐야합니다.
  • 어떤: 이것은 알려줍니다 dig 가능한 모든 유형의 DNS 레코드를 반환합니다.

A 레코드 유형을 지정해도 다음과 같이 주소 레코드를 조회하고 IP 주소를 얻는 기본 조치는 변경되지 않습니다.

dig redhat.com A

터미널 창에서 "dig redhat.com A"명령

메일 교환 레코드를 쿼리하기 위해 다음 MX 플래그를 사용합니다.

dig yahoo.com MX

터미널 창에서 "dig yahoo.com MX"명령

이름 서버 플래그는 최상위 도메인과 연관된 루트 이름 서버의 다음 이름을 반환합니다.

dig fedora.com NS

터미널 창에서 "dig fedora.com NS"명령

권한 시작 레코드를 조회하려면 다음 SOA 플래그를 입력하십시오.

dig manjaro.com SOA

터미널 창에서 "dig manjaro.com SOA"명령

TTL 플래그는 DNS 서버의 캐시에있는 데이터의 수명을 보여줍니다. 우리가 일련의 요청을한다면, 우리는 살 시간이 아무 것도 줄어든 다음 시작 가치로 되돌아가는 것을 볼 수 있습니다.

우리는 다음을 입력합니다 :

dig usa.gov TTL

터미널 창에서 "dig usa.gov TTL"명령

텍스트 레코드를 보려면 TX 플래그를 입력하십시오.

dig usa.gov TXT

터미널 창에서 "dig usa.gov TXT"명령

DNS 서버 지정

요청에 특정 DNS 서버를 사용하려는 경우 at 기호 (@)에 전달 dig 명령 줄 매개 변수로

기본 DNS 서버를 사용하면 (아래 참조) dig 127.0.0.53에서 로컬 캐싱 스텁 해결 프로그램을 참조합니다.

dig usa.gov +stats

이제 8.8.8.8에서 Google의 공개 DNS 서버를 사용하려면 다음을 입력하십시오.

dig @8.8.8.8 usa.gov +stats

터미널 창에서 "dig usa.gov + stats"및 "dig @ 8.8.8.8 usa.gov + stats"명령

여러 도메인에서 발굴 사용

여러 도메인을 전달할 수 있습니다 dig 아래와 같이 명령 행에서 :

dig ubuntu.org fedora.org manjaro.com

터미널 창에서 "dig ubuntu.org fedora.org manjaro.com"명령

정기적으로 도메인 세트를 확인하면 텍스트 파일에 저장하여 전달할 수 있습니다 dig. 파일의 모든 도메인이 차례로 확인됩니다.

우리의 파일 이름은“domains.txt”입니다. 우리는 사용할 것이다 cat 내용을 보여주고 dig 와 더불어 -f (파일) 옵션. 우리는 다음을 입력합니다 :

cat domains.txt
dig -f domains.txt

터미널 창에서 "cat domains.txt"및 "dig -f domains.txt"명령

역 DNS 조회

IP 주소가 있고 어디로 가는지 알고 싶다면 역방향 DNS 조회를 시도 할 수 있습니다. DNS 서버에 등록 된 서버로 확인되면 해당 도메인을 찾을 수 있습니다.

PTR (포인터 레코드)의 존재 여부에 따라 달라집니다. PTR은 IP 주소를 정규화 된 도메인 이름으로 확인합니다. 그러나 필수 항목은 아니기 때문에 도메인에 항상있는 것은 아닙니다.

IP 주소 209.51.188.148이 우리를 어디로 데려가는지 알아 볼까요? 우리는 다음을 사용하여 다음을 입력합니다. -x (역방향 조회) 옵션 :

dig -x 209.51.188.148

터미널 창에서 "dig -x 209.51.188.148"명령

프레스토 악장! IP 주소는 gnu.org로 확인됩니다.

PTR은 DNS 레코드이므로 dig 지정된 DNS 레코드를 요청할 수 있습니다. dig 우리를 위해 PTR을 검색하기 위해? 예, 가능하지만 조금 더 많은 작업이 필요합니다.

IP 주소를 역순으로 입력하고 압정을 제공해야합니다 .in-addr.arpa 아래에 표시된 것처럼

dig ptr 148.188.51.209.in-addr.arpa

터미널 창에서 "dig ptr 148.188.51.209.in-addr.arpa"명령

우리는 같은 결과를 얻습니다. 조금 더 노력이 필요했습니다.

파낼 수 있습니까?

우리 모두는 매일 인터넷을 사용하며, 호기심 많은 사람들은 종종 웹 사이트 이름을 브라우저에 입력 할 때 마법이 어떻게 발생하는지 궁금해합니다. 와 dig네트워크 요술 프로세스를 탐색 할 수 있습니다.