Linux에서 dig 명령을 사용하는 방법
게시 됨: 2022-01-29 Linux dig
명령을 사용하면 DNS 서버를 쿼리하고 DNS 조회를 수행할 수 있습니다. IP 주소가 다시 연결되는 도메인을 찾을 수도 있습니다. 방법을 알려드리겠습니다!
dig 명령의 작동 방식
사람들은 Linux dig
명령을 사용하여 DNS(Domain Name System) 서버를 쿼리합니다. dig
는 Domain Information Groper의 약자입니다. dig
를 사용하면 호스트 주소, 메일 교환, 이름 서버 및 관련 정보를 비롯한 다양한 DNS 레코드에 대한 정보를 DNS 서버에 쿼리할 수 있습니다. DNS 문제를 진단하기 위한 도구였습니다. 그러나 이를 사용하여 인터넷 라우팅 트래픽을 유지하는 중앙 시스템 중 하나인 DNS에 대해 자세히 알아볼 수 있습니다.
인터넷은 인터넷 프로토콜(IP) 주소를 사용하여 웹 상의 "위치"를 식별하지만 사람들은 도메인 이름을 사용합니다. 웹 브라우저나 SSH 클라이언트와 같은 애플리케이션에 도메인 이름을 입력할 때 도메인 이름에서 실제 IP 주소로 변환해야 하는 항목이 있습니다. 여기에서 도메인 이름 시스템이 등장합니다.
인터넷에 연결된 프로그램에서 도메인 이름을 사용하면 로컬 라우터가 이를 확인할 수 없습니다(이전 요청에서 캐시되지 않는 한). 따라서 라우터는 ISP(인터넷 서비스 공급자) DNS 서버 또는 시스템에서 사용하도록 구성한 다른 서버를 쿼리합니다. 이를 DNS 전구체 서버라고 합니다.
DNS 서버가 최근에 동일한 컴퓨터의 다른 사람으로부터 동일한 요청을 받은 경우 응답 이 캐시에 있을 수 있습니다. 이 경우 동일한 정보를 프로그램으로 다시 보냅니다.
DNS 전구체 서버가 캐시에서 도메인을 찾을 수 없으면 DNS 루트 이름 서버에 연결합니다. 루트 서버는 도메인 이름을 IP 주소로 확인하는 데 필요한 정보를 보유하지 않지만 귀하의 요청에 도움이 될 수 있는 서버 목록을 보유합니다.
루트 서버는 .COM, .ORG, .CO.UK 등과 같이 도메인 이름이 속한 최상위 도메인을 찾습니다. 그런 다음 이러한 유형의 도메인을 처리하는 최상위 도메인 서버 목록을 DNS 전구체 서버로 다시 보냅니다. 그런 다음 DNS 전구체 서버는 최상위 도메인 서버에 다시 한 번 요청할 수 있습니다.
최상위 도메인 서버는 신뢰할 수 있는 이름 서버의 세부 정보(도메인 세부 정보가 저장된 위치)를 DNS 전구체 서버로 다시 보냅니다. 그런 다음 DNS 서버는 원래 프로그램에 입력한 도메인 영역을 호스팅하는 권한 있는 이름 서버를 쿼리합니다. 권한 있는 이름 서버는 IP 주소를 DNS 서버로 다시 보내고, DNS 서버는 이를 다시 사용자에게 보냅니다.
발굴 설치
dig
는 이미 Ubuntu 18.04 및 Fedora 30 컴퓨터에 설치되어 있습니다. 그러나 다음 명령을 사용하여 Manjaro 18.04 컴퓨터에 설치해야 했습니다.
sudo pacman -Sy 바인드 도구
발굴 시작하기
첫 번째 예에서는 도메인 이름과 연결된 IP 주소를 반환합니다. 종종 여러 IP 주소가 단일 도메인 이름과 연결됩니다. 이는 예를 들어 로드 밸런싱이 사용되는 경우 자주 발생합니다.
아래와 같이 +short
query 옵션을 사용하여 간결한 응답을 제공합니다.
dig howtogeek.com +short
howtogeek.com 도메인과 관련된 모든 IP 주소가 나열됩니다. 스펙트럼의 다른 쪽 끝에서 +short
쿼리 옵션을 사용 하지 않으면 출력이 매우 장황합니다.
따라서 다음을 입력하여 less
를 통해 파이프합니다.
발굴 howtogeek.com | 더 적은
출력은 아래와 같이 less
에 표시됩니다.
전체 목록은 다음과 같습니다.
; <<>> DiG 9.11.3-1ubuntu1.11-Ubuntu <<>> howtogeek.com ;; 전역 옵션: +cmd ;; 답을 얻었다: ;; ->>헤더<<- opcode: QUERY, 상태: NOERROR, ID: 12017 ;; 플래그: qr rd ra; 쿼리: 1, 답변: 4, 권한: 0, 추가: 1 ;; 유사섹션 선택: ; EDNS: 버전: 0, 플래그:; UDP: 65494 ;; 질문 섹션: ;howtogeek.com. 안에 ;; 답변 섹션: 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 ;; 쿼리 시간: 0msec ;; 서버: 127.0.0.53#53(127.0.0.53) ;; 시간: 2020년 3월 22일 일요일 07:44:37 EDT ;; MSG 크기 rcvd: 106
그 부분을 분석해 봅시다.
헤더
먼저 헤더에 있는 내용을 살펴보겠습니다.
; <<>> DiG 9.11.3-1ubuntu1.11-Ubuntu <<>> howtogeek.com ;; 전역 옵션: +cmd ;; 답을 얻었다: ;; ->>헤더<<- opcode: QUERY, 상태: NOERROR, ID: 12017 ;; 플래그: qr rd ra; 쿼리: 1, 답변: 4, 권한: 0, 추가: 1
이제 이 모든 것이 의미하는 바는 다음과 같습니다.
- 첫 번째 줄:
dig
버전 및 쿼리된 도메인입니다. - 전역 옵션: 앞으로 살펴보겠지만
dig
를 사용하여 여러 도메인을 동시에 쿼리할 수 있습니다. 이 줄은 모든 도메인 쿼리에 적용된 옵션을 보여줍니다. 우리의 간단한 예에서는 기본+cmd
(명령) 옵션일 뿐입니다. - Opcode: Query: 요청된 작업 유형이며 이 경우
query
였습니다. 이 값은 역 쿼리의 경우 쿼리일 수도 있고iquery
시스템의 상태를 테스트하는 경우status
일 수도 있습니다. - 상태: 오류 없음: 오류가 없고 요청이 올바르게 해결되었습니다.
- ID: 12017 : 이 임의의 ID는 요청과 응답을 함께 묶습니다.
- 플래그: qr rd ra: 이는
query
,recursion desired
및recursion available
을 나타냅니다. 재귀는 DNS 조회의 한 형태입니다(다른 하나는 반복적임). Authoritative Answer의 약자인AA
도 볼 수 있습니다. 이는 신뢰할 수 있는 이름 서버가 응답을 제공했음을 의미합니다. - 쿼리: 1: 이 세션의 쿼리 수(1개)입니다.
- 답변: 4: 이 응답의 답변 수는 4입니다.
- Authority: 0: 이 경우 0인 Authoritative Name Server에서 온 응답의 수입니다. DNS 전구체 서버의 캐시에서 응답이 반환되었습니다. 응답에 권위 있는 섹션이 없습니다.
- 추가: 1: 추가 정보가 하나 있습니다. (이상하게도 이 값이 2 이상이 아니면 아무것도 나열되지 않습니다.)
의사 섹션 선택
다음으로 Opt Pseudosection에서 다음을 볼 수 있습니다.
;; 유사섹션 선택: ; EDNS: 버전: 0, 플래그:; UDP: 65494
다음과 같이 분해해 보겠습니다.
- EDNS: 버전 0: 사용 중인 DNS용 확장 시스템의 버전입니다. EDNS는 UDP(User Datagram Protocol) 패킷의 크기를 확장하여 확장 데이터와 플래그를 전송합니다. 이것은 가변 크기 플래그로 표시됩니다.
- flags: 사용 중인 플래그가 없습니다.
- udp : 4096: UDP 패킷 크기입니다.
질문 섹션
질문 섹션에는 다음이 표시됩니다.
;; 질문 섹션: ;howtogeek.com. 안에
이것이 의미하는 바는 다음과 같습니다.
- howtogeek.com: 우리가 쿼리하는 도메인 이름.
- IN: 우리는 인터넷 수업 쿼리를 만들고 있습니다.
- A: 달리 지정하지 않는 한
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: TTL(Time to Live)은 레코드를 캐시할 수 있는 시간 간격을 보유하는 32비트 부호 있는 정수입니다. 만료되면 DNS 서버에서 데이터를 새로 고칠 때까지 요청에 대한 응답으로 데이터를 사용해야 합니다.
- IN: 우리는 인터넷 클래스 쿼리를 만들었습니다.
- A: DNS 서버에서 A 레코드를 요청했습니다.
통계 섹션
통계는 마지막 섹션이며 다음 정보를 포함합니다.
;; 쿼리 시간: 0msec ;; 서버: 127.0.0.53#53(127.0.0.53) ;; 시간: 2020년 3월 22일 일요일 07:44:37 EDT ;; MSG 크기 rcvd: 106
여기 우리가 가진 것이 있습니다:
- 쿼리 시간: 0 msec: 응답을 받는 데 걸린 시간입니다.
- SERVER: 127.0.0.53#53(127.0.0.53): 응답한 DNS 서버의 IP 주소와 포트 번호입니다. 이 경우 로컬 캐싱 스텁 해석기를 가리키고 있습니다. 이렇게 하면 구성된 업스트림 DNS 서버로 DNS 요청이 전달됩니다. Manajro 테스트 컴퓨터에서 여기에 나열된 주소는 Google의 공개 DNS 서비스인 8.8.8.8#53이었습니다.
- 언제: 2020년 3월 22일 일요일 07:44:37 EDT: 요청이 이루어졌을 때.
- MSG SIZE rcvd: 106: DNS 서버에서 받은 메시지의 크기.
선별적이기
입술이 다물고 수다스럽다는 두 가지 극단에 안주할 필요는 없습니다. dig
명령을 사용하면 결과에서 섹션을 선택적으로 포함하거나 제외할 수 있습니다.
다음 쿼리 옵션은 결과에서 해당 섹션을 제거합니다.
- +nocomments: 주석 줄을 표시하지 않습니다.
- +noauthority: 권한 섹션을 표시하지 않습니다.
- +noadditional: 추가 섹션을 표시하지 않습니다.
- +nostats: 통계 섹션을 표시하지 않습니다.
- +noanswer: 답변 섹션을 표시하지 않습니다.
- +noall: 아무것도 보여주지 마세요!
+noall
쿼리 옵션은 일반적으로 결과에 섹션을 포함하기 위해 위의 옵션 중 하나와 결합됩니다. 따라서 여러 섹션을 끄기 위해 긴 쿼리 옵션 문자열을 입력하는 대신 +noall
을 사용하여 모든 섹션을 끌 수 있습니다.
그런 다음 다음 포괄적인 쿼리 옵션을 사용하여 다시 보고 싶은 옵션을 켤 수 있습니다.
- +comments: 코멘트 라인을 보여줍니다.
- +authority: 권한 섹션을 표시합니다.
- +additional: 추가 섹션을 표시합니다.
- +stats: 통계 섹션을 표시합니다.
- +answer: 답변 섹션을 표시합니다.
- +all: 모든 것을 보여줍니다.
다음을 입력하여 요청하고 주석 줄을 제외합니다.
dig howtogeek.com +nocomments
아래와 같이 +noall
쿼리 옵션을 단독으로 사용하면 유용한 출력을 얻을 수 없습니다.
dig howtogeek.com +noall
보고 싶은 섹션을 선택적으로 추가할 수 있습니다. 답변 섹션을 추가하려면 다음을 입력합니다.
dig howtogeek.com +noall +answer
다음을 입력하여 +stats
를 켜면 통계 섹션도 표시됩니다.
dig howtogeek.com +noall +answer +stats
+noall +answer
조합이 자주 사용됩니다. 필요에 따라 명령줄에 다른 섹션을 추가할 수 있습니다. dig
를 사용할 때마다 명령줄에 +noall +answer
를 입력하지 않으려면 ".digrc"라는 구성 파일에 넣을 수 있습니다. 홈 디렉토리에 있습니다.
echo
로 생성하기 위해 다음을 입력합니다.
echo "+noall +답변" > $HOME/.digrc
그런 다음 다음을 입력하여 내용을 확인할 수 있습니다.
고양이 .digrc
이 두 가지 옵션은 이제 아래와 같이 dig
의 모든 향후 사용에 적용됩니다.
발굴 ubuntu.org
linux.org를 파다
github.com을 파다
이 dig
구성 파일은 이 문서의 나머지 예제에 사용됩니다.
DNS 레코드
dig
요청에 반환된 정보는 DNS 서버에 보관된 다양한 유형의 레코드에서 가져옵니다. 다른 것을 요구하지 않는 한 dig
는 A(주소) 레코드를 쿼리합니다. 다음은 dig
와 함께 일반적으로 사용되는 레코드 유형입니다.
- A 레코드: 도메인을 IP 버전 4 주소에 연결합니다.
- MX 레코드: 메일 교환 레코드는 도메인으로 보낸 이메일을 올바른 메일 서버로 보냅니다.
- NS 레코드: 네임 서버 레코드는 도메인(또는 하위 도메인)을 DNS 서버 세트에 위임합니다.
- TXT 레코드: 텍스트 레코드는 도메인에 관한 텍스트 기반 정보를 저장합니다. 일반적으로 스푸핑되거나 위조된 이메일을 억제하는 데 사용될 수 있습니다.
- SOA 레코드: 전거 레코드의 시작은 도메인에 대한 많은 정보를 보유할 수 있습니다. 여기에서 기본 이름 서버, 책임 당사자, 변경에 대한 타임스탬프, 영역 새로 고침 빈도, 재시도 및 포기에 대한 일련의 시간 제한을 찾을 수 있습니다.
- TTL: TTL 은 DNS 전구체 서버가 각 DNS 쿼리를 캐시할 수 있는 기간을 지정하는 각 DNS 레코드의 설정입니다. 해당 시간이 만료되면 후속 요청을 위해 데이터를 새로 고쳐야 합니다.
- ANY: 이것은 가능한 모든 유형의 DNS 레코드를 반환하도록
dig
에 지시합니다.
A 레코드 유형을 지정하면 아래와 같이 주소 레코드를 쿼리하고 IP 주소를 얻는 기본 작업이 변경되지 않습니다.
redhat.com을 파다
메일 교환 기록을 조회하기 위해 다음 MX 플래그를 사용합니다.
yahoo.com MX를 파다
이름 서버 플래그는 최상위 도메인과 연결된 루트 이름 서버의 다음 이름을 반환합니다.
dig fedora.com NS
전거 레코드의 시작을 조회하기 위해 다음 SOA 플래그를 입력합니다.
dig manjaro.com SOA
TTL 플래그는 DNS 서버 캐시에 있는 데이터의 TTL(Time to Live)을 보여줍니다. 일련의 요청을 수행하면 TTL(Time to Live)이 아무것도 아닌 것으로 감소한 다음 시작 값으로 다시 이동합니다.
다음을 입력합니다.
발굴 usa.gov TTL
텍스트 레코드를 보려면 TX 플래그를 입력합니다.
발굴 usa.gov TXT
DNS 서버 지정
요청에 특정 DNS 서버를 사용하려는 경우 at 기호( @
)를 사용하여 명령줄 매개변수로 dig
에 전달할 수 있습니다.
기본 DNS 서버(아래 참조)에서 dig
는 127.0.0.53의 로컬 캐싱 스텁 확인자를 참조합니다.
발굴 usa.gov +stats
이제 8.8.8.8에서 Google의 공개 DNS 서버를 사용하기 위해 다음을 입력합니다.
dig @8.8.8.8 usa.gov +stats
여러 도메인에서 dig 사용
아래와 같이 명령줄에서 dig
를 위해 여러 도메인을 전달할 수 있습니다.
발굴 ubuntu.org fedora.org manjaro.com
정기적으로 도메인 집합을 확인하는 경우 텍스트 파일에 저장하고 dig
에 전달할 수 있습니다. 파일의 모든 도메인이 차례로 확인됩니다.
파일 이름은 "domains.txt"입니다. cat
을 사용하여 내용을 표시한 다음 -f
(파일) 옵션을 사용하여 dig
에 전달합니다. 다음을 입력합니다.
고양이 도메인.txt
파기 -f domains.txt
역방향 DNS 조회
IP 주소가 있고 주소가 어디로 가는지 알고 싶다면 역방향 DNS 조회를 시도할 수 있습니다. DNS 서버에 등록된 서버로 확인되면 해당 도메인을 찾을 수 있습니다.
가능 여부는 PTR(포인터 레코드)의 존재 여부에 달려 있습니다. PTR은 IP 주소를 정규화된 도메인 이름으로 확인합니다. 그러나 필수 항목이 아니기 때문에 도메인에 항상 존재하는 것은 아닙니다.
IP 주소 209.51.188.148이 우리를 어디로 데려가는지 알아봅시다. -x
(역방향 조회) 옵션을 사용하여 다음을 입력합니다.
발굴 -x 209.51.188.148
프레스토 악장! IP 주소는 gnu.org로 확인됩니다.
PTR은 DNS 레코드이고 dig
dig
PTR을 검색하도록 요청할 수 없습니까? 예, 할 수 있지만 작업이 조금 더 필요합니다.
아래와 같이 IP 주소를 역순으로 제공하고 끝에 .in-addr.arpa
를 붙여야 합니다.
발굴 ptr 148.188.51.209.in-addr.arpa
우리는 같은 결과를 얻습니다. 조금 더 노력했을 뿐입니다.
당신은 그것을 파낼 수 있습니까?
우리 모두는 매일 인터넷을 사용하며 호기심 많은 사람들은 종종 우리가 브라우저에 웹사이트 이름을 입력할 때 마술이 어떻게 일어나는지 궁금해합니다. dig
를 사용하면 네트워크 구성 프로세스를 탐색할 수 있습니다.
리눅스 명령어 | ||
파일 | tar · pv · cat · tac · chmod · grep · diff · sed · ar · man · pushd · popd · fsck · testdisk · seq · fd · pandoc · cd · $PATH · awk · join · jq · fold · uniq · journalctl · tail · stat · ls · fstab · echo · less · chgrp · chown · rev · 보기 · 문자열 · 유형 · 이름 바꾸기 · zip · 압축 풀기 · 마운트 · 언마운트 · 설치 · fdisk · mkfs · rm · rmdir · rsync · df · gpg · vi · nano · mkdir · du · ln · 패치 · 변환 · rclone · 파쇄 · srm | |
프로세스 | alias · screen · top · nice · renice · progress · strace · systemd · tmux · chsh · history · at · batch · free · which · dmesg · chfn · usermod · ps · chroot · xargs · tty · pinky · lsof · vmstat · timeout · wall · yes · kill · sleep · sudo · su · time · groupadd · usermod · groups · lshw · 종료 · 재부팅 · 정지 · poweroff · passwd · lscpu · crontab · 날짜 · bg · fg | |
네트워킹 | netstat · ping · traceroute · ip · ss · whois · fail2ban · bmon · dig · finger · nmap · ftp · curl · wget · who · whoami · w · iptables · ssh-keygen · ufw |
관련: 개발자 및 열광자를 위한 최고의 Linux 노트북