As a sysadmin, things look pretty only until they don’t. In those crisis-driven moments, these dig commands will come in handy. Stay tuned.

System Administrators do a hell of a job every time. Even the most basic sysadmin job requirement of being on-call 24/7 is something I appreciate beyond limits.

But we aren’t here to dive into their job profiles; instead, check their weapon of choice to troubleshoot DNS issues.

What are Dig Commands?

Short for Domain Information Groper, Dig commands are one of the fastest methods to query DNS servers about what’s working and what isn’t.

You can check the server IP address, name servers, mail exchange, inquire TTL, etc., with easy-to-remember texts.

Before starting with a few basic dig commands, please check if you have dig utilities installed:

$ dig -v

This should return with the result indicating the dig version, like this:

DiG 9.18.1-1ubuntu1-Ubuntu

If you don’t get a similar response, you need to install Dig utilities first.

For people using Ubuntu and Debian, type:

$ sudo apt-get install dnsutils

And use:

$ sudo yum install bind-utils

…if you are on CentOS or RHEL.

Next, run dig -v to ensure the installation went smoothly.

Finally, jump to the following sections to check out a few Dig commands to help you as a sysadmin.

Check the IP address

This is one of the simplest where we check the server IP address underpinning a domain name.

dig geekflare.com is the iteration we’ll begin with.

$ dig geekflare.com

; <<>> DiG 9.18.1-1ubuntu1-Ubuntu <<>> geekflare.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 38635
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1

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

;; ANSWER SECTION:
geekflare.com.		67	IN	A	172.66.43.163
geekflare.com.		67	IN	A	172.66.40.93

;; Query time: 4 msec
;; SERVER: 127.0.0.53#53(127.0.0.53) (UDP)
;; WHEN: Wed Nov 09 04:29:58 UTC 2022

The first important thing is the status: NOERROR in the Got answer section at the top. This tells us it went well without any issues.

But the information for which we made this query is the server IP address. It’s mentioned in the Answer section 172.66.40.93 (the primary server) and 172.66.43.163 (the fail-safe).

In addition, your original query statement sits under the Question section.

The last section gives a few statistics about the query.

But that’s an awful lot of information, not needed every time.

Ergo, you can fetch a cleaner response to this query by entering:

$ dig geekflare.com +noall +answer
geekflare.com.		53	IN	A	172.66.43.163
geekflare.com.		53	IN	A	172.66.40.93

Here we deny everything by the +noall, only to allow the expected answer with the +answer.

One can get an even more brief response by using:

$ dig geekflare.com +short
172.66.43.163
172.66.40.93

This was the basic query returning the DNS A record; let’s see a few more.

Find specific DNS records

Nameservers, the authoritative DNS server for a domain, can be found by the ns variable.

$ dig geekflare.com ns +short
olga.ns.cloudflare.com.
todd.ns.cloudflare.com.

Similarly, the mx variable responds with the mail servers along with their priorities.

$ dig geekflare.com mx +noall +answer
geekflare.com.		300	IN	MX	1 aspmx.l.google.com.
geekflare.com.		300	IN	MX	10 alt3.aspmx.l.google.com.
geekflare.com.		300	IN	MX	10 alt4.aspmx.l.google.com.
geekflare.com.		300	IN	MX	5 alt1.aspmx.l.google.com.
geekflare.com.		300	IN	MX	5 alt2.aspmx.l.google.com.

In the same fashion, txt, aaaa, cname, etc., can be used as dig command variables to return different DNS records.

Trace DNS

As evident by the heading, Trace DNS checks the path from the root nameservers, authoritative nameservers, up to the domain IP address.

$ dig geekflare.com +trace

; <<>> DiG 9.18.1-1ubuntu1-Ubuntu <<>> geekflare.com +trace
;; global options: +cmd
.			322660	IN	NS	a.root-servers.net.
.			322660	IN	NS	b.root-servers.net.
.			322660	IN	NS	c.root-servers.net.
.			322660	IN	NS	d.root-servers.net.
.			322660	IN	NS	e.root-servers.net.
.			322660	IN	NS	f.root-servers.net.
.			322660	IN	NS	g.root-servers.net.
.			322660	IN	NS	h.root-servers.net.
.			322660	IN	NS	i.root-servers.net.
.			322660	IN	NS	j.root-servers.net.
.			322660	IN	NS	k.root-servers.net.
.			322660	IN	NS	l.root-servers.net.
.			322660	IN	NS	m.root-servers.net.
;; Received 811 bytes from 127.0.0.53#53(127.0.0.53) in 16 ms

com.			172800	IN	NS	i.gtld-servers.net.
com.			172800	IN	NS	k.gtld-servers.net.
com.			172800	IN	NS	e.gtld-servers.net.
com.			172800	IN	NS	c.gtld-servers.net.
com.			172800	IN	NS	h.gtld-servers.net.
com.			172800	IN	NS	b.gtld-servers.net.
com.			172800	IN	NS	d.gtld-servers.net.
com.			172800	IN	NS	f.gtld-servers.net.
com.			172800	IN	NS	j.gtld-servers.net.
com.			172800	IN	NS	g.gtld-servers.net.
com.			172800	IN	NS	a.gtld-servers.net.
com.			172800	IN	NS	m.gtld-servers.net.
com.			172800	IN	NS	l.gtld-servers.net.
com.			86400	IN	DS	30909 8 2 E2D3C916F6DEEAC73294E8268FB5885044A833FC5459588F4A9184CF C41A5766
com.			86400	IN	RRSIG	DS 8 1 86400 20221121170000 20221108160000 18733 . ZgW2dKMBP6rqIgQSGN5uzFhNFZuIPUg7JrkXzgE9VKh68LOIuQlFgTTV xt3Sz4ytgru8JWcwCHgiqCTjbaN3WeHcrDVf0ItG0Az/01ofBWfoAu9S 1JFYcOrYkTUidn8R4vROkwzsTrZMirnB/4yrA4MD5thWVBr3IczcnFto DbADuw8Qy/RUEUfcu+LcQ4Ge+OzIP8eE1T6+nbMRqFZBSMFoBO1w0Mmk xNGyEclfFkymQ4CsYxnvYVstljpLqh1OhoAEwY6D+0cSh9dKNQ5LKhgq UXqfJ+zmdcvL+cVvMjfcB0Wj6/hmEkpEp1ISawlTjFUDgiKNZxiow02r JL4tsw==
;; Received 1201 bytes from 192.33.4.12#53(c.root-servers.net) in 148 ms

geekflare.com.		172800	IN	NS	olga.ns.cloudflare.com.
geekflare.com.		172800	IN	NS	todd.ns.cloudflare.com.
geekflare.com.		86400	IN	DS	2371 13 2 CBAA2018F41B29985DAEDE7F127D4F9626ADA609665CEBAB0011903B 7C639254
geekflare.com.		86400	IN	RRSIG	DS 8 2 86400 20221112051535 20221105030535 53929 com. sbqDGqvxmEAjS4KRx8LvQAG9IusLgRRm5GPDf+AFkXddGgfJN37vJP1H 4JKMriWtgXZHc3g1ANMNjij+5J1K3GgeNy2w0UYc7xHkmvhsd15pDvi9 +BoiBsjC8ffznyli8sV8XVhm65oKDHJRx5YEtXUVA4p9hegO0NHDccvt ujQKMShBWX3nxs7P4onL13gspVScOoZgzXL3470UfDW7MA==
;; Received 601 bytes from 2001:501:b1f9::30#53(m.gtld-servers.net) in 144 ms

geekflare.com.		300	IN	A	172.66.43.163
geekflare.com.		300	IN	A	172.66.40.93
geekflare.com.		300	IN	RRSIG	A 13 2 300 20221110051242 20221108031242 34505 geekflare.com. tKDYd/FHjs/aRHeOQJlsxXDJYtVcHA4G16QRJKlhFyYkZ2TmLKNIc6eM vXfpO91IVArK67KbyW5lIxI5cCxcQg==
;; Received 183 bytes from 172.64.32.137#53(olga.ns.cloudflare.com) in 16 ms

Alternatively, you can get a short answer by using +short or +noall +answer variables.

Reverse DNS lookup

Reverse DNS lookup reveals the PTR record associated with the IP address. It’s the opposite of a DNS A record and matches the IP addresses to the domain name.

However, there will be no answer section if a domain name has no DNS PTR record.

The command at play here is dig -x IP address.

ubuntu@ubuntu:~$ dig yahoo.com +short
74.6.143.26
74.6.231.20
98.137.11.164
98.137.11.163
74.6.143.25
74.6.231.21
ubuntu@ubuntu:~$ dig -x 74.6.143.26

; <<>> DiG 9.18.1-1ubuntu1-Ubuntu <<>> -x 74.6.143.26
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 32267
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 5, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 65494
;; QUESTION SECTION:
;26.143.6.74.in-addr.arpa.	IN	PTR

;; ANSWER SECTION:
26.143.6.74.in-addr.arpa. 600	IN	PTR	media-router-fp74.prod.media.vip.bf1.yahoo.com.

;; AUTHORITY SECTION:
143.6.74.in-addr.arpa.	172800	IN	NS	ns3.yahoo.com.
143.6.74.in-addr.arpa.	172800	IN	NS	ns4.yahoo.com.
143.6.74.in-addr.arpa.	172800	IN	NS	ns5.yahoo.com.
143.6.74.in-addr.arpa.	172800	IN	NS	ns2.yahoo.com.
143.6.74.in-addr.arpa.	172800	IN	NS	ns1.yahoo.com.

;; Query time: 192 msec
;; SERVER: 127.0.0.53#53(127.0.0.53) (UDP)
;; WHEN: Wed Nov 09 04:17:08 UTC 2022
;; MSG SIZE  rcvd: 203

As you can see, the domain name in the Answer section, media-router-fp74.prod.media.vip.bf1.yahoo.com/, is linked with its primary IP address 74.6.143.26.

And visiting this URL will actually send you to the Yahoo search homepage.

However, this may not be true for all web hosts; in some cases, these ugly, long URLs don’t resolve anything.

Querying Specific DNS Servers

Sometimes you want to ping a specific server for DNS queries. One can easily achieve that by adding @DNS server IP address, choosing any DNS server for a particular query.

$ dig @1.1.1.1 geekflare.com +noall +answer +stats
geekflare.com.		300	IN	A	172.66.40.93
geekflare.com.		300	IN	A	172.66.43.163
;; Query time: 156 msec
;; SERVER: 1.1.1.1#53(1.1.1.1) (UDP)
;; WHEN: Wed Nov 09 04:18:56 UTC 2022
;; MSG SIZE  rcvd: 74

You can verify this in the stats section, which mentions Server: 1.1.1.1, which belongs to Cloudflare.

Similarly, one can query Google DNS servers (8.8.8.8):

$ dig @8.8.8.8 geekflare.com mx +noall +answer +stats
geekflare.com.		300	IN	MX	1 aspmx.l.google.com.
geekflare.com.		300	IN	MX	10 alt3.aspmx.l.google.com.
geekflare.com.		300	IN	MX	10 alt4.aspmx.l.google.com.
geekflare.com.		300	IN	MX	5 alt1.aspmx.l.google.com.
geekflare.com.		300	IN	MX	5 alt2.aspmx.l.google.com.
;; Query time: 44 msec
;; SERVER: 8.8.8.8#53(8.8.8.8) (UDP)
;; WHEN: Wed Nov 09 04:23:16 UTC 2022
;; MSG SIZE  rcvd: 157

Let’s Dig it Up ⛏️

As the name speaks, these are used to dig out DNS information and identify related problems. Dig commands are usually fast at work and easy to memorize.

Not to mention, you can also install dig utilities on Mac and Windows, making them universal in their application.