- DIG(Domain Information Groper)는 DNS 이름 서버를 쿼리하는 강력한 명령줄 도구
- dig 명령어를 사용하면 호스트 주소, 메일 교환 및 이름 서버를 비롯한 다양한 DNS 레코드에 대한 정보를 쿼리 가능
- dig 명령어는 유연성과 사용 편의성 때문에 DNS 문제를 해결하는 데 시스템 관리자 중 가장 많이 사용되는 도구
- DNS 조회 웹 페이지 : https://ko.rakko.tools/tools/18/
1. dig 설치
시스템 유형에서 dig 명령을 사용할 수 있는지 확인
$ dig -v DiG 9.8.2rc1-RedHat-9.8.2-0.68.rc1.el6_10.3
CentOS 및 Fedora에 dig 명령어 설치
$ yum install -y bind-utils
2. Dig 출력 이해
간단한 형식으로 추가 옵션 없이 단일 호스트(도메인)를 쿼리
dig 명령은 매우 상세하게 도메인의 내용을 출력
www.baidu.com 도메인으로 테스트
$ dig www.baidu.com ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.68.rc1.el6_10.3 <<>> www.baidu.com ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 25980 ;; flags: qr rd ra; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 0 ;; QUESTION SECTION: ;www.baidu.com. IN A ;; ANSWER SECTION: www.baidu.com. 356 IN CNAME www.a.shifen.com. www.a.shifen.com. 83 IN CNAME www.wshifen.com. www.wshifen.com. 296 IN A 119.63.197.151 www.wshifen.com. 296 IN A 119.63.197.139 ;; Query time: 34 msec ;; SERVER: 8.8.8.8#53(8.8.8.8) ;; WHEN: Wed Jun 22 00:13:05 2022 ;; MSG SIZE rcvd: 116
3. ANSWER SECTION의 내용 확인
- dig 쿼리에 대한 특정 내용만 답변으로 추출
3.1. ANSWER SECTION의 짧은 내용 얻기
- 쿼리에 대한 짧은 대답을 얻으려면 +short 옵션을 사용
- 질의한 도메인 ANSWER SECTION의 답만 출력
- 출력에는 CNAME과 A 레코드의 IP 주소를 포함
$ dig www.baidu.com +short www.a.shifen.com. www.wshifen.com. 119.63.197.139 119.63.197.151
3.2. ANSWER SECTION 자세한 내용 얻기
- ANSWER SECTION의 자세한 응답 확인을 보려면 +noall 옵션을 사용한 후, +answer 옵션을 사용하여 ANSWER SECTION만 출력
$ dig www.baidu.com +noall +answer ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.68.rc1.el6_10.3 <<>> www.baidu.com +noall +answer ;; global options: +cmd www.baidu.com. 234 IN CNAME www.a.shifen.com. www.a.shifen.com. 7 IN CNAME www.wshifen.com. www.wshifen.com. 118 IN A 119.63.197.139 www.wshifen.com. 118 IN A 119.63.197.151
4. 특정 DNS에서 도메인 쿼리
기본적으로 DNS를 지정되지 않은 경우 도메인에 대한 질의 불가
DNS 명령어에 @DNS을 추가하지 않으면, /etc/resolv.conf 파일에 나열된 DNS 서버를 사용
쿼리를 실행할 DNS를 지정하려면 @ 기호 뒤에 DNS IP 주소 또는 호스트 이름을 사용
예시로는 AWS의 DNS 서버(1.1.1.1)에서 www.baidu.com 도메인에 대한 정보를 쿼리함
$ dig www.baidu.com @1.1.1.1 ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.68.rc1.el6_10.3 <<>> www.baidu.com @1.1.1.1 ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 5787 ;; flags: qr rd ra; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 0 ;; QUESTION SECTION: ;www.baidu.com. IN A ;; ANSWER SECTION: www.baidu.com. 1183 IN CNAME www.a.shifen.com. www.a.shifen.com. 283 IN CNAME www.wshifen.com. www.wshifen.com. 283 IN A 119.63.197.151 www.wshifen.com. 283 IN A 119.63.197.139 ;; Query time: 3 msec ;; SERVER: 1.1.1.1#53(1.1.1.1) ;; WHEN: Wed Jun 22 01:05:52 2022 ;; MSG SIZE rcvd: 116
5. 레코드 유형 쿼리
- dig 명령어를 사용하면 쿼리 끝에 레코드 유형을 추가하여 유효한 DNS 쿼리를 수행 가능
- 아래 섹션은 A(IP 주소), CNAME(도메인 별칭), TXT(텍스트 레코드), MX(메일 교환기) 및 NS(DNS 서버)와 같은 가장 일반적인 레코드를 검색하는 방법 정리
5.1. A 레코드 쿼리
도메인 이름에 대한 모든 주소 목록을 가져오려면 아래 옵션을 사용
DNS 레코드 유형이 지정되지 않은 경우 dig에서 A 레코드를 요청 → 옵션을 지정하지 않고 A 레코드를 쿼리 가능
# 형식 : dig 도메인 -t A 또는 dig 도메인 A 또는 dig 도메인 $ dig www.baidu.com -t A ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.68.rc1.el6_10.3 <<>> www.baidu.com -t A ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 46904 ;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 0 ;; QUESTION SECTION: ;www.baidu.com. IN A ;; ANSWER SECTION: www.baidu.com. 541 IN CNAME www.a.shifen.com. www.a.shifen.com. 195 IN CNAME www.wshifen.com. www.wshifen.com. 146 IN A 103.235.46.40 ;; Query time: 34 msec ;; SERVER: 8.8.8.8#53(8.8.8.8) ;; WHEN: Wed Jun 22 01:33:45 2022 ;; MSG SIZE rcvd: 100
5.2. CNAME 레코드 쿼리
도메인 별칭 이름을 찾으려면 cname 옵션을 사용
# 형식 : dig 도메인 -t cname 또는 dig 도메인 cname $ dig www.baidu.com -t cname ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.68.rc1.el6_10.3 <<>> www.baidu.com -t cname ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 45541 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0 ;; QUESTION SECTION: ;www.baidu.com. IN CNAME ;; ANSWER SECTION: www.baidu.com. 145 IN CNAME www.a.shifen.com. ;; Query time: 38 msec ;; SERVER: 8.8.8.8#53(8.8.8.8) ;; WHEN: Wed Jun 22 01:38:13 2022 ;; MSG SIZE rcvd: 58
5.3. TXT 레코드 쿼리
특정 도메인에 대한 모든 TXT 레코드를 검색하려면 txt 옵션을 사용
# 형식 : dig 도메인 -t txt 또는 dig 도메인 txt $ dig baidu.com -t txt ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.68.rc1.el6_10.3 <<>> baidu.com -t txt ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 20891 ;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 0 ;; QUESTION SECTION: ;baidu.com. IN TXT ;; ANSWER SECTION: baidu.com. 7200 IN TXT "_globalsign-domain-verification=qjb28W2jJSrWj04NHpB0CvgK9tle5JkOq-EcyWBgnE" baidu.com. 7200 IN TXT "v=spf1 include:spf1.baidu.com include:spf2.baidu.com include:spf3.baidu.com include:spf4.baidu.com a mx ptr -all" baidu.com. 7200 IN TXT "google-site-verification=GHb98-6msqyx_qqjGl5eRatD3QTHyVB6-xQ3gJB5UwM" ;; Query time: 109 msec ;; SERVER: 8.8.8.8#53(8.8.8.8) ;; WHEN: Wed Jun 22 01:44:16 2022 ;; MSG SIZE rcvd: 320
5.4. MX 레코드 쿼리
특정 도메인의 모든 메일 서버 목록을 가져오려면 mx 옵션을 사용
# 형식 : dig 도메인 -t mx 또는 dig 도메인 mx $ dig baidu.com -t mx ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.68.rc1.el6_10.3 <<>> baidu.com -t mx ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 60866 ;; flags: qr rd ra; QUERY: 1, ANSWER: 6, AUTHORITY: 0, ADDITIONAL: 0 ;; QUESTION SECTION: ;baidu.com. IN MX ;; ANSWER SECTION: baidu.com. 7111 IN MX 20 jpmx.baidu.com. baidu.com. 7111 IN MX 20 mx50.baidu.com. baidu.com. 7111 IN MX 20 usmx01.baidu.com. baidu.com. 7111 IN MX 10 mx.maillb.baidu.com. baidu.com. 7111 IN MX 15 mx.n.shifen.com. baidu.com. 7111 IN MX 20 mx1.baidu.com. ;; Query time: 33 msec ;; SERVER: 8.8.8.8#53(8.8.8.8) ;; WHEN: Wed Jun 22 01:43:50 2022 ;; MSG SIZE rcvd: 166
5.5. NS 레코드 쿼리
특정 도메인에 대한 권한 있는 이름 서버를 찾으려면 ns 옵션을 사용
# 형식 : dig 도메인 -t ns 또는 dig 도메인 ns $ dig baidu.com -t ns ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.68.rc1.el6_10.3 <<>> baidu.com -t ns ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 15087 ;; flags: qr rd ra; QUERY: 1, ANSWER: 5, AUTHORITY: 0, ADDITIONAL: 0 ;; QUESTION SECTION: ;baidu.com. IN NS ;; ANSWER SECTION: baidu.com. 21600 IN NS ns2.baidu.com. baidu.com. 21600 IN NS ns7.baidu.com. baidu.com. 21600 IN NS dns.baidu.com. baidu.com. 21600 IN NS ns4.baidu.com. baidu.com. 21600 IN NS ns3.baidu.com. ;; Query time: 84 msec ;; SERVER: 8.8.8.8#53(8.8.8.8) ;; WHEN: Wed Jun 22 01:43:18 2022 ;; MSG SIZE rcvd: 117
5.6. 모든 레코드 쿼리
특정 도메인에 대한 모든 DNS 레코드 목록을 가져오려면 임의 옵션을 사용
# 형식 : dig 도메인 -t any 또는 dig 도메인 any $ dig baidu.com -t any ;; Truncated, retrying in TCP mode. ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.68.rc1.el6_10.3 <<>> baidu.com -t any ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 5705 ;; flags: qr rd ra; QUERY: 1, ANSWER: 17, AUTHORITY: 0, ADDITIONAL: 0 ;; QUESTION SECTION: ;baidu.com. IN ANY ;; ANSWER SECTION: baidu.com. 7200 IN SOA dns.baidu.com. sa.baidu.com. 2012145445 300 300 2592000 7200 baidu.com. 7200 IN TXT "google-site-verification=GHb98-6msqyx_qqjGl5eRatD3QTHyVB6-xQ3gJB5UwM" baidu.com. 7200 IN TXT "v=spf1 include:spf1.baidu.com include:spf2.baidu.com include:spf3.baidu.com include:spf4.baidu.com a mx ptr -all" baidu.com. 7200 IN TXT "_globalsign-domain-verification=qjb28W2jJSrWj04NHpB0CvgK9tle5JkOq-EcyWBgnE" baidu.com. 7200 IN MX 20 mx50.baidu.com. baidu.com. 7200 IN MX 15 mx.n.shifen.com. baidu.com. 7200 IN MX 10 mx.maillb.baidu.com. baidu.com. 7200 IN MX 20 mx1.baidu.com. baidu.com. 7200 IN MX 20 jpmx.baidu.com. baidu.com. 7200 IN MX 20 usmx01.baidu.com. baidu.com. 600 IN A 220.181.38.251 baidu.com. 600 IN A 220.181.38.148 baidu.com. 21600 IN NS ns7.baidu.com. baidu.com. 21600 IN NS ns3.baidu.com. baidu.com. 21600 IN NS dns.baidu.com. baidu.com. 21600 IN NS ns2.baidu.com. baidu.com. 21600 IN NS ns4.baidu.com. ;; Query time: 152 msec ;; SERVER: 8.8.8.8#53(8.8.8.8) ;; WHEN: Wed Jun 22 01:45:49 2022 ;; MSG SIZE rcvd: 620
6. 역 DNS 조회
특정 IP 주소와 연결된 호스트 이름을 쿼리하려면 -x 옵션을 사용
예시로 208.118.235.148에 대해 역방향 조회를 수행
$ dig -x 8.8.8.8 ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.68.rc1.el6_10.3 <<>> -x 8.8.8.8 ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 10553 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0 ;; QUESTION SECTION: ;8.8.8.8.in-addr.arpa. IN PTR ;; ANSWER SECTION: 8.8.8.8.in-addr.arpa. 19236 IN PTR dns.google. ;; Query time: 32 msec ;; SERVER: 8.8.8.8#53(8.8.8.8) ;; WHEN: Wed Jun 22 01:53:35 2022 ;; MSG SIZE rcvd: 62
7. 대량 쿼리
많은 수의 도메인을 쿼리하려면 해당 도메인을 파일에 추가하고(행당 하나의 도메인) -f 옵션 뒤에 파일 이름을 붙이면 질의 가능
파일에 있는 나열된 도메인을 쿼리
$ cat domainlist.txt www.baidu.com www.google.com # domainlist.txt 파일에 있는 도메인 질의 $ dig -f domainlist.txt ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.68.rc1.el6_10.3 <<>> www.baidu.com ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 57218 ;; flags: qr rd ra; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 0 ;; QUESTION SECTION: ;www.baidu.com. IN A ;; ANSWER SECTION: www.baidu.com. 443 IN CNAME www.a.shifen.com. www.a.shifen.com. 235 IN CNAME www.wshifen.com. www.wshifen.com. 226 IN A 119.63.197.139 www.wshifen.com. 226 IN A 119.63.197.151 ;; Query time: 34 msec ;; SERVER: 8.8.8.8#53(8.8.8.8) ;; WHEN: Wed Jun 22 01:58:00 2022 ;; MSG SIZE rcvd: 116 ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.68.rc1.el6_10.3 <<>> www.google.com ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 13832 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0 ;; QUESTION SECTION: ;www.google.com. IN A ;; ANSWER SECTION: www.google.com. 300 IN A 142.250.204.100 ;; Query time: 51 msec ;; SERVER: 8.8.8.8#53(8.8.8.8) ;; WHEN: Wed Jun 22 01:58:00 2022 ;; MSG SIZE rcvd: 48
8. .digrc 파일
dig 명령의 동작은 ${HOME}/.digrc 파일에서 사용자별 옵션을 설정하여 제어 가능
사용자의 홈 디렉터리에 .digrc 파일이 있는 경우 파일에 지정된 옵션이 명령줄 인수 앞에 적용됨
섹션만 표시하려면 텍스트 편집기를 열고 다음 ~/.digrc 파일을 생성 → ANSWER SECTION의 자세한 응답 확인하기 위해 +noall과 +answer 저장
$ cat ~/.digrc +noall +answer $ dig www.baidu.com ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.68.rc1.el6_10.3 <<>> www.baidu.com +noall +answer ;; global options: +cmd www.baidu.com. 234 IN CNAME www.a.shifen.com. www.a.shifen.com. 7 IN CNAME www.wshifen.com. www.wshifen.com. 118 IN A 119.63.197.139 www.wshifen.com. 118 IN A 119.63.197.151
9. dig 사용 옵션
- dig 명령어에는 ‘-‘ 옵션과 ‘+’ 옵션이 있음
- dig 사용 주요 옵션
옵션 설명 비고 -b source IP를 다른 IP로 설정 interface IP -f batch 모두 동작시 파일이름을 지정 -m debugging -p 53 이외의 포트번호를 지정 -4 or -6 IPv4 또는 IPv6 강제 지정 -t Type을 지정 기본 문법에 포함 -c Class를 지정 사실상 무의미 (IN) -x reverse lookup IP to name +tcp TCP 프로토콜 사용 +notcp +trace delegation path 추적 +notrace +short Answer Section 결과만을 표시 +noshort +comments Comments Section 표시 +nocomments +question Question Section 표시 +noquestion +answer Answer Section 표시 +noanswer +authority Authority Section 표시 +noauthority +additional Additional Section 표시 +noadditional +stats Statistics Section 표시 +nostats +all Comments부터 Statistics Section 모두 표시 +noall +multiline 긴 record를 여러 줄로 보기 좋게 표시 +nomultiline
참고 자료
'OS(운영체제) > 리눅스 명령어' 카테고리의 다른 글
install 명령어 → 속성을 설정하고 파일을 복사 (3) | 2024.03.13 |
---|---|
pwconv 명령어 → Linux에 패스워드 정책을 shadow 패스워드 방식으로 적용 (0) | 2024.03.09 |
crontab 명령어 → 특정 시간에 특정 작업을 예약 (0) | 2022.07.23 |
powertop 명령어 → 시스템의 전력사용을 모니터링 (0) | 2022.07.21 |
turbostat 명령어 (CPU의 frequency와 idle 통계 확인) (0) | 2022.07.20 |