คำตอบสั้น ๆ: ใช้ nslookup และ dig ตรวจค่า DNS ของโดเมน อ่านผลลัพธ์ ถาม Name Server ต้นทางเพื่อแยกปัญหาจาก Cache และล้าง DNS Cache ในเครื่อง
คู่มือนี้อธิบาย nslookup ทีละขั้นตอน พร้อมคำสั่งที่ใช้ได้จริงและปัญหาที่พบบ่อย
เมื่อแก้ DNS แล้วเว็บยังไม่เปลี่ยน อีเมลยังไม่เข้า หรือ SSL ออกไม่ผ่าน สิ่งแรกที่ควรทำคือถาม DNS ตรง ๆ ว่าตอนนี้ตอบค่าอะไร เครื่องมือมาตรฐานสำหรับงานนี้คือ nslookup ซึ่งมีอยู่แล้วใน Windows, macOS และ Linux และ dig ซึ่งให้ข้อมูลละเอียดกว่าและนิยมใช้บน macOS และ Linux
บทความนี้สอนคำสั่งที่ใช้บ่อย การอ่านผลลัพธ์ การถาม DNS Server เฉพาะตัว เพื่อแยกว่าปัญหาอยู่ที่ค่า DNS หรือที่ Cache และวิธีล้าง DNS Cache ในเครื่อง
สิ่งที่ต้องเตรียม
- Windows: ใช้ Command Prompt หรือ PowerShell มี
nslookupอยู่แล้ว (PowerShell ยังมีResolve-DnsNameให้ใช้ด้วย) - macOS: เปิด Terminal มีทั้ง
nslookupและdigอยู่แล้ว - Linux: หากยังไม่มี
digให้ติดตั้งตามขั้นตอนที่ 1 - ชื่อโดเมนที่ต้องการตรวจ และค่าที่คาดว่าควรได้ เช่น IP ของเซิร์ฟเวอร์ใหม่
ขั้นตอนที่ 1: ติดตั้ง dig บน Linux
Ubuntu และ Debian
sudo apt update
sudo apt install -y dnsutils
AlmaLinux และ Rocky Linux
sudo dnf install -y bind-utils
ตรวจว่าติดตั้งแล้วด้วย dig -v ซึ่งจะแสดงเวอร์ชันของ BIND
ขั้นตอนที่ 2: ตรวจด้วย nslookup
หา IP ของโดเมน (A และ AAAA Record)
nslookup example.com
ตัวอย่างผลลัพธ์
Server: 192.168.1.1
Address: 192.168.1.1#53
Non-authoritative answer:
Name: example.com
Address: 203.0.113.10
ส่วน Server คือ DNS Resolver ที่เครื่องคุณใช้ถาม ส่วน Address ใต้ Name คือคำตอบ คำว่า Non-authoritative answer หมายถึงคำตอบมาจาก Cache ของ Resolver ไม่ใช่จาก Name Server ของโดเมนโดยตรง ซึ่งเป็นเรื่องปกติ
ถาม Record ชนิดอื่น
nslookup -type=mx example.com
nslookup -type=txt example.com
nslookup -type=ns example.com
nslookup -type=cname www.example.com
ถาม DNS Server ที่ระบุเอง
ใส่ชื่อหรือ IP ของ DNS Server ต่อท้าย เพื่อเลี่ยง Cache ของเครือข่ายที่คุณใช้อยู่
nslookup example.com 8.8.8.8
nslookup example.com 1.1.1.1
บน Windows PowerShell ใช้คำสั่งที่ให้ผลเป็นตารางอ่านง่ายได้
Resolve-DnsName example.com -Type MX -Server 8.8.8.8
ขั้นตอนที่ 3: ตรวจด้วย dig
ดูเฉพาะคำตอบ
dig +short example.com
dig +short MX example.com
dig +short TXT example.com
dig +short NS example.com
+short แสดงเฉพาะค่าของคำตอบ เหมาะกับการตรวจเร็ว ถ้าไม่มีผลลัพธ์เลยแปลว่าไม่มี Record ชนิดนั้นในชื่อนั้น
ดูผลลัพธ์แบบเต็ม
dig example.com A
ส่วนที่ควรดู
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 41235
...
;; ANSWER SECTION:
example.com. 3600 IN A 203.0.113.10
;; SERVER: 192.168.1.1#53(192.168.1.1)
- status:
NOERRORคือถามสำเร็จNXDOMAINคือไม่มีชื่อนี้อยู่เลยSERVFAILคือ DNS Server ตอบไม่ได้ มักเกิดจาก Name Server ของโดเมนมีปัญหาหรือ DNSSEC ผิดพลาด - ANSWER SECTION: คำตอบ ตัวเลขถัดจากชื่อคือ TTL ที่เหลืออยู่ใน Cache เป็นวินาที เมื่อนับถึง 0 Resolver จะถามค่าใหม่
- SERVER: DNS Server ที่ตอบคำถามนี้
ถาม DNS Server ที่ระบุเอง
dig @8.8.8.8 example.com A +short
dig @1.1.1.1 example.com A +short
ขั้นตอนที่ 4: ถาม Name Server ต้นทางโดยตรง
นี่เป็นเทคนิคที่สำคัญที่สุดในการแยกปัญหา Name Server ต้นทาง (Authoritative) คือผู้ถือค่าจริงของโดเมน ถามตรงจะได้ค่าล่าสุดเสมอโดยไม่ผ่าน Cache
dig +short NS example.com
dig @ns1.provider.net example.com A +short
เปลี่ยน ns1.provider.net เป็นชื่อที่ได้จากคำสั่งแรก บน Windows ใช้ nslookup example.com ns1.provider.net การอ่านผล
- Name Server ต้นทางตอบค่าใหม่ แต่ 8.8.8.8 ยังตอบค่าเก่า: ค่าที่แก้ถูกต้องแล้ว เหลือแค่รอ Cache หมดอายุตาม TTL
- Name Server ต้นทางก็ยังตอบค่าเก่า: คุณแก้ผิดที่ หรือยังไม่ได้บันทึก ให้ตรวจว่าแก้ที่ผู้ให้บริการเดียวกับที่ NS ชี้ไปหรือไม่
หากต้องการเห็นเส้นทางการถามทั้งหมดตั้งแต่ Root Server ลงมา ใช้
dig +trace example.com
คำสั่งนี้มีประโยชน์เมื่อเพิ่งเปลี่ยน Name Server เพราะจะเห็นว่า Registry ของโดเมน (เช่น .com) ส่งต่อไปยัง Name Server ชุดใด