คำสั่ง dig: ค้นหา DNS บน Linux และอ่านผลลัพธ์ +short กับ +trace
เมื่อต้องการตรวจสอบเรคคอร์ด 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 จะไม่แสดงในผลลัพธ์ปกติ ความแตกต่างของผลลัพธ์จากสองคำสั่งมีดังนี้
| การเปรียบเทียบ | dig | nslookup |
|---|---|---|
| รหัสคำตอบ | แสดงใน status ของบรรทัด HEADER เสมอ | แสดงเฉพาะเมื่อผิดพลาด เป็นบรรทัด server can't find |
| TTL | แสดงในทุกบรรทัดเรคคอร์ดของ ANSWER | แสดงเฉพาะเมื่อใส่ -debug |
| เซิร์ฟเวอร์ DNS ที่ตอบ | บรรทัด SERVER ล่างสุด | บรรทัด Server · Address บนสุด |
| รหัสสิ้นสุดเมื่อเป็น NXDOMAIN | 0 | 1 |
ตรวจเวอร์ชัน dig ที่ติดตั้งด้วย -v เซิร์ฟเวอร์ AlmaLinux 9 เป็น 9.16 และเซิร์ฟเวอร์ Debian 12 เป็น 9.18
dig -vDiG 9.16.20-RH2️⃣ ค้นหาเรคคอร์ดด้วย dig
ถ้าใส่ชนิดเรคคอร์ดหลังชื่อ จะค้นหาเฉพาะเรคคอร์ดนั้น ค่าที่แต่ละชนิดเก็บและผลที่ค้นหาในบทความนี้มีดังนี้
| ประเภท | ค่าที่เก็บ | ผลการค้นหา |
|---|---|---|
| A | ที่อยู่ IPv4 | example.com → 104.20.23.154 และอีก 1 รายการ |
| AAAA | ที่อยู่ IPv6 | example.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: 550 คือลำดับความสำคัญ และ MX ที่มีเพียงจุดเดียวในตำแหน่งชื่อเซิร์ฟเวอร์อีเมลคือ Null MX ซึ่งบอกว่าโดเมนนี้ไม่รับอีเมล (RFC 7505) เขียนชนิดเป็นตัวพิมพ์เล็ก mx ก็ได้ผลเหมือนกัน
ถ้าต้องการดูเฉพาะบรรทัดเรคคอร์ด ให้ใส่ [+noall +answer] ตามคู่มือทางการ +noall จะปิดทุกส่วนของผลลัพธ์ และ +answer จะเปิดเฉพาะส่วน ANSWER กลับมา
dig example.com NS +noall +answerexample.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 +answerexample.com. 300 IN TXT "v=spf1 -all"
example.com. 300 IN TXT "_k2n1y4vw3qtb4skdx9e7dxt97qrmmq9"เรคคอร์ด TXT ใส่ค่าข้อความที่ไม่มีรูปแบบตายตัวได้ v=spf1 -all คือค่า SPF ที่บอกว่าไม่มีเซิร์ฟเวอร์ใดส่งอีเมลในนามโดเมนนี้ได้
dig www.github.com CNAME +noall +answerwww.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 +answerexample.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.com172.66.147.243
104.20.23.154dig google.com MX +short10 smtp.google.com.ถ้าเพิ่ม +stats ต่อท้าย [+noall +answer] จะแสดงเวลาค้นหาและบรรทัดของเซิร์ฟเวอร์ที่ตอบด้วย ใน dig 9.18 ของเซิร์ฟเวอร์ Debian 12 ท้ายบรรทัด SERVER มีวิธีส่งคำค้นหา (UDP) ต่อท้าย ส่วน dig 9.16 ของเซิร์ฟเวอร์ AlmaLinux 9 ไม่มี
dig example.com +noall +answer +statsexample.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: 723️⃣ ระบุเซิร์ฟเวอร์ DNS ใน dig และการค้นหาย้อนกลับ
ถ้าเขียน @ และเซิร์ฟเวอร์ 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: 72ad คือแฟล็กที่บอกว่าเซิร์ฟเวอร์ที่ตอบได้ตรวจลายเซ็น 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 +answer8.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
ถ้าใส่ +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 ตัว |
| 2 | k.root-servers.net | เนมเซิร์ฟเวอร์ .com 13 ตัว (gtld-servers.net) |
| 3 | f.gtld-servers.net | เนมเซิร์ฟเวอร์ของ example.com 2 ตัว |
| 4 | elliott.ns.cloudflare.com | เรคคอร์ด A ของ example.com 2 รายการ |
ผลลัพธ์ +trace เหมือนประวัติการติดตามจดหมายลงทะเบียน
เรคคอร์ด A ในขั้นสุดท้ายส่งมาจากเนมเซิร์ฟเวอร์ของ example.com โดยตรง จึงเป็นค่าปัจจุบันที่ไม่ผ่านแคช หลังเปลี่ยนเนมเซิร์ฟเวอร์ ให้ตรวจที่ขั้นที่ 3 ก่อนว่าเซิร์ฟเวอร์ .com ตอบเนมเซิร์ฟเวอร์ใหม่แล้วหรือยัง
5️⃣ ข้อผิดพลาดของคำตอบและตัวเลือกของ dig
🔲 ข้อผิดพลาดของคำตอบ
เมื่อค้นหาชื่อที่ไม่มีอยู่ 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: 96ANSWER เป็น 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: 115SERVFAIL คือรหัสคำตอบที่บอกว่าเซิร์ฟเวอร์ 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: 97EDE คือรหัสข้อผิดพลาดแบบขยายที่บอกสาเหตุของข้อผิดพลาด (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 และตัวเลือกผลลัพธ์
🔢 FAQ & เนื้อหาแนะนำ
เครื่องมือ · โดเมน
ตรวจสอบโดเมน WHOIS·เช็คเนมเซิร์ฟเวอร์
เครื่องมือค้นหาที่ใส่โดเมนแล้วดูข้อมูลการจดทะเบียน เนมเซิร์ฟเวอร์ และเรคคอร์ด DNS ได้ทันทีในเบราว์เซอร์
เครือข่าย · DNS
คำสั่ง host ของ Linux | คำสั่งค้นหา DNS
คำสั่ง host สำหรับหาที่อยู่ IP ของชื่อโฮสต์ หรือแปลงที่อยู่ IP กลับเป็นชื่อโฮสต์
ℹ️ ประกาศเรื่องลิงก์แอฟฟิลิเอต
เนื้อหาของเว็บไซต์นี้มีลิงก์แอฟฟิลิเอต หากผู้เข้าชมซื้อสินค้าหรือบริการผ่านลิงก์เหล่านี้ เว็บไซต์นี้จะได้รับค่าคอมมิชชันจากผู้ขาย ในกระบวนการนี้ ราคาที่ผู้ซื้อจ่าย(ราคาจะลดลงเมื่อมีโปรโมชัน↓)จะไม่สูงขึ้นแต่อย่างใด ราคา ส่วนลด และข้อมูลสต็อกที่แสดงเป็นข้อมูล ณ เวลาที่เขียนและอาจต่างจากความเป็นจริง โปรดตรวจสอบกับผู้ขายอีกครั้งก่อนซื้อ การเลือกและการประเมินสินค้าเขียนตามเกณฑ์ของเราเอง และการได้รับค่าคอมมิชชันหรือไม่ไม่มีผลต่อลำดับการแนะนำหรือเนื้อหาการประเมิน