คำสั่ง dig: ค้นหา DNS บน Linux และอ่านผลลัพธ์ +short กับ +trace

สภาพแวดล้อมทดสอบตระกูล RHELAlmaLinux 9.8dig 9.16บัญชี rootDebian 12 · dig 9.18 บัญชีผู้ใช้ทั่วไปตรวจสอบเมื่อ 2026-11-04
คำสั่งเครือข่ายdigตำแหน่ง/usr/bin/dig

เมื่อต้องการตรวจสอบเรคคอร์ด DNS ของโดเมนไปจนถึงส่วนหัวคำตอบของเซิร์ฟเวอร์ DNS ให้ใช้คำสั่ง dig จากการค้นหาเรคคอร์ดของ example.com ทีละชนิดบนเซิร์ฟเวอร์ AlmaLinux 9 และ Debian 12 และเปลี่ยนเซิร์ฟเวอร์ DNS ที่ถาม พบว่าดูแค่ status และ flags ในส่วนหัวคำตอบก็แยกได้ว่าเป็นกรณีที่ไม่มีชื่อนั้น กรณีที่เซิร์ฟเวอร์ DNS ให้คำตอบไม่ได้ หรือกรณีที่เซิร์ฟเวอร์ซึ่งดูแลเรคคอร์ดตอบเอง

ผลลัพธ์ด้านล่างได้จากเซิร์ฟเวอร์ AlmaLinux 9.8 (บัญชี root) และเซิร์ฟเวอร์ Debian 12 (บัญชีทั่วไป) ที่อยู่ของเซิร์ฟเวอร์ DNS ที่ตั้งไว้บนเซิร์ฟเวอร์ถูกแทนด้วยค่าตัวอย่าง 192.0.2.53 และหมายเลขเวอร์ชันของ dig ก็ถูกแทนด้วยค่าตัวอย่างเช่นกัน

1️⃣ วิธีใช้คำสั่ง dig

  • ↪️ อ่านผลลัพธ์ปกติ

รูปแบบพื้นฐานคือ [dig @เซิร์ฟเวอร์ ชื่อ ชนิด] และละเซิร์ฟเวอร์กับชนิดได้ ตามคู่มือทางการ ถ้าไม่ใส่เซิร์ฟเวอร์จะถามเซิร์ฟเวอร์ DNS ที่ตั้งไว้ใน /etc/resolv.conf และถ้าไม่ใส่ชนิดจะค้นหาเรคคอร์ด A

dig example.com
; <<>> DiG 9.16.20-RH <<>> example.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 62441
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1

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

;; ANSWER SECTION:
example.com.		62	IN	A	104.20.23.154
example.com.		62	IN	A	172.66.147.243

;; Query time: 1 msec
;; SERVER: 192.0.2.53#53(192.0.2.53)
;; WHEN: Thu Oct 29 00:09:18 UTC 2026
;; MSG SIZE  rcvd: 72

บรรทัดที่ขึ้นต้นด้วยเซมิโคลอนเป็นบรรทัดคำอธิบาย ส่วนบรรทัดที่ไม่มีเซมิโคลอนคือเรคคอร์ดที่ได้รับจริง สิ่งที่ต้องดูในแต่ละส่วนมีดังนี้

เอาต์พุตสิ่งที่ตรวจได้
; <<>> DiG 9.16.20-RH <<>> example.comเวอร์ชัน dig ที่รันและอาร์กิวเมนต์ที่ป้อน
->>HEADER<<- … status: NOERROR, id: 62441รหัสคำตอบ (status) และหมายเลขการค้นหา (id)
flags: qr rd raแฟล็กในส่วนหัวคำตอบ — เซิร์ฟเวอร์ที่ตอบค้นหาแบบเรียกซ้ำหรือไม่ และเป็นเซิร์ฟเวอร์ที่ดูแลเรคคอร์ดหรือไม่
QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1จำนวนเรคคอร์ดในแต่ละส่วน
OPT PSEUDOSECTION · EDNS … udp: 4096ข้อมูลส่วนขยาย EDNS และขนาดคำตอบ (ไบต์) ที่รับผ่าน UDP ได้
QUESTION SECTIONคำถามที่ส่ง — ชื่อ คลาส (IN) ชนิดเรคคอร์ด
ANSWER SECTIONเรคคอร์ดที่ได้รับ — ชื่อ TTL (วินาที) คลาส ชนิด และค่า ตามลำดับ
Query time: 1 msecเวลาจนกว่าคำตอบจะมาถึง
SERVER: 192.0.2.53#53(192.0.2.53)ที่อยู่และหมายเลขพอร์ตของเซิร์ฟเวอร์ DNS ที่ตอบ
WHEN · MSG SIZE rcvd: 72เวลาที่ค้นหาและขนาดคำตอบที่ได้รับ (ไบต์)

ในบรรทัด flags นั้น qr หมายถึงคำตอบ rd หมายถึงขอให้ค้นหาแบบเรียกซ้ำ และ ra หมายถึงรองรับการค้นหาแบบเรียกซ้ำ (RFC 1035) เมื่อมี ra แต่ไม่มี aa แสดงว่าคำตอบนี้ส่งมาจากเซิร์ฟเวอร์ DNS ที่ค้นหาแบบเรียกซ้ำ ไม่ใช่เซิร์ฟเวอร์ที่ดูแลเรคคอร์ด

ตัวเลข 62 ในส่วน ANSWER คือ TTL หรือเวลาที่เหลือ (วินาที) ที่เก็บเรคคอร์ดนี้ไว้ในแคชได้ เมื่อถามชื่อเดียวกันกับ 8.8.8.8 ทันทีหลังจากนั้นได้ 300 ตัวเลขจึงต่างกันไปตามเวลาที่เซิร์ฟเวอร์ DNS แต่ละตัวเก็บไว้ในแคช

ถ้าค้นหาแบบเดียวกันด้วย คำสั่ง nslookup รหัสคำตอบและ TTL จะไม่แสดงในผลลัพธ์ปกติ ความแตกต่างของผลลัพธ์จากสองคำสั่งมีดังนี้

การเปรียบเทียบdignslookup
รหัสคำตอบแสดงใน status ของบรรทัด HEADER เสมอแสดงเฉพาะเมื่อผิดพลาด เป็นบรรทัด server can't find
TTLแสดงในทุกบรรทัดเรคคอร์ดของ ANSWERแสดงเฉพาะเมื่อใส่ -debug
เซิร์ฟเวอร์ DNS ที่ตอบบรรทัด SERVER ล่างสุดบรรทัด Server · Address บนสุด
รหัสสิ้นสุดเมื่อเป็น NXDOMAIN01

ตรวจเวอร์ชัน dig ที่ติดตั้งด้วย -v เซิร์ฟเวอร์ AlmaLinux 9 เป็น 9.16 และเซิร์ฟเวอร์ Debian 12 เป็น 9.18

dig -v
DiG 9.16.20-RH

2️⃣ ค้นหาเรคคอร์ดด้วย dig

  • ↪️ A, AAAA, MX, NS, TXT, CNAME, SOA

ถ้าใส่ชนิดเรคคอร์ดหลังชื่อ จะค้นหาเฉพาะเรคคอร์ดนั้น ค่าที่แต่ละชนิดเก็บและผลที่ค้นหาในบทความนี้มีดังนี้

ประเภทค่าที่เก็บผลการค้นหา
Aที่อยู่ IPv4example.com → 104.20.23.154 และอีก 1 รายการ
AAAAที่อยู่ IPv6example.com → 2606:4700:10::6814:179a และอีก 1 รายการ
MXเซิร์ฟเวอร์อีเมลและลำดับความสำคัญexample.com → 0 . (ไม่รับอีเมล)
NSเนมเซิร์ฟเวอร์ที่ดูแลเรคคอร์ดexample.com → hera · elliott.ns.cloudflare.com.
TXTค่าข้อความที่ไม่มีรูปแบบตายตัว (เช่น SPF)example.com → v=spf1 -all และอีก 1 รายการ
CNAMEชื่อแฝงของอีกชื่อหนึ่งwww.github.com → github.com.
SOAเนมเซิร์ฟเวอร์หลักของโซนและค่าเวลาexample.com → elliott.ns.cloudflare.com. …
PTRชื่อที่ผูกกับที่อยู่ IP (ย้อนกลับ)-x 8.8.8.8 → dns.google.

ตรวจเซิร์ฟเวอร์อีเมลด้วยเรคคอร์ด MX เมื่อค้นหา MX ของ example.com ส่วน ANSWER แสดงบรรทัด [0 .] บรรทัดเดียว

dig example.com MX
; <<>> DiG 9.16.20-RH <<>> example.com MX
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 34433
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;example.com.			IN	MX

;; ANSWER SECTION:
example.com.		300	IN	MX	0 .

;; Query time: 5 msec
;; SERVER: 192.0.2.53#53(192.0.2.53)
;; WHEN: Thu Oct 29 00:09:23 UTC 2026
;; MSG SIZE  rcvd: 55

0 คือลำดับความสำคัญ และ MX ที่มีเพียงจุดเดียวในตำแหน่งชื่อเซิร์ฟเวอร์อีเมลคือ Null MX ซึ่งบอกว่าโดเมนนี้ไม่รับอีเมล (RFC 7505) เขียนชนิดเป็นตัวพิมพ์เล็ก mx ก็ได้ผลเหมือนกัน

ถ้าต้องการดูเฉพาะบรรทัดเรคคอร์ด ให้ใส่ [+noall +answer] ตามคู่มือทางการ +noall จะปิดทุกส่วนของผลลัพธ์ และ +answer จะเปิดเฉพาะส่วน ANSWER กลับมา

dig example.com NS +noall +answer
example.com.		12192	IN	NS	hera.ns.cloudflare.com.
example.com.		12192	IN	NS	elliott.ns.cloudflare.com.

example.com มีเนมเซิร์ฟเวอร์สองตัว ทั้งสองคือเนมเซิร์ฟเวอร์ที่มีสิทธิ์ซึ่งดูแลเรคคอร์ดของ example.com โดยตรง

dig example.com TXT +noall +answer
example.com.		300	IN	TXT	"v=spf1 -all"
example.com.		300	IN	TXT	"_k2n1y4vw3qtb4skdx9e7dxt97qrmmq9"

เรคคอร์ด TXT ใส่ค่าข้อความที่ไม่มีรูปแบบตายตัวได้ v=spf1 -all คือค่า SPF ที่บอกว่าไม่มีเซิร์ฟเวอร์ใดส่งอีเมลในนามโดเมนนี้ได้

dig www.github.com CNAME +noall +answer
www.github.com.		291	IN	CNAME	github.com.

www.github.com เป็นชื่อแฝง (CNAME) ของ github.com เมื่อค้นหาชื่อเดียวกันโดยไม่ใส่ชนิด เรคคอร์ด A ของ github.com แสดงต่อจากบรรทัด CNAME

ถ้าใส่ +multiline เรคคอร์ด SOA จะมีคำอธิบายชื่อและเวลากำกับข้างตัวเลขแต่ละตัว ทำให้อ่านง่ายขึ้น

dig example.com SOA +multiline +noall +answer
example.com.		1765 IN	SOA elliott.ns.cloudflare.com. dns.cloudflare.com. (
				2418004112 ; serial
				10000      ; refresh (2 hours 46 minutes 40 seconds)
				2400       ; retry (40 minutes)
				604800     ; expire (1 week)
				1800       ; minimum (30 minutes)
				)

serial คือเลขลำดับที่เพิ่มขึ้นทุกครั้งที่แก้เรคคอร์ด ส่วน refresh retry และ expire คือค่าเวลาที่เนมเซิร์ฟเวอร์รองใช้ซิงก์เรคคอร์ดกับเซิร์ฟเวอร์หลัก minimum คือเวลาที่เก็บคำตอบเกี่ยวกับชื่อหรือเรคคอร์ดที่ไม่มีอยู่ไว้ในแคชได้

ถ้าต้องการแค่ค่า ให้ใส่ +short เรคคอร์ด A เหลือเพียงที่อยู่ IP และ MX เหลือเพียงลำดับความสำคัญกับชื่อเซิร์ฟเวอร์อีเมล

dig +short example.com
172.66.147.243
104.20.23.154
dig google.com MX +short
10 smtp.google.com.

ถ้าเพิ่ม +stats ต่อท้าย [+noall +answer] จะแสดงเวลาค้นหาและบรรทัดของเซิร์ฟเวอร์ที่ตอบด้วย ใน dig 9.18 ของเซิร์ฟเวอร์ Debian 12 ท้ายบรรทัด SERVER มีวิธีส่งคำค้นหา (UDP) ต่อท้าย ส่วน dig 9.16 ของเซิร์ฟเวอร์ AlmaLinux 9 ไม่มี

dig example.com +noall +answer +stats
example.com.		235	IN	A	172.66.147.243
example.com.		235	IN	A	104.20.23.154
;; Query time: 0 msec
;; SERVER: 192.0.2.53#53(192.0.2.53) (UDP)
;; WHEN: Thu Oct 29 00:10:26 UTC 2026
;; MSG SIZE  rcvd: 72

3️⃣ ระบุเซิร์ฟเวอร์ DNS ใน dig และการค้นหาย้อนกลับ

  • ↪️ @เซิร์ฟเวอร์, aa, -x

ถ้าเขียน @ และเซิร์ฟเวอร์ DNS ไว้หน้าชื่อ จะถามเซิร์ฟเวอร์นั้นแทนเซิร์ฟเวอร์ DNS ที่ตั้งไว้บนเซิร์ฟเวอร์ เมื่อถาม 8.8.8.8 บรรทัด SERVER เปลี่ยนเป็น 8.8.8.8 และมี ad เพิ่มใน flags

dig @8.8.8.8 example.com
; <<>> DiG 9.16.20-RH <<>> @8.8.8.8 example.com
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 61431
;; flags: qr rd ra ad; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1

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

;; ANSWER SECTION:
example.com.		300	IN	A	104.20.23.154
example.com.		300	IN	A	172.66.147.243

;; Query time: 30 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Thu Oct 29 00:09:29 UTC 2026
;; MSG SIZE  rcvd: 72

ad คือแฟล็กที่บอกว่าเซิร์ฟเวอร์ที่ตอบได้ตรวจลายเซ็น DNSSEC แล้วและเห็นว่าเรคคอร์ดในคำตอบเชื่อถือได้ (RFC 4035) คำตอบของเซิร์ฟเวอร์ DNS ที่ตั้งไว้บนเซิร์ฟเวอร์ไม่มี ad

ถ้าเขียนเนมเซิร์ฟเวอร์ที่ได้จากการค้นหา NS ไว้หลัง @ จะเป็นการถามเซิร์ฟเวอร์ที่ดูแลเรคคอร์ดของ example.com โดยตรง

dig @elliott.ns.cloudflare.com example.com
; <<>> DiG 9.16.20-RH <<>> @elliott.ns.cloudflare.com example.com
; (6 servers found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 61828
;; flags: qr aa rd; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1
;; WARNING: recursion requested but not available

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

;; ANSWER SECTION:
example.com.		300	IN	A	172.66.147.243
example.com.		300	IN	A	104.20.23.154

;; Query time: 4 msec
;; SERVER: 2606:4700:58::a29f:2ce4#53(2606:4700:58::a29f:2ce4)
;; WHEN: Thu Oct 29 00:09:29 UTC 2026
;; MSG SIZE  rcvd: 72

ครั้งนี้มี aa ใน flags จึงยืนยันได้ว่าเนมเซิร์ฟเวอร์ที่มีสิทธิ์ตอบเอง เซิร์ฟเวอร์นี้ไม่รองรับการค้นหาแบบเรียกซ้ำที่ไปหาชื่อผ่านเซิร์ฟเวอร์อื่น ra จึงหายไป และมีบรรทัด [WARNING: recursion requested but not available] เพิ่มเข้ามา

(6 servers found) หมายความว่าชื่อเนมเซิร์ฟเวอร์แปลงได้เป็นที่อยู่ IPv4 สามตัวและ IPv6 สามตัว บรรทัด SERVER แสดงที่อยู่ IPv6 ตัวที่ส่งคำตอบมา

ถ้าเขียนที่อยู่ IP ไว้หลัง -x จะค้นหาเรคคอร์ด PTR เพื่อหาชื่อที่ผูกกับที่อยู่นั้น

dig -x 8.8.8.8 +noall +answer
8.8.8.8.in-addr.arpa.	300	IN	PTR	dns.google.

dig ค้นหาชื่อที่ได้จากการเขียน 8.8.8.8 กลับด้านแล้วต่อด้วย in-addr.arpa และค่า PTR ที่ได้คือ dns.google. ซึ่งเป็นชื่อของ 8.8.8.8

4️⃣ เส้นทางการมอบสิทธิ์ของ dig +trace

  • ↪️ จากรูทเนมเซิร์ฟเวอร์ไปถึงเนมเซิร์ฟเวอร์ของ example.com

ถ้าใส่ +trace dig จะถามไล่ตามลำดับตั้งแต่รูทเนมเซิร์ฟเวอร์ และแสดงทีละขั้นว่าชื่อถูกส่งต่อไปยังเซิร์ฟเวอร์ใด ตามคู่มือทางการ +trace จะขอบรรทัดลายเซ็น DNSSEC มาด้วย จึงใส่ +nodnssec เพิ่มเพื่อดูเฉพาะเส้นทางการมอบสิทธิ์

dig +trace +nodnssec example.com
; <<>> DiG 9.16.20-RH <<>> +trace +nodnssec example.com
;; global options: +cmd
.			86333	IN	NS	j.root-servers.net.
.			86333	IN	NS	g.root-servers.net.
.			86333	IN	NS	b.root-servers.net.
.			86333	IN	NS	e.root-servers.net.
.			86333	IN	NS	k.root-servers.net.
.			86333	IN	NS	f.root-servers.net.
.			86333	IN	NS	l.root-servers.net.
.			86333	IN	NS	m.root-servers.net.
.			86333	IN	NS	h.root-servers.net.
.			86333	IN	NS	c.root-servers.net.
.			86333	IN	NS	d.root-servers.net.
.			86333	IN	NS	a.root-servers.net.
.			86333	IN	NS	i.root-servers.net.
;; Received 239 bytes from 192.0.2.53#53(192.0.2.53) in 1 ms

com.			172800	IN	NS	a.gtld-servers.net.
com.			172800	IN	NS	b.gtld-servers.net.
com.			172800	IN	NS	c.gtld-servers.net.
com.			172800	IN	NS	d.gtld-servers.net.
com.			172800	IN	NS	e.gtld-servers.net.
com.			172800	IN	NS	f.gtld-servers.net.
com.			172800	IN	NS	g.gtld-servers.net.
com.			172800	IN	NS	h.gtld-servers.net.
com.			172800	IN	NS	i.gtld-servers.net.
com.			172800	IN	NS	j.gtld-servers.net.
com.			172800	IN	NS	k.gtld-servers.net.
com.			172800	IN	NS	l.gtld-servers.net.
com.			172800	IN	NS	m.gtld-servers.net.
;; Received 836 bytes from 2001:7fd::1#53(k.root-servers.net) in 30 ms

example.com.		172800	IN	NS	hera.ns.cloudflare.com.
example.com.		172800	IN	NS	elliott.ns.cloudflare.com.
;; Received 359 bytes from 2001:503:d414::30#53(f.gtld-servers.net) in 66 ms

example.com.		300	IN	A	104.20.23.154
example.com.		300	IN	A	172.66.147.243
;; Received 72 bytes from 108.162.195.228#53(elliott.ns.cloudflare.com) in 3 ms

ในแต่ละขั้น บรรทัด [Received … from] สุดท้ายจะบอกเซิร์ฟเวอร์ที่ส่งคำตอบนั้น เซิร์ฟเวอร์ที่ถามในสี่ขั้นและสิ่งที่ได้รับมีดังนี้

ระดับเซิร์ฟเวอร์ที่ถามสิ่งที่ได้รับ
1เซิร์ฟเวอร์ DNS ที่ตั้งไว้บนเซิร์ฟเวอร์ (192.0.2.53)รูท (.) เนมเซิร์ฟเวอร์ 13 ตัว
2k.root-servers.netเนมเซิร์ฟเวอร์ .com 13 ตัว (gtld-servers.net)
3f.gtld-servers.netเนมเซิร์ฟเวอร์ของ example.com 2 ตัว
4elliott.ns.cloudflare.comเรคคอร์ด A ของ example.com 2 รายการ

ผลลัพธ์ +trace เหมือนประวัติการติดตามจดหมายลงทะเบียน

เรคคอร์ด A ในขั้นสุดท้ายส่งมาจากเนมเซิร์ฟเวอร์ของ example.com โดยตรง จึงเป็นค่าปัจจุบันที่ไม่ผ่านแคช หลังเปลี่ยนเนมเซิร์ฟเวอร์ ให้ตรวจที่ขั้นที่ 3 ก่อนว่าเซิร์ฟเวอร์ .com ตอบเนมเซิร์ฟเวอร์ใหม่แล้วหรือยัง

5️⃣ ข้อผิดพลาดของคำตอบและตัวเลือกของ dig

  • ↪️ NXDOMAIN, SERVFAIL, connection timed out

🔲 ข้อผิดพลาดของคำตอบ

เมื่อค้นหาชื่อที่ไม่มีอยู่ status จะเป็น NXDOMAIN .invalid คือโดเมนระดับบนสุดที่สงวนไว้เพื่อไม่ให้ใช้จริง จึงนำมาใช้ตรวจคำตอบนี้

dig example.invalid
; <<>> DiG 9.16.20-RH <<>> example.invalid
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 23779
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;example.invalid.		IN	A

;; AUTHORITY SECTION:
invalid.		10800	IN	SOA	localhost. nobody.invalid. 1 3600 1200 604800 10800

;; Query time: 1 msec
;; SERVER: 192.0.2.53#53(192.0.2.53)
;; WHEN: Thu Oct 29 00:09:33 UTC 2026
;; MSG SIZE  rcvd: 96

ANSWER เป็น 0 และส่วน AUTHORITY มีเรคคอร์ด SOA ของโซนนั้น ตัวเลขสุดท้ายของ SOA คือ 10800 เป็นเวลา (วินาที) ที่เก็บคำตอบนี้ไว้ในแคชได้

no-such-host.example.com จบด้วย status NOERROR และ ANSWER 0 แทนที่จะเป็น NXDOMAIN เป็นคำตอบที่ไม่มีรหัสข้อผิดพลาดแต่ไม่มีเรคคอร์ด จึงต้องดู status กับจำนวน ANSWER ไปพร้อมกัน

dig no-such-host.example.com
; <<>> DiG 9.16.20-RH <<>> no-such-host.example.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 31671
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;no-such-host.example.com.	IN	A

;; AUTHORITY SECTION:
example.com.		1800	IN	SOA	elliott.ns.cloudflare.com. dns.cloudflare.com. 2418004112 10000 2400 604800 1800

;; Query time: 7 msec
;; SERVER: 192.0.2.53#53(192.0.2.53)
;; WHEN: Thu Oct 29 00:09:33 UTC 2026
;; MSG SIZE  rcvd: 115

SERVFAIL คือรหัสคำตอบที่บอกว่าเซิร์ฟเวอร์ DNS สร้างคำตอบไม่ได้ (RFC 1035) เมื่อถาม 8.8.8.8 เรื่อง dnssec-failed.org ซึ่งเป็นโดเมนสาธารณะสำหรับทดสอบการตรวจ DNSSEC ที่ล้มเหลว ได้ SERVFAIL พร้อมบรรทัด EDE

dig @8.8.8.8 dnssec-failed.org
; <<>> DiG 9.16.20-RH <<>> @8.8.8.8 dnssec-failed.org
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 57521
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
; EDE: 9 (DNSKEY Missing): (No DNSKEY matches DS RRs of dnssec-failed.org)
;; QUESTION SECTION:
;dnssec-failed.org.		IN	A

;; Query time: 333 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Thu Oct 29 00:09:41 UTC 2026
;; MSG SIZE  rcvd: 97

EDE คือรหัสข้อผิดพลาดแบบขยายที่บอกสาเหตุของข้อผิดพลาด (RFC 8914) 9 (DNSKEY Missing) หมายถึงหา DNSKEY ที่ตรงกับเรคคอร์ด DS ของโซนแม่ไม่พบ 8.8.8.8 จึงส่ง SERVFAIL กลับมาแทนที่อยู่สำหรับชื่อที่ตรวจลายเซ็นไม่ได้

ถ้าเซิร์ฟเวอร์ DNS ไม่ตอบ ผลลัพธ์จะจบด้วย [connection timed out; no servers could be reached] โดยไม่มีบรรทัด status เมื่อถาม 192.0.2.1 ซึ่งเป็นที่อยู่สำหรับตัวอย่างในเอกสาร ด้วย [+timeout=2 +tries=1] บรรทัดนี้แสดงหลัง 2 วินาที

dig @192.0.2.1 example.com +timeout=2 +tries=1
; <<>> DiG 9.16.20-RH <<>> @192.0.2.1 example.com +timeout=2 +tries=1
; (1 server found)
;; global options: +cmd
;; connection timed out; no servers could be reached

เมื่อถามที่อยู่เดียวกันโดยไม่ใส่ตัวเลือก บรรทัดเดียวกันแสดงหลัง 15 วินาที เพราะค่าเริ่มต้นในคู่มือทางการคือรอคำตอบละ 5 วินาทีและลอง 3 ครั้ง ใน dig 9.18 ของเซิร์ฟเวอร์ Debian 12 บรรทัด [communications error to 192.0.2.1#53: timed out] แสดงก่อน และบรรทัดสุดท้ายคือ [no servers could be reached]

เมื่อสคริปต์แยกผลด้วยรหัสสิ้นสุด ต้องคำนึงว่า NXDOMAIN ก็ได้ 0 เช่นกัน เมื่อค้นหา example.invalid ด้วย +short แล้วพิมพ์รหัสสิ้นสุด ได้ผลว่างพร้อม 0 ส่วนการค้นหา 192.0.2.1 ที่ไม่มีคำตอบได้ 9

dig +short example.invalid; echo $?
0

บรรทัดที่ต้องดูในผลลัพธ์และสิ่งที่ต้องตรวจต่อสำหรับข้อผิดพลาดแต่ละแบบมีดังนี้

เอาต์พุตความหมายสิ่งที่ควรตรวจสอบต่อ
status: NXDOMAINไม่มีชื่อนั้นการสะกดและสถานะการจดทะเบียนโดเมน เส้นทางการมอบสิทธิ์ด้วย +trace
status: NOERROR · ANSWER: 0ไม่มีเรคคอร์ดชนิดนั้นในคำตอบชนิดเรคคอร์ดและการตั้งค่าเรคคอร์ดของเนมเซิร์ฟเวอร์
status: SERVFAILเซิร์ฟเวอร์ DNS สร้างคำตอบไม่ได้บรรทัด EDE คำตอบจากเซิร์ฟเวอร์ DNS อื่น (@8.8.8.8 · @1.1.1.1)
connection timed outเซิร์ฟเวอร์ DNS ไม่ตอบที่อยู่เซิร์ฟเวอร์ DNS และไฟร์วอลล์ที่บล็อกพอร์ต 53

🔲 ตัวเลือกของคำสั่ง dig

📌 ตัวเลือกหลัก: ผลที่รันในบทความนี้

ตัวเลือกหน้าที่ผลที่เห็นในบทความนี้
@เซิร์ฟเวอร์ถามเซิร์ฟเวอร์ที่ระบุแทนเซิร์ฟเวอร์ DNS ที่ตั้งไว้บนเซิร์ฟเวอร์@8.8.8.8 ทำให้บรรทัด SERVER เปลี่ยนเป็น 8.8.8.8 และมี ad เพิ่มใน flags เมื่อถามเนมเซิร์ฟเวอร์ที่มีสิทธิ์ได้ aa
ประเภทค้นหาเฉพาะชนิดเรคคอร์ดที่เขียนหลังชื่อexample.com MX ได้บรรทัด [0 .] บรรทัดเดียว mx ตัวพิมพ์เล็กก็ได้ผลเหมือนกัน
-x ที่อยู่ค้นหาเรคคอร์ด PTR ของที่อยู่ IP-x 8.8.8.8 ได้ dns.google.
-vแสดงเวอร์ชันเซิร์ฟเวอร์ AlmaLinux 9 เป็น 9.16 เซิร์ฟเวอร์ Debian 12 เป็น 9.18
-rไม่อ่าน .digrc ในโฟลเดอร์โฮมแม้ใส่ +short ไว้ใน .digrc เมื่อเพิ่ม -r บรรทัดเรคคอร์ดก็แสดงครบ
+shortแสดงเฉพาะค่าของเรคคอร์ดA ได้ที่อยู่ IP สองตัว google.com MX ได้ 10 smtp.google.com.
+noall +answerปิดทุกส่วนของผลลัพธ์แล้วเปิดเฉพาะ ANSWER กลับมาexample.com NS เหลือเพียงบรรทัดเนมเซิร์ฟเวอร์สองบรรทัด
+multilineแบ่งเรคคอร์ดยาวอย่าง SOA เป็นหลายบรรทัดพร้อมคำอธิบายชื่อและเวลาอย่าง serial และ refresh แสดงเป็นคำอธิบายข้างตัวเลขแต่ละตัว
+statsแสดงเวลาค้นหาและบรรทัดของเซิร์ฟเวอร์ที่ตอบด้วยใน dig 9.18 ของเซิร์ฟเวอร์ Debian 12 มี (UDP) ท้ายบรรทัด SERVER
+traceถามไล่ตามลำดับตั้งแต่รูทเนมเซิร์ฟเวอร์และแสดงเส้นทางการมอบสิทธิ์ในแต่ละขั้นทั้งสี่ บรรทัด [Received … from] สุดท้ายแสดงเซิร์ฟเวอร์ที่ตอบ
+nodnssecไม่ขอเรคคอร์ดลายเซ็น DNSSECใช้คู่กับ +trace เพื่อให้เหลือเฉพาะเส้นทางการมอบสิทธิ์
+timeout=วินาทีเวลารอคำตอบแต่ละครั้ง ค่าเริ่มต้น 5 วินาทีถาม 192.0.2.1 ด้วย +timeout=2 +tries=1 ได้ [connection timed out] หลัง 2 วินาที ถ้าไม่ใส่ตัวเลือก 15 วินาที
+tries=จำนวนครั้งจำนวนครั้งที่ส่งคำค้นหา ค่าเริ่มต้น 3 ครั้งเมื่อตั้งเป็น 1 คู่กับ +timeout=2 จะถามเพียงครั้งเดียวและจบหลัง 2 วินาที
+tcpส่งคำค้นหาผ่าน TCP แทน UDPใน dig 9.18 ของเซิร์ฟเวอร์ Debian 12 ท้ายบรรทัด SERVER เปลี่ยนจาก (UDP) เป็น (TCP) และเรคคอร์ดเหมือนเดิม

📎 ตัวเลือกอื่น: ตามคู่มือทางการ

ตัวเลือกหน้าที่
-4ค้นหาผ่าน IPv4 เท่านั้น
-6ค้นหาผ่าน IPv6 เท่านั้น
-t ชนิดระบุชนิดเรคคอร์ดที่จะค้นหา
-q ชื่อระบุชื่อที่จะค้นหา ใช้เมื่อไม่อยากให้สับสนกับอาร์กิวเมนต์อื่น
-p พอร์ตค้นหาผ่านพอร์ตที่ระบุแทนพอร์ต 53
-b ที่อยู่ระบุที่อยู่ IP ต้นทางที่ใช้ส่งคำค้นหา
-f ไฟล์รันการค้นหาที่เขียนไว้ในไฟล์บรรทัดละรายการตามลำดับ
+norecurseค้นหาโดยปิดคำขอค้นหาแบบเรียกซ้ำ (RD)
+dnssecขอเรคคอร์ด DNSSEC มาด้วย
+nssearchหาเนมเซิร์ฟเวอร์ที่มีสิทธิ์และแสดงเรคคอร์ด SOA ที่แต่ละเซิร์ฟเวอร์มี
+nocmdแสดงผลโดยไม่มีบรรทัดเวอร์ชันและคำอธิบายตัวเลือกที่ด้านบน
+nocommentsแสดงผลโดยไม่มีบรรทัดคำอธิบายอย่างส่วนหัวคำตอบและชื่อส่วน
+ttlunitsแสดง TTL เป็นหน่วย s m h d w
+retry=จำนวนครั้งจำนวนครั้งที่ส่งซ้ำโดยไม่นับคำค้นหาแรก ค่าเริ่มต้น 2

🔲 ตัวจำลองคำสั่ง dig

ในตัวจำลองด้านล่าง คุณพิมพ์ dig เองได้โดยสลับชนิดเรคคอร์ด เซิร์ฟเวอร์ DNS และตัวเลือกผลลัพธ์

ตัวจำลองคำสั่ง digdig 9.16
[root@server work]#
ทำงานเฉพาะในเบราว์เซอร์ของคุณ คำตอบมาจาก DNS เสมือนที่เก็บค่าจากการค้นหาจริง และ ↑↓ ใช้เรียกคำสั่งที่พิมพ์ไว้ก่อนหน้ากลับมา

🔢 FAQ & เนื้อหาแนะนำ

บนเซิร์ฟเวอร์สองเครื่องที่ตรวจ dig อยู่ในแพ็กเกจ bind-utils ของ AlmaLinux 9 และแพ็กเกจ bind9-dnsutils ของ Debian 12 ดังนั้นตระกูล RHEL ให้ติดตั้งด้วย [sudo dnf install bind-utils] และตระกูล Debian ให้ติดตั้งด้วย [sudo apt install bind9-dnsutils] ทั้งสองแพ็กเกจติดตั้ง nslookup ให้ด้วย

ตามคู่มือทางการ dig จะอ่านตัวเลือกที่เขียนไว้ในไฟล์ .digrc ในโฟลเดอร์โฮมและใช้ก่อนอาร์กิวเมนต์บนบรรทัดคำสั่ง เมื่อใส่ +short หนึ่งบรรทัดใน .digrc แล้วรัน [dig example.com] จะแสดงเพียงที่อยู่ IP และเมื่อใส่ -r จะไม่อ่าน .digrc บรรทัดเรคคอร์ดจึงแสดงครบ

ใส่ +tcp เพื่อส่งคำค้นหาผ่าน TCP ใน dig 9.18 ของเซิร์ฟเวอร์ Debian 12 เมื่อใส่ +tcp ท้ายบรรทัด SERVER เปลี่ยนจาก (UDP) เป็น (TCP) และเรคคอร์ดที่ได้รับเหมือนเดิม

🔗 เนื้อหาแนะนำ
การกระจาย DNS เวลากระจาย DNS หลังเปลี่ยนเนมเซิร์ฟเวอร์: วัดจริงตามรีโซลเวอร์และตรวจ DNSSEC บทความที่บันทึกคำตอบของรีโซลเวอร์ 7 แห่งทุก 5 นาทีหลังเปลี่ยนเนมเซิร์ฟเวอร์ และตรวจว่าทำไมต้องปิด DNSSEC ก่อนย้าย อ่านบทความ → ปิด DNSSEC เพื่อเปลี่ยนเนมเซิร์ฟเวอร์ (สถานะเปิดใช้งาน)

ℹ️ ประกาศเรื่องลิงก์แอฟฟิลิเอต
เนื้อหาของเว็บไซต์นี้มีลิงก์แอฟฟิลิเอต หากผู้เข้าชมซื้อสินค้าหรือบริการผ่านลิงก์เหล่านี้ เว็บไซต์นี้จะได้รับค่าคอมมิชชันจากผู้ขาย ในกระบวนการนี้ ราคาที่ผู้ซื้อจ่าย(ราคาจะลดลงเมื่อมีโปรโมชัน↓)จะไม่สูงขึ้นแต่อย่างใด ราคา ส่วนลด และข้อมูลสต็อกที่แสดงเป็นข้อมูล ณ เวลาที่เขียนและอาจต่างจากความเป็นจริง โปรดตรวจสอบกับผู้ขายอีกครั้งก่อนซื้อ การเลือกและการประเมินสินค้าเขียนตามเกณฑ์ของเราเอง และการได้รับค่าคอมมิชชันหรือไม่ไม่มีผลต่อลำดับการแนะนำหรือเนื้อหาการประเมิน

ใส่ความเห็น

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องข้อมูลจำเป็นถูกทำเครื่องหมาย *

Prove your humanity: 4   +   5   =