
ทุกครั้งที่เราพิมพ์ github.com หรือ devkub.net ลงในเบราว์เซอร์ จะมีงานเล็กๆ งานหนึ่งเกิดขึ้นก่อนที่หน้าเว็บจะโหลดเสมอ คือการถามว่า "ชื่อนี้อยู่ที่ไหน" งานนี้เป็นหน้าที่ของ DNS มันทำงานเงียบจนเราแทบไม่รู้ตัว แต่วันไหนที่มันมีปัญหา เว็บทั้งเว็บก็เปิดไม่ขึ้นเลย
บทความนี้จะพาไปเข้าใจ DNS แบบเห็นภาพ แล้วลงมือดูด้วยตาตัวเองว่าชื่อเว็บกลายเป็นตัวเลขได้ยังไง ใช้แค่คำสั่งที่ติดมากับเครื่องอยู่แล้ว ทั้ง Windows, Mac และ Linux ไม่ต้องติดตั้งอะไรเพิ่มครับ
จบบทความนี้คุณจะ:
- อธิบายได้ว่า Resolver, Root, TLD และ Authoritative ต่างกันยังไง
- ใช้
nslookupถามหา IP ของเว็บไหนก็ได้ และอ่านผลลัพธ์ออก - รู้จักระเบียน DNS ที่เจอบ่อย (A, AAAA, CNAME, MX, TXT)
- ไล่เช็กได้ว่าเว็บที่เปิดไม่ขึ้น เป็นเพราะ DNS หรือเปล่า
ถ้าอยากเห็นภาพรวมก่อน ดูคลิปสั้นนี้ได้เลย ยาวแค่ 1 นาทีครับ
DNS คือสมุดโทรศัพท์ของอินเทอร์เน็ต
ลองนึกถึงรายชื่อในมือถือของเรา เวลาจะโทรหาแม่ เราไม่ได้จำเบอร์ 10 หลัก แค่กดที่ชื่อ "แม่" แล้วมือถือก็หาเบอร์ให้เอง
อินเทอร์เน็ตก็ทำแบบเดียวกัน คอมพิวเตอร์คุยกันด้วยตัวเลขที่เรียกว่า IP Address แต่คนจำตัวเลขแบบนี้ไม่ไหว เราจึงตั้งชื่อให้จำง่ายอย่าง devkub.net แล้วให้ DNS (Domain Name System) เป็นคนแปลชื่อกลับเป็นตัวเลขให้
| ฝั่ง | ใช้อะไร | เทียบกับมือถือ |
|---|---|---|
| คน | ชื่อเว็บ devkub.net | ชื่อ "แม่" ในรายชื่อ |
| เครื่อง | IP เช่น 192.0.2.172 | เบอร์โทร 10 หลัก |
| คนแปล | DNS | แอปรายชื่อที่หาเบอร์ให้ |
เรื่องตัวเลขในบทความนี้ IP ที่ขึ้นต้นด้วย
192.0.2.ในบทความเป็นเลขสมมติจากช่วงที่สงวนไว้ใช้ในเอกสารโดยเฉพาะ ไม่ใช่ IP ของเว็บจริง เวลาลองเอง ตัวเลขที่คุณได้จะไม่เหมือนในบทความ และไม่จำเป็นต้องเหมือนของเพื่อนด้วย
ศัพท์ 6 คำที่ต้องรู้
ระบบ DNS มีผู้เล่นหลายตัว ลองนึกภาพว่าเราไปติดต่อหน่วยงานใหญ่แห่งหนึ่ง แต่ไม่รู้ว่าต้องไปห้องไหน
| คำ | เทียบกับ | หน้าที่ |
|---|---|---|
| IP Address | ที่อยู่จริงของบ้าน | ตัวเลขที่คอมใช้หากัน |
| Resolver | พนักงานต้อนรับ | รับคำถามจากเรา แล้ววิ่งถามต่อจนได้คำตอบ ส่วนใหญ่เป็นของผู้ให้บริการเน็ต |
| Root | ป้ายบอกทางหน้าตึก | ไม่รู้คำตอบเอง แต่รู้ว่า .com หรือ .net ต้องไปถามใคร |
| TLD | เคาน์เตอร์ของแต่ละแผนก | ดูแลนามสกุลโดเมน เช่น .com .net .th และรู้ว่าโดเมนไหนใครเป็นเจ้าของคำตอบ |
| Authoritative | เจ้าของเรื่องตัวจริง | เก็บข้อมูลของโดเมนนั้นไว้ และตอบ IP ได้ |
| TTL | วันหมดอายุบนโน้ต | บอกว่าคำตอบนี้จำไว้ได้นานกี่วินาที ก่อนต้องไปถามใหม่ |
ไม่ต้องท่องให้ครบตอนนี้ครับ เดี๋ยวเราจะเห็นแต่ละตัวโผล่มาในผลลัพธ์ของคำสั่งจริง
เดินทางทีละขั้น จากชื่อเว็บถึง IP
เวลาเราพิมพ์ devkub.net ครั้งแรก การค้นหาจะเดินทางประมาณนี้

- เครื่องเรา → Resolver เครื่องเราถามพนักงานต้อนรับว่า
devkub.netอยู่ที่ไหน - Resolver → Root Root ไม่รู้คำตอบ แต่บอกได้ว่าโดเมน
.netต้องไปถามเครื่องไหน - Resolver → TLD เคาน์เตอร์
.netบอกต่อว่าเจ้าของคำตอบของdevkub.netคือเครื่องไหน - Resolver → Authoritative เจ้าของตัวจริงตอบกลับมาว่า IP คืออะไร
- Resolver → เครื่องเรา ได้ IP แล้ว เบราว์เซอร์ก็ไปเปิดเว็บที่ตัวเลขนั้น
ทั้งหมดนี้เกิดขึ้นในเสี้ยววินาที ที่เร็วขนาดนั้นได้เพราะทุกจุดมี ความจำ (cache) ของตัวเอง ทั้งเบราว์เซอร์ ระบบปฏิบัติการ และ Resolver ถ้าเพิ่งมีคนถามชื่อเดียวกันไปเมื่อกี้ Resolver ก็ตอบจากความจำได้ทันที ไม่ต้องวิ่งไปถาม Root ใหม่ทุกครั้ง
ทำไมต้องมีหลายชั้น ถ้าทั้งโลกมีเครื่องเดียวที่เก็บทุกชื่อ เครื่องนั้นจะรับคำถามไม่ไหว และถ้ามันล่ม อินเทอร์เน็ตก็ล่มทั้งหมด การแบ่งเป็น Root → TLD → Authoritative ทำให้แต่ละที่ดูแลแค่ส่วนของตัวเอง เจ้าของโดเมนก็แก้ข้อมูลของตัวเองได้โดยไม่ต้องขอใคร
ถามหา IP ครั้งแรกด้วย nslookup
nslookup คือคำสั่งสำหรับถาม DNS ตรงๆ มีในเครื่องอยู่แล้วทั้ง 3 ระบบ
เปิด Terminal ก่อน
- Windows: กดปุ่ม Start พิมพ์
PowerShellแล้วกด Enter (ใช้ Command Prompt ก็ได้) - Mac: กด Cmd+Space พิมพ์
Terminalแล้วกด Enter - Linux: ส่วนใหญ่กด Ctrl+Alt+T
จากนั้นพิมพ์คำสั่งนี้แล้วกด Enter
nslookup github.comServer: 192.168.1.1
Address: 192.168.1.1#53
Non-authoritative answer:
Name: github.com
Address: 192.0.2.10มาอ่านทีละบรรทัดกันครับ
ServerและAddressสองบรรทัดแรก คือ Resolver ที่เครื่องเราถามอยู่ ถ้าเป็นเน็ตบ้าน มักเป็น IP ของเราเตอร์ เช่น192.168.1.1ส่วน#53คือพอร์ตมาตรฐานของ DNS (บน Windows จะไม่มี#53และบรรทัด Server อาจขึ้นว่าUnKnownไม่ต้องตกใจ)Non-authoritative answerแปลว่าคำตอบนี้มาจาก Resolver ที่ถามต่อหรือจำไว้ให้ ไม่ได้มาจากเจ้าของคำตอบตัวจริงโดยตรง ตรงกับขั้นที่ 1 และ 5 ในภาพด้านบนNameและAddressล่างสุด คือชื่อที่เราถาม และ IP ที่ได้กลับมา
เช็กว่าได้แล้ว: มีบรรทัด Address อยู่ใต้ Name: github.com อย่างน้อยหนึ่งบรรทัด
ลองเปลี่ยน github.com เป็นเว็บที่ชอบดูครับ บางเว็บจะได้ IP กลับมาหลายตัว เพราะเว็บใหญ่มีเซิร์ฟเวอร์หลายเครื่องกระจายอยู่หลายที่ DNS จึงตอบหลายตัวเพื่อแบ่งคนเข้า ไม่ให้กองอยู่ที่เครื่องเดียว
เปลี่ยนคนตอบ ลองถาม 1.1.1.1 และ 8.8.8.8
Resolver ไม่ได้มีแค่ของผู้ให้บริการเน็ต ยังมี Resolver สาธารณะที่ใครก็ใช้ได้ฟรี ที่ดังที่สุดคือของ Cloudflare (1.1.1.1) และของ Google (8.8.8.8) เราสั่ง nslookup ให้ไปถามตัวไหนก็ได้ ด้วยการใส่ IP ของมันต่อท้าย
nslookup github.com 1.1.1.1
nslookup github.com 8.8.8.8Server: 1.1.1.1
Address: 1.1.1.1#53
Non-authoritative answer:
Name: github.com
Address: 192.0.2.10เช็กว่าได้แล้ว: บรรทัด Server เปลี่ยนเป็นตัวที่เราเลือก แปลว่าเราเปลี่ยน "พนักงานต้อนรับ" ได้เอง
ทริกนี้มีประโยชน์มากเวลาแก้ปัญหา ถ้า Resolver ของเน็ตบ้านตอบไม่ได้ แต่ 1.1.1.1 ตอบได้ ก็รู้ทันทีว่าปัญหาอยู่ที่ Resolver เดิม ไม่ใช่ที่ตัวเว็บ
คำตอบไม่เหมือนกันก็ไม่ผิด Resolver แต่ละตัวอาจได้ IP ไม่เหมือนกัน เพราะเว็บใหญ่มักเลือกตอบเซิร์ฟเวอร์ที่อยู่ใกล้ Resolver ตัวนั้นที่สุด ขอแค่ทุกตัวตอบกลับมาได้ ก็ถือว่า DNS ทำงานปกติ
ดูสิ่งที่เครื่องจำไว้ และล้างความจำ
อย่างที่บอกไปว่าเครื่องเราจำคำตอบไว้ด้วย บน Windows เราเปิดดูความจำนี้ได้ตรงๆ
ipconfig /displaydns github.com
----------------------------------------
Record Name . . . . . : github.com
Record Type . . . . . : 1
Time To Live . . . . : 42
Data Length . . . . . : 4
Section . . . . . . . : Answer
A (Host) Record . . . : 192.0.2.10บรรทัด Time To Live คือ TTL หน่วยเป็นวินาที ตัวเลขจะลดลงเรื่อยๆ ถ้าสั่งซ้ำ พอถึง 0 เครื่องจะลืมคำตอบนี้ แล้วไปถาม Resolver ใหม่ ส่วน Record Type: 1 คือระเบียนแบบ A ซึ่งเดี๋ยวจะได้รู้จักในหัวข้อถัดไป
บางครั้งเราอยากให้เครื่องลืมทุกอย่างทันที เช่น เว็บเพิ่งย้ายเซิร์ฟเวอร์ แต่เครื่องเรายังวิ่งไปที่เดิม ให้ล้างความจำด้วยคำสั่งตามระบบที่ใช้
ipconfig /flushdnssudo dscacheutil -flushcache; sudo killall -HUP mDNSResponderresolvectl flush-cachesMac และ Linux ไม่มีคำสั่งเปิดดูความจำแบบ ipconfig /displaydns ส่วนคำสั่งล้างความจำก็ต่างกันไปตามรุ่นของระบบ ถ้าคำสั่งข้างบนใช้ไม่ได้ ให้ค้นด้วยชื่อรุ่นที่ใช้ เช่น "flush DNS macOS" ตามด้วยชื่อรุ่นครับ
ระเบียน DNS ที่เจอบ่อย
สมุดของ DNS ไม่ได้เก็บแค่ IP ข้อมูลแต่ละบรรทัดเรียกว่า ระเบียน (record) และมีหลายประเภท
| ประเภท | ใช้ทำอะไร | ตัวอย่าง |
|---|---|---|
| A | ชื่อ → IPv4 | devkub.net → 192.0.2.172 |
| AAAA | ชื่อ → IPv6 (IP รุ่นใหม่ ตัวยาวกว่า) | devkub.net → 2001:db8::1 |
| CNAME | ชื่อเล่น ให้ไปใช้คำตอบของอีกชื่อ | www.devkub.net → devkub.net |
| MX | อีเมลของโดเมนนี้ส่งไปเครื่องไหน | gmail.com → เซิร์ฟเวอร์อีเมลของ Google |
| TXT | ข้อความ ใช้ยืนยันความเป็นเจ้าของโดเมน | รหัสยืนยันจาก Google หรือ GitHub |
เราสั่งให้ nslookup ถามเฉพาะประเภทที่ต้องการได้ด้วย -type=
nslookup -type=AAAA github.com
nslookup -type=MX gmail.com
nslookup -type=TXT github.comเช็กว่าได้แล้ว: คำสั่ง MX จะได้รายชื่อเซิร์ฟเวอร์อีเมลพร้อมตัวเลขลำดับความสำคัญ เช่น mail exchanger = 5 gmail-smtp-in.l.google.com ส่วนคำสั่ง AAAA ถ้าเว็บนั้นไม่มี IPv6 จะไม่มีบรรทัด Address กลับมา ไม่ได้แปลว่าคำสั่งพัง
เจอตอนไหนในชีวิตจริง วันที่คุณซื้อโดเมนแล้วจะต่อกับโฮสต์หรืออีเมล หน้าตั้งค่า DNS จะให้เลือกประเภทพวกนี้แหละครับ เช่น เว็บโฮสต์บอกให้เพิ่ม A record ชี้ไปที่ IP ของเขา หรือ GitHub Pages ให้เพิ่ม CNAME ชี้ไปที่
ชื่อผู้ใช้.github.io
แถม ดูการเดินทางครบทุกขั้นด้วย dig
ผลของ nslookup เป็นคำตอบสุดท้ายจาก Resolver เราจึงไม่เห็นขั้น Root, TLD และ Authoritative ระหว่างทาง ถ้าใช้ Mac หรือ Linux จะมีอีกคำสั่งชื่อ dig ที่สั่งให้เดินตามทีละขั้นด้วยตัวเองได้
dig +trace github.comผลลัพธ์จะยาวหน่อย ให้มองหา 4 ช่วงนี้จากบนลงล่าง
- รายชื่อเครื่อง
a.root-servers.net,b.root-servers.netไปจนถึงm.root-servers.netคือ Root - รายชื่อเครื่องที่ดูแล
com.เช่นa.gtld-servers.netคือ TLD - รายชื่อเครื่องที่ดูแล
github.com.คือ Authoritative - บรรทัดท้ายๆ ที่มีคำว่า
Aตามด้วย IP คือคำตอบ
ตรงกับภาพ 5 ขั้นด้านบนทุกอย่าง ต่างกันแค่ครั้งนี้ dig ทำหน้าที่ Resolver ให้เราดูกับตา ส่วน Windows ไม่มี dig ติดมาให้ ข้ามหัวข้อนี้ไปได้เลยครับ
เว็บไม่ขึ้น เป็นที่ DNS หรือเปล่า
เวลาเปิดเว็บไม่ขึ้น ให้เริ่มจาก nslookup ชื่อเว็บ ก่อนเสมอ แล้วดูว่าเจออาการไหน
| อาการ | แปลว่า | ลองทำ |
|---|---|---|
ขึ้น Non-existent domain หรือ NXDOMAIN | ไม่มีชื่อนี้ในสมุด | เช็กการสะกดชื่อเว็บ หรือโดเมนอาจหมดอายุแล้ว |
ขึ้น timed out | ถาม Resolver แล้วไม่มีใครตอบ | ลอง nslookup ชื่อเว็บ 1.1.1.1 ถ้าได้ แปลว่า Resolver เดิมมีปัญหา |
| ได้ IP แต่เว็บยังไม่ขึ้น | DNS ทำงานปกติ | ปัญหาอยู่ที่ตัวเว็บหรือเน็ต ไม่ใช่ DNS |
| เพิ่งย้ายเว็บ แต่ยังไปที่เดิม | คำตอบเก่ายังไม่หมด TTL | ล้างความจำของเครื่อง แล้วรอสักพัก |
กฎจำง่ายๆ คือ ถ้า nslookup ได้ IP ที่ถูกต้อง แปลว่าสมุดโทรศัพท์ไม่ผิด ให้ไปหาปัญหาที่อื่นต่อ เช่น ดู HTTP Status Code ว่าเซิร์ฟเวอร์ตอบอะไรกลับมา
ทิปสำหรับคนดูแลเว็บ ก่อนย้ายเว็บไปเซิร์ฟเวอร์ใหม่ ให้ลด TTL ของระเบียนลงล่วงหน้าสัก 1 วัน เช่นจาก 3600 เหลือ 300 วินาที พอถึงวันย้ายจริง เครื่องทั่วโลกจะลืมคำตอบเก่าภายใน 5 นาที แทนที่จะต้องรอเป็นชั่วโมง
สรุป
- DNS คือคนแปลชื่อเว็บที่คนจำง่าย ให้เป็น IP ที่เครื่องใช้หากัน เหมือนรายชื่อในมือถือ
- การค้นหาเดินจาก Resolver → Root → TLD → Authoritative แล้ว Resolver จำคำตอบไว้ตาม TTL
nslookup ชื่อเว็บใช้ถามหา IP ได้ทุกเครื่อง ใส่1.1.1.1หรือ8.8.8.8ต่อท้ายเพื่อเปลี่ยนคนตอบ และใช้-type=ถามระเบียนประเภทอื่น- ระเบียนที่เจอบ่อยคือ A, AAAA, CNAME, MX และ TXT
- ถ้า
nslookupได้ IP ถูก ปัญหาไม่ได้อยู่ที่ DNS
อยากอ่านต่อ คู่มือคำสั่ง nslookup ฉบับเต็มอยู่ที่ Microsoft Learn และคำอธิบาย DNS สั้นๆ อยู่ที่ MDN
พร้อมแล้วก็ไปทำ Quiz ท้ายบทด้านล่างเพื่อรับ XP ได้เลยครับ