Sử dụng lệnh dig để truy vấn DNS trên Linux

Tác giả: 06/10/2022

1. Giới thiệu

Domain Information Groper (dig) là một công cụ mạng mạnh mẽ để để truy vấn DNS.

Lệnh dig có thể truy vấn thông tin các bản ghi DNS khác nhau bao gồm địa chỉ máy chủ. Đây là công cụ được sử dụng phổ biến để khắc phục sự cố DNS vì tính linh hoạt và dễ sử dụng của nó.

2. Cài đặt dig

– Đối với hệ thống Debian/Ubuntu:

apt-get install dnsutils

– Đối với hệ thống RHEL/CentOS:

yum install -y bind-utils

Sau khi cài đặt dig ta kiểm tra phiên bản bằng lệnh:

dig -v

3. Cách sử dụng dig

3.1 Truy vấn DNS cơ bản

Để thực hiện truy vấn đến tên miền google.com, chúng ta thực hiện như sau:

[root@tubt mnt]# dig google.com

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.9 <<>> google.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 54382
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

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

;; ANSWER SECTION:
google.com. 111 IN A 172.217.24.238

;; Query time: 46 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Wed Sep 28 13:12:29 +07 2022
;; MSG SIZE rcvd: 55

Ý nghĩa:

  • Dòng đầu tiên của đầu ra hiển thị version đã cài đặt và truy vấn được gọi. Dòng thứ hai hiển thị tùy chọn (theo mặc định là cmd)

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.9 <<>> google.com
;; global options: +cmd

  • Phần tiếp theo, dòng đầu tiên của phần này là tiêu đề, bao gồm opcode, statusid của hành động. Trong trường hợp này trạng thái NOERROR có nghĩa là yêu cầu truy vấn DNS không gặp lỗi.

;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 54382
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

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

  • Tiếp đến là phần mà dig hiển thị truy vấn của chúng ta. Theo mặc định dig sẽ yêu cầu bản ghi A

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

  • Phần trả lời sau khi truy xuất, cung cấp cho chúng ta địa chỉ IP mà tên miền google.com trỏ tới là IP 172.217.24.238

;; ANSWER SECTION:
google.com. 111 IN A 172.217.24.238

  • Đây là phần cuối cùng của đầu ra bao gồm số liệu thống kê về truy vấn

;; Query time: 46 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Wed Sep 28 13:12:29 +07 2022
;; MSG SIZE rcvd: 55

Trong đó:

Query time: Cho biết tổng thời gian kết nối.

SERVER: 8.8.8.8: Cho biết nameserver resolve đang dùng.

WHEN: Cho biết thời điểm thực hiện truy vấn DNS.

MSG SIZE rcvd: Kích thước gói tin trả lời truy vấn DNS.

3.2 Truy vấn địa chỉ ip

Để có kết quả ngắn cho truy vấn ta có thể thêm tùy chọn +short:

[root@tubt mnt]# dig google.com +short
172.217.24.78

Kết quả chỉ có địa chỉ của bản ghi A

Để có kết quả chi tiết hơn ta sử dụng các tùy chọn +noall+aswer:

[root@tubt mnt]# dig google.com +noal +answer

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.9 <<>> google.com +noal +answer
;; global options: +cmd
google.com. 123 IN A 142.250.66.78

Trong đó:

+noall: Tắt tất cả các section

+answer: Chỉ mở answer section

3.3 Truy vấn bản ghi MX cho tên miền

[root@tubt mnt]# dig google.com MX +noall +answer

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.9 <<>> google.com MX +noall +answer
;; global options: +cmd
google.com. 132 IN MX 10 smtp.google.com.

3.4 Truy vấn bản ghi SOA cho tên miền

[root@tubt mnt]# dig google.com SOA +noall +answer

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.9 <<>> google.com SOA +noall +answer
;; global options: +cmd
google.com. 16 IN SOA ns1.google.com. dns-admin.google.com. 477125607 900 900 1800 60

3.5 Truy vấn bản ghi TTL cho tên miền

[root@tubt mnt]# dig google.com TTL +noall +answer

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.9 <<>> google.com TTL +noall +answer
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 47786
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

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

;; ANSWER SECTION:
google.com. 3 IN A 172.217.24.238

;; Query time: 47 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Wed Sep 28 17:29:03 +07 2022
;; MSG SIZE rcvd: 55

3.6 Truy vấn DNS ngược

Để truy vấn tên máy chủ được liên kết với một địa chỉ IP cụ thể, ta sử dụng tùy chọn -x.

Ví dụ: Để thực hiện tra cứu ngược lại địa chỉ IP 142.251.220.46 thành tên miền chúng ta làm như sau:

[root@tubt mnt]# dig -x 222.255.27.51 +noall +answer

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.9 <<>> -x 222.255.27.51 +noall +answer
;; global options: +cmd
51.27.255.222.in-addr.arpa. 21600 IN PTR static.vnpt.vn.

3.7 Truy vấn số lượng lớn tên miền

Nếu bạn muốn truy vấn một số lượng lớn tên miền cùng một lúc, bạn có thể thêm chúng vào một tệp và sử dụng tùy chọn -f để truy vấn

Trong ví dụ sau, mình đang truy vấn các tên miền được liệt kê trong tệp domain.txt

[root@tubt mnt]# cat domain.txt
facebook.com
google.com
amazon.com
[root@tubt mnt]# dig -f domain.txt +noall +answer
facebook.com. 300 IN A 31.13.75.35
google.com. 33 IN A 172.217.25.14
amazon.com. 505 IN A 52.94.236.248
amazon.com. 505 IN A 54.239.28.85
amazon.com. 505 IN A 205.251.242.103

3.8 Truy vấn DNS bằng TCP

Theo mặc định thì lệnh dig truy vấn DNS qua udp, để có thể dùng lệnh dig truy vấn DNS qua tcp chúng ta thực hiện như sau:

dig +tcp [domain]

3.9 Điều chỉnh mặc định với tệp ~/.digrc

Chúng ta có thể tạo tệp .digrc trong thư mục chính để bao gồm tùy chọn mà chúng ta muốn lệnh dig thực hiện. Chúng ta có thể chỉ định các tùy chọn khác nhau trong tệp ~/.digrc sẽ luôn tự động chạy khi sử dụng lệnh dig

Trong ví dụ này mình sẽ thêm tùy chọn +short vào ~/.digrc sau đó thực hiện lệnh dig như sau:

[root@tubt ~]# cat .digrc
+short
[root@tubt ~]# dig amazon.com
205.251.242.103
54.239.28.85
52.94.236.248

4. Lời kết

Bài viết trên đã hướng dẫn các bạn sử dụng lệnh dig theo nhiều cách khác nhau để thực hiện các truy cấn DNS trên hệ điều hành Linux

Chúc các bạn thành công và hẹn gặp lại các bạn trong các bài viết sau tại wiki.nhanhoa.com

Trả lời