ลดความยุ่งยากในการใช้คลาวด์ พูดคุยกับเจ้าหน้าที่

Home ตรวจสอบ DNS ด้วย nslookup และ dig

ตรวจสอบ DNS ด้วย nslookup และ dig

เมื่อแก้ 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 ชุดใด

ขั้นตอนที่ 5: ตรวจ Record ที่ใช้บ่อยในงานจริง

ต้องการตรวจคำสั่ง
เว็บชี้มาที่เซิร์ฟเวอร์ใหม่หรือยังdig +short example.com และ dig +short www.example.com
อีเมลไปที่ใดdig +short MX example.com
SPFdig +short TXT example.com
DMARCdig +short TXT _dmarc.example.com
DKIM (selector default)dig +short TXT default._domainkey.example.com
Reverse DNS ของ IPdig +short -x 203.0.113.10
CAA (มีผลกับการออก SSL)dig +short CAA example.com

ความหมายของแต่ละ Record ดูได้ที่ ทำความรู้จัก DNS Record: A, AAAA, CNAME, MX, TXT และ NS

ขั้นตอนที่ 6: ล้าง DNS Cache ในเครื่อง

ถ้า DNS สาธารณะตอบค่าใหม่แล้ว แต่เครื่องคุณยังเปิดเว็บเก่า ให้ล้าง Cache ของเครื่อง

Windows (Command Prompt แบบ Run as administrator)

ipconfig /flushdns

macOS

sudo dscacheutil -flushcache
sudo killall -HUP mDNSResponder

Linux ที่ใช้ systemd-resolved (เช่น Ubuntu Desktop และ Server)

sudo resolvectl flush-caches

เบราว์เซอร์บางตัวมี Cache ของตัวเองด้วย ให้ปิดแล้วเปิดใหม่ หรือทดสอบในหน้าต่างแบบ Private อย่าลืมตรวจไฟล์ hosts ของเครื่องว่าไม่มีบรรทัดที่ผูกโดเมนนี้ไว้กับ IP เก่า (ดู วิธีการแก้ไข Hosts File บน macOS)

ตรวจสอบผลลัพธ์

ถือว่า DNS ถูกต้องและกระจายตัวแล้ว เมื่อ

  • Name Server ต้นทางตอบค่าที่คุณตั้งไว้
  • 8.8.8.8 และ 1.1.1.1 ตอบค่าเดียวกัน
  • เครื่องของคุณหลังล้าง Cache ได้ค่าเดียวกัน และเปิดบริการได้ตามที่คาด

ปัญหาที่พบบ่อย

nslookup ขึ้น Non-existent domain หรือ dig ได้ NXDOMAIN

ชื่อนั้นไม่มีอยู่ใน DNS ตรวจการสะกด ถ้าเป็น Subdomain ให้ตรวจว่าได้เพิ่ม Record แล้ว ถ้าเป็นโดเมนหลัก ให้ตรวจว่าโดเมนยังไม่หมดอายุ และตั้ง Name Server ไว้ถูกต้องที่ผู้ให้บริการจดโดเมน

dig ได้ SERVFAIL

Name Server ของโดเมนไม่ตอบ หรือมี DNSSEC ค้างไว้จากผู้ให้บริการเดิม (DS Record ที่ Registry ไม่ตรงกับกุญแจของ Name Server ใหม่) ให้ลองเทียบผลกับ dig +cd example.com ซึ่งปิดการตรวจ DNSSEC ถ้าคำสั่งนี้ได้คำตอบ ให้ลบหรือแก้ DS Record ที่ผู้ให้บริการจดโดเมน

connection timed out; no servers could be reached

เครื่องของคุณติดต่อ DNS Server ไม่ได้ อาจเกิดจาก Firewall ของเครือข่ายบล็อก Port 53 ขาออก ให้ลองจากเครือข่ายอื่น หรือถ้าตรวจจากเซิร์ฟเวอร์ ให้ดูการตั้งค่า Resolver ใน /etc/resolv.conf

ผลลัพธ์จากแต่ละ DNS Server ไม่ตรงกัน

เป็นเรื่องปกติในช่วงหลังแก้ Record แต่ละ Resolver จำค่าเดิมไว้ตาม TTL ใช้ขั้นตอนที่ 4 ยืนยันว่าต้นทางถูกแล้ว จากนั้นรอ

หากตรวจแล้วยังไม่แน่ใจว่าผลที่ได้หมายถึงอะไร ติดต่อทีมงาน THAI DATA CLOUD ได้ที่ https://thaidata.cloud/contact/ โดยแนบผลลัพธ์จากคำสั่ง dig หรือ nslookup มาด้วย

ผู้ให้บริการคลาวด์ไทย
เพื่อธุรกิจของคนไทย

"มุ่งมั่น" และ "มั่นคง"
พร้อมรับมือทุกการเติบโต
Trust Cloud
คลาว์ที่ปลอดภัย
คือรากฐานที่มั่นคง
cloud security