คำตอบสั้น ๆ: เข้าใจว่า TTL ของ DNS ทำงานอย่างไร แล้ววางแผนลด TTL ล่วงหน้า สลับ Record และตรวจผลด้วย dig เพื่อย้ายเว็บหรืออีเมลไปเซิร์ฟเวอร์ใหม่โดยไม่มีช่วงล่ม
คู่มือนี้อธิบาย TTL ทีละขั้นตอน พร้อมคำสั่งที่ใช้ได้จริงและปัญหาที่พบบ่อย
TTL (Time To Live) คือเวลาเป็นวินาทีที่ DNS Resolver เช่นของผู้ให้บริการอินเทอร์เน็ตหรือ 8.8.8.8 ได้รับอนุญาตให้จำคำตอบของ Record ไว้ก่อนจะถามใหม่ ถ้า A Record ของเว็บมี TTL 86400 (1 วัน) แล้วคุณเปลี่ยน IP ผู้ใช้บางส่วนอาจยังถูกพาไปเซิร์ฟเวอร์เก่านานถึง 1 วัน อาการ "DNS ยังไม่อัปเดต" ที่หลายคนเรียกว่ารอ Propagate จริง ๆ แล้วก็คือการรอ Cache หมดอายุตาม TTL นี่เอง
ข่าวดีคือเรารู้ล่วงหน้าได้ว่าจะต้องรอนานแค่ไหน และลดเวลารอได้ด้วยการลด TTL ก่อนย้าย บทความนี้เป็นแผนย้ายที่ใช้ได้ทั้งการย้ายเว็บ ย้ายอีเมล หรือเปลี่ยนผู้ให้บริการ DNS
สิ่งที่ต้องเตรียม
- สิทธิ์แก้ไข DNS Zone ปัจจุบันของโดเมน
- เซิร์ฟเวอร์ใหม่ที่ติดตั้งเว็บหรืออีเมลเสร็จแล้ว หรืออย่างน้อยพร้อมทดสอบ
- เครื่องที่มีคำสั่ง
dig(Linux, macOS) หรือnslookup(Windows) ดูพื้นฐานได้ที่ ตรวจสอบ DNS ด้วย nslookup และ dig - เวลาอย่างน้อย 2 วันก่อนวันย้ายจริง
TTL ที่ควรรู้จัก
| ค่า TTL | เท่ากับ | ใช้เมื่อ |
|---|---|---|
| 300 | 5 นาที | ช่วงก่อนและระหว่างย้าย |
| 3600 | 1 ชั่วโมง | ค่าปกติที่สมดุลสำหรับเว็บทั่วไป |
| 14400-86400 | 4 ชั่วโมงถึง 1 วัน | Record ที่แทบไม่เปลี่ยน เช่น MX ที่ใช้มานาน |
TTL ต่ำเกินไปตลอดเวลาไม่มีประโยชน์ เพราะทำให้ Resolver ถามบ่อยขึ้น เว็บตอบช้าลงเล็กน้อยในครั้งแรกของแต่ละผู้ใช้ จึงควรลดเฉพาะช่วงย้าย
หมายเหตุ: การเปลี่ยน Name Server ที่ผู้รับจดโดเมนต่างจากการเปลี่ยน Record ค่า TTL ของ NS ที่ระดับ Registry (เช่นของ .com มักเป็น 172800 วินาที หรือ 2 วัน) ถูกกำหนดโดย Registry คุณแก้ไม่ได้ ดังนั้นถ้าจะย้ายผู้ให้บริการ DNS ให้สร้าง Zone ที่ใหม่ให้เหมือนที่เดิมทุก Record ก่อน และคง Zone เดิมไว้อย่างน้อย 2-3 วันหลังเปลี่ยน
ขั้นตอนที่ 1: สำรวจ Record ปัจจุบันและ TTL เดิม
ถาม Name Server ต้นทางโดยตรงเพื่อดูค่า TTL จริง
dig +short NS example.com
dig @ns1.example-dns.net example.com A +noall +answer
dig @ns1.example-dns.net www.example.com A +noall +answer
dig @ns1.example-dns.net example.com MX +noall +answer
ผลลัพธ์จะมีรูปแบบนี้ ตัวเลขคอลัมน์ที่สองคือ TTL
example.com. 86400 IN A 198.51.100.20
จดทุก Record ที่เกี่ยวข้องไว้ รวมถึง TXT ของ SPF และ DKIM, CNAME ของบริการภายนอก และ Subdomain ที่ใช้งาน ส่งออกเป็นไฟล์หรือถ่ายภาพหน้าจอเก็บไว้เป็นข้อมูลสำรองก่อนแก้ไขอะไร
ขั้นตอนที่ 2: ลด TTL ล่วงหน้า
แก้ TTL ของ Record ที่จะเปลี่ยนเป็น 300 ก่อนวันย้ายอย่างน้อยเท่ากับค่า TTL เดิม ถ้า TTL เดิมคือ 86400 ต้องลดก่อนอย่างน้อย 24 ชั่วโมง เผื่อไว้เป็น 48 ชั่วโมงจะปลอดภัยกว่า เหตุผลคือ Resolver ที่จำค่าเดิมไว้จะยังจำ TTL 86400 จนหมดรอบ จึงจะเห็นค่า 300 ใหม่
ยังไม่ต้องเปลี่ยน IP ในขั้นนี้ เปลี่ยนเฉพาะ TTL
ขั้นตอนที่ 3: ทดสอบเซิร์ฟเวอร์ใหม่โดยไม่ต้องแก้ DNS
ใช้ Hosts File บังคับให้เฉพาะเครื่องของคุณมองโดเมนเป็น IP ใหม่ แล้วทดสอบเว็บ ฟอร์ม การ Login และ SSL ให้ครบ วิธีแก้บน macOS ดู แก้ไข Hosts File บน macOS บน Linux แก้ไฟล์ /etc/hosts บน Windows แก้ C:\Windows\System32\drivers\etc\hosts ด้วย Notepad ที่เปิดแบบ Run as administrator
203.0.113.10 example.com www.example.com
หรือทดสอบจากคอมมานด์ไลน์โดยไม่แตะ Hosts File
curl -sI --resolve example.com:443:203.0.113.10 https://example.com
ทดสอบเสร็จแล้วอย่าลืมลบบรรทัดใน Hosts File ออก