Với lệnh dig, bạn có thể truy vấn thông tin về các bản ghi DNS, bao gồm: host addresses, mail exchanges, và name servers. Đây là công cụ được các quản trị viên hệ thống sử dụng phổ biến nhất để khắc phục sự cố DNS vì tính linh hoạt và dễ sử dụng của nó.

DNS là viết tắt của Domain Information Groper là một công cụ dòng lệnh quản trị mạng được dùng để truy vấn DNS name servers. Với lệnh dig, bạn có thể truy vấn thông tin về các bản ghi DNS, bao gồm: host addresses, mail exchanges, và name servers. Đây là công cụ được các quản trị viên hệ thống sử dụng phổ biến nhất để khắc phục sự cố DNS vì tính linh hoạt và dễ sử dụng của nó. dig là một phần của bộ phần mềm BIND DNS. Câu lệnh dig thay thế công cụ là nslookup và host.

Nội dung

  1. Cài đặt Dig trên Linux
  2. Cú pháp
  3. Cách sử dụng câu lệnh dig
  4. Sử dụng dig với các truy vấn ngắn

Cài đặt Dig trên Linux

  • Trên Ubuntu:

    apt-get install dnsutils
  • Trên CentOS 7

    yum install bind-utils
  • Trên CentOS 8:

    dnf install bind-utils
  • Sau khi cài đặt xong, kiểm tra version của dig:

    dig -v

    OUTPUT CentOS 8:

    DiG 9.11.4-P2-RedHat-9.11.4-17.P2.el8_0.1

    Nếu dig chưa được cài đặt vào hệ thống, output sẽ có dạng: "dig: command not found"

Cú pháp

  • Ở dạng đơn giản nhất, cú pháp của câu lệnh dig sẽ có dạng:
    dig [server] [name] [type]
    Trong đó:
    • [server] – địa chỉ IP hoặc hostname của name server sẽ dùng để thực hiện truy vấn.
      • Nếu bạn cung cấp cho đối số server thông tin về hostname thì nó sẽ giải quyết hostname trước khi tiếp tục truy vấn name server.
      • Đây là tùy chọn nên bạn cũng có thể không khai báo ở đây, trong trường hợp không khai báo thì dig sẽ lấy thông tin này trong file /etc/resolv.conf.
    • [name] – tên của bản ghi resource sẽ được truy vấn.
    • [type] – loại truy vấn được yêu cầu bởi dig. Nó có thể là 1 trong số các bản ghi: A, MX, SOA,…Nếu không có bản ghi nào được chỉ định thì dig sẽ mặc định đó là bản ghi A.

Cách sử dụng câu lệnh dig

  • Thực hiện tra cứu DNS cho một tên miền, thực hiện câu lệnh:
  dig google.com

OUTPUT

Giải thích output của câu lệnh dig

  • 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ị các tùy chọn(theo mặc định chỉ cmd).
 ; <<>> DiG 9.11.4-P2-RedHat-9.11.4-17.P2.el8_0.1 <<>> google.com
 ;; global options: +cmd

Nếu bạn không muốn những dòng này xuất hiện ở output, có thể sử dụng tùy chọn +nocmd ở ngay sau câu lệnh dig

  • Phần tiếp theo, dòng đầu tiên của phần này là tiêu đề, bao gồm opcode và trạng thái 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 truy vấn DNS không gặp lỗi.
 ;; Got answer:
 ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 60111
 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 4, ADDITIONAL: 9

Bạn cũng có thể cho phép không hiển thị phần này ở output bằng cách sử dụng tùy chọn +nocomments, đồng thời nó cũng sẽ disable output của 1 vài phần header khác.

  • Phần "OPT" được hiển thị theo mặc định chỉ trên các phiên bản mới hơn.
 ;; OPT PSEUDOSECTION:
 ; EDNS: version: 0, flags:; udp: 4096
  • Phần "QUESTION" là phần mà lệnh 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

Bạn có thể disable output của phần này bằng cách sử dụng tùy chọn +noquestion

  • Phần ANSWER cung cấp cho chúng ta tên miền google.com. trỏ đến địa chỉ IP 172.217.31.238
;; ANSWER SECTION:
 google.com.             300     IN      A       172.217.31.238

Disable phần output này với tùy chọn +noanswer nếu bạn cần.

  • Phần "AUTHORITY" nói cho chúng ta biết những server nào là authority để trả lời truy vấn DNS về truy vấn tên miền.
;; AUTHORITY SECTION:
 google.com.             172799  IN      NS      ns3.google.com.
 google.com.             172799  IN      NS      ns4.google.com.
 google.com.             172799  IN      NS      ns1.google.com.
 google.com.             172799  IN      NS      ns2.google.com.

Disable nó bằng tùy chọn +noauthority

  • Phần "ADDITIONAL" cho chúng ta thông tin về địa chỉ IP của các authoritative DNS server
 ;; ADDITIONAL SECTION:
 ns2.google.com.         172799  IN      A       216.239.34.10
 ns1.google.com.         172799  IN      A       216.239.32.10
 ns3.google.com.         172799  IN      A       216.239.36.10
 ns4.google.com.         172799  IN      A       216.239.38.10
 ns2.google.com.         172799  IN      AAAA    2001:4860:4802:34::a
 ns1.google.com.         172799  IN      AAAA    2001:4860:4802:32::a
 ns3.google.com.         172799  IN      AAAA    2001:4860:4802:36::a
 ns4.google.com.         172799  IN      AAAA    2001:4860:4802:38::a

Tùy chọn +noadditional sẽ giúp bạn disable phần này.

  • Phần cuối của OUTPUT bao gồm các số liệu đầu ra của truy vấn
 ;; Query time: 1806 msec
 ;; SERVER: 10.10.34.112#53(10.10.34.112)
 ;; WHEN: Fri Feb 07 13:00:38 +07 2020
 ;; MSG SIZE  rcvd: 331

Bạn có thể disable phần này với tùy chọn +nostats

Sử dụng lệnh dig với các truy vấn ngắn

Truy vấn lấy địa chỉ IP

  • Sử dụng dig với tùy chọn +short
 # dig google.com +short
172.217.31.238

Kết quả trả về chỉ bao gồm địa chỉ IP của bản ghi A.

  • Để có kết quả chi tiết hơn, bạn có thể sử dụng thêm 2 tùy chọn +noall+answer
# dig google.com +noall +answer
; <<>> DiG 9.11.4-P2-RedHat-9.11.4-17.P2.el8_0.1 <<>> google.com +noall +answer
;; global options: +cmd
google.com. 134 IN A 172.217.31.238

Trong đó:
+noall: tắt tất cả các section
+answer: chỉ mở với secion ANSWER

Truy vấn với name server cụ thể

  • Theo mặc định nếu khi sử dụng lệnh dig mà không chỉ rõ name server nào thì server sẽ sử dụng name server được khai báo trong file /etc/resolv.conf
  • Để chỉ định name server mà truy vấn sẽ thực hiện, sử dụng biểu tượng @ + địa chỉ IP/hostname

Ví dụ: Truy vấn name server Google có địa chỉ là 8.8.8.8 để lấy thông tin về tên miền google.com

dig google.com @8.8.8.8

OUTPUT

Truy vấn theo bản ghi

  • Dig cho phép bạn thực hiện bất kỳ truy vấn hợp lệ nào bằng cách nối thêm loại bản ghi vào cuối truy vấn.

[1] Truy vấn bản ghi A

  • Để có danh sách địa chỉ cho 1 tên miền, sử dụng tùy chọn a
# dig +nocmd google.com a +noall +answer

OUTPUT

google.com.             300     IN      A       172.217.31.238

Tuy nhiên bạn cũng có cần sử dụng tùy chọn a vì theo mặc định nếu không có bản ghi nào được chọn, hệ thống sẽ mặc định truy vấn bản ghi A.

[2] Truy vấn bản ghi CNAME

  • Sử dụng tùy chọn cname
 # dig +nocmd mail.google.com cname +noall +answer

OUTPUT

 mail.google.com.        21501   IN      CNAME   googlemail.l.google.com. 

[3] Truy vấn bản ghi TXT

  • Sử dụng tùy chọn txt
# dig +nocmd google.com txt +noall +answer

OUTPUT

 google.com.             300     IN      TXT     "facebook-domain-verification=22rm551cu4k0ab0bxsw536tlds4h95"
 google.com.             300     IN      TXT     "docusign=05958488-4752-4ef2-95eb-aa7ba8a3bd0e"
 google.com.             300     IN      TXT     "v=spf1 include:_spf.google.com ~all"
 google.com.             300     IN      TXT     "docusign=1b0a6754-49b1-4db5-8540-d2c12664b289"
 google.com.             300     IN      TXT     "globalsign-smime-dv=CDYX+XFHUw2wml6/Gb8+59BsH31KzUr6c1l2BPvqKX8="

[4] Truy vấn bản ghi MX

  • Sử dụng tùy chọn mx
 # dig +nocmd google.com mx +noall +answer

OUTPUT

google.com.             599     IN      MX      10 aspmx.l.google.com.   google.com.             599     IN      MX      20 alt1.aspmx.l.google.com.   google.com.             599     IN      MX      40 alt3.aspmx.l.google.com.   google.com.             599     IN      MX      50 alt4.aspmx.l.google.com.   google.com.             599     IN      MX      30 alt2.aspmx.l.google.com. 

[5] Truy vấn bản ghi NS

  • Sử dụng tùy chọn ns
# dig +nocmd google.com ns +noall +answer

OUTPUT

 google.com.             169811  IN      NS      ns4.google.com.
 google.com.             169811  IN      NS      ns3.google.com.
 google.com.             169811  IN      NS      ns2.google.com.
 google.com.             169811  IN      NS      ns1.google.com.

[6] Truy vấn bản ghi SOA

  • Sử dụng tùy chọn soa
# dig +nocmd google.com soa +noall +answer

OUTPUT

google.com.             43      IN      SOA     ns1.google.com. dns-admin.google.com. 289824707 900 900 1800 60

[7] Truy vấn bản ghi TTL

  • Sử dụng tùy chọn ttl
 # dig +nocmd google.com ttl +noall +answer 

OUTPUT

[8] Truy vấn tất cả bản ghi

  • Sử dụng tùy chọn any
# dig +nocmd google.com any +noall +answer

OUTPUT

 google.com.             151     IN      A       172.217.31.238
 google.com.             169516  IN      NS      ns2.google.com.
 google.com.             169516  IN      NS      ns1.google.com.
 google.com.             169516  IN      NS      ns3.google.com.
 google.com.             169516  IN      NS      ns4.google.com.

[9] Tra cứu 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ể, hãy sử dụng tùy chọn -x.
  • Ví dụ: Tra cứu địa chỉ IP 31.13.95.36 thành tên miền
 dig -x 31.13.95.36 +noall +answer 

OUTPUT

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-17.P2.el8_0.1 <<>> -x 31.13.95.36 +noall +answer
;; global options: +cmd
36.95.13.31.in-addr.arpa. 3600 IN PTR edge-star-mini-shv-01-hkg3.facebook.com.

[10] 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, 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ụ dưới đây, chúng tôi sẽ sử dụng các tên miền được liệt kê trong file domain.txt

[11] 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] 

[12] Đ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ụ dưới đây, chúng ta thêm tùy chọn +short vào ~/.digrc sau đó thực hiện lệnh dig:

Các bài viết liên quan

  1. DNS và các khái niệm liên quan
  2. Hoạt động của DNS
  3. Các loại bản ghi trên DNS
  4. Hướng dẫn triển khai mô hình DNS trên CentOS 8