DNS Cache (บางครั้งเรียกว่า DNS Resolver Cache) เป็นฐานข้อมูลชั่วคราว (Temporary Database) ที่ดูแลโดยระบบปฏิบัติการของคอมพิวเตอร์ ประกอบด้วยบันทึก (Records) ของการเข้าชมและพยายามเข้าชมเว็บไซต์และโดเมนอินเทอร์เน็ตล่าสุด
อีกนัยหนึ่ง DNS Cache คือ หน่วยความจำของ DNS Lookup ล่าสุด ที่คอมพิวเตอร์ของคุณสามารถอ้างอิงได้อย่างรวดเร็ว เมื่อมันพยายามหาวิธีโหลดเว็บไซต์
ขอบเขต: ข้อมูลในบทความนี้ใช้ได้กับผู้ใช้บ้านที่ไม่ได้เปลี่ยนการตั้งค่า DNS ของตนเอง
วัตถุประสงค์ของ DNS Cache
อินเทอร์เน็ตพึ่งพา Domain Name System (DNS) รักษาดัชนี (Index) ของเว็บไซต์สาธารณะทั้งหมดและ IP Address ที่สอดคล้องกัน คุณคิดมันได้เหมือน Phone Book (สมุดโทรศัพท์)
กับ Phone Book เราไม่ต้องจำหมายเลขโทรศัพท์ทุกคน ซึ่งเป็นวิธีเดียวที่โทรศัพท์สื่อสารได้ เช่นเดียวกัน DNS ใช้เพื่อไม่ให้เราต้องจำ IP Address ของทุกเว็บไซต์ ซึ่งเป็นวิธีเดียวที่อุปกรณ์เครือข่ายสื่อสารกับเว็บไซต์ได้
นี่คือสิ่งที่เกิดขึ้นเบื้องหลังเมื่อคุณขอให้เบราว์เซอร์โหลดเว็บไซต์:
- คุณพิมพ์ URL เช่น lifewire.com เบราว์เซอร์ขอ IP Address จากเราเตอร์
- เราเตอร์มี DNS Server Address เก็บไว้ จึงขอ IP Address ของ Hostname นั้นจาก DNS Server
- DNS Server หา IP Address ที่เป็นของ lifewire.com แล้วเข้าใจว่าคุณขอเว็บไหน แล้วเบราว์เซอร์โหลดหน้าที่เหมาะสม
กระบวนการนี้เกิดขึ้นทุกครั้งที่คุณเข้าชมเว็บไซต์ด้วย Hostname ทุกครั้งเบราว์เซอร์ส่ง Request ออกสู่อินเทอร์เน็ต แต่ Request ไม่เสร็จจนกว่าชื่อเว็บจะถูก "แปลง" (Convert/Resolve) เป็น IP Address
ปัญหาคือ แม้จะมี Public DNS Server เยอะมากให้เครือข่ายใช้เพื่อเร่งกระบวนการ Resolve/Conversion นี้ การมี Local Copy ของ "Phone Book" (DNS Cache) ยังเร็วกว่า
DNS Cache พยายามเร่งกระบวนการ further โดยจัดการ Name Resolution ของที่อยู่ที่เข้าชมล่าสุด ก่อนที่ Request จะถูกส่งออกสู่อินเทอร์เน็ต
ข้อมูลเพิ่มเติม: มี DNS Cache อยู่ที่ทุกระดับของกระบวนการ "Lookup" ที่นำคอมพิวเตอร์ของคุณไปโหลดเว็บไซต์สุดท้าย คอมพิวเตอร์ถึงเราเตอร์ เราเตอร์ติดต่อ ISP ISP อาจติดต่อ ISP อื่น ก่อนถึง "Root DNS Servers" ทุกจุดในกระบวนการมี DNS Cache ไว้เพื่อเหตุผลเดียวกัน คือเร่ง Name Resolution
DNS Cache ทำงานอย่างไร
ก่อนที่เบราว์เซอร์จะส่ง Request ออกไป คอมพิวเตอร์จะ截 (Intercept) แต่ละ Request และค้นหา Domain Name ในฐานข้อมูล DNS Cache ฐานข้อมูลมีรายชื่อ Domain Name ที่เข้าชมล่าสุด และ Address ที่ DNS คำนวณได้ครั้งแรกที่ Request ถูกสร้าง
เนื้อหาของ Local DNS Cache สามารถดูได้บน Windows ด้วยคำสั่ง ipconfig /displaydns ผลลัพธ์จะคล้ายๆ นี้:
docs.google.com ------------------------------------- Record Name . . . . . : docs.google.com Record Type . . . . . : 1 Time To Live . . . . : 21 Data Length . . . . . : 4 Section . . . . . . . : Answer A (Host) Record . . . : 172.217.6.174
ใน DNS บันทึก "A" Record คือส่วนของ DNS Entry ที่มี IP Address สำหรับ Hostname นั้น DNS Cache เก็บ Address นี้ ชื่อเว็บที่ขอ และพารามิเตอร์อื่นๆ จาก Host DNS Entry
DNS Cache Poisoning คืออะไร?
DNS Cache จะกลายเป็น Poisoned หรือ Polluted เมื่อ Domain Name หรือ IP Address ที่ไม่ได้รับอนุญาต ถูกแทรกเข้าไปใน Cache
บางครั้ง Cache อาจ Corrupt (เสียหาย) จากข้อผิดพลาดทางเทคนิคหรืออุบัติเหตุทางการบริหาร แต่ DNS Cache Poisoning มักเกี่ยวข้องกับ Computer Virus หรือ Network Attack ที่แทรก Invalid DNS Entries เข้า Cache
Poisoning ทำให้ Client Request ถูก Redirect ไปปลายทางผิด ปกติคือเว็บไซต์ร้าย (Malicious) หรือหน้าเต็มโฆษณา
ตัวอย่าง: หากบันทึก docs.google.com ข้างต้นมี "A" Record ต่างออกไป เมื่อคุณพิมพ์ docs.google.com ในเบราว์เซอร์ คุณจะถูกนำไปที่อื่น
นี่เป็นปัญหาใหญ่สำหรับเว็บไซต์ยอดนิยม หากผู้โจมตี Redirect Request สำหรับ Gmail.com ไปเว็บที่ ดูเหมือน Gmail แต่ไม่ใช่ คุณอาจเป็นเหยื่อ Phishing Attack เช่น Whaling
DNS Flushing: คืออะไร ทำอะไร และวิธีทำ
เมื่อแก้ไขปัญหา Cache Poisoning หรือปัญหาเชื่อมต่ออินเทอร์เน็ตอื่นๆ ผู้ดูแลระบบคอมพิวเตอร์อาจต้องการ Flush (Clear, Reset, หรือ Erase) DNS Cache
เนื่องจากการ Clear DNS Cache ลบ Entry ทั้งหมด มันลบ Invalid Records ด้วย และบังคับให้คอมพิวเตอร์ Repopulate (สร้างใหม่) Address เหล่านั้นครั้งต่อไปที่พยายามเข้าถึงเว็บไซต์เหล่านั้น Address ใหม่นี้มาจาก DNS Server ที่เครือข่ายตั้งค่าใช้
ดังนั้น หากบันทึก Gmail.com ถูก Poison และ Redirect ไปเว็บแปลก Flush DNS เป็นขั้นตอนแรกที่ดี เพื่อคืน Gmail.com ปกติมา
ใน Microsoft Windows สามารถ Flush Local DNS Cache ด้วยคำสั่ง ipconfig /flushdns ใน Command Prompt คุณรู้ว่าทำงานสำเร็จเมื่อเห็นข้อความ Windows IP configuration successfully flushed the DNS Resolver Cache หรือ Successfully flushed the DNS Resolver Cache
อ้างอิง: วิธี Flush และ Clear Windows DNS Cache
บน macOS ผ่าน Terminal ใช้ dscacheutil -flushcache แต่รู้ว่าไม่มีข้อความ "Success" หลังรัน จึงไม่รู้ว่าทำงานหรือไม่ ในบางกรณี Mac User ต้อง Kill DNS Responder ด้วย sudo killall -HUP mDNSResponder Linux User ควรใช้คำสั่ง /etc/rc.d/init.d/nscd restart คำสั่งแน่นอนจะแตกต่างตาม Linux Distribution
อ้างอิง: เรียนรู้เพิ่มเติมเกี่ยว DNS Cache Flushing บน Mac
เราเตอร์ก็อาจมี DNS Cache เช่นกัน ซึ่งเป็นเหตุผลที่ Reboot Router มักเป็นขั้นตอน Troubleshooting เหมือนเหตุผลที่คุณ Flush DNS Cache บนคอมพิวเตอร์ คุณสามารถ Reboot Router เพื่อ Clear DNS Entries ที่เก็บใน Temporary Memory ของมัน