SOA Record (Start of Authority) เป็นบันทึก DNS ที่สำคัญที่สุดในแต่ละ DNS zone โดยมีบทบาทในการกำหนดพฤติกรรม และข้อมูลการจัดการของโซนดังกล่าว บันทึก DNS แต่ละ zone ต้องมี SOA Record เพียง 1 บันทึกเท่านั้น ซึ่งระบุว่า primary nameserver ของ zone นั้นคือที่ใด ตารางการซิงค์ข้อมูลกับ secondary nameserver เป็นอย่างไร และ TTL สำหรับการแคชเชื่อข้อมูลที่ไม่พบในโซน บทความนี้จะอธิบายโครงสร้างทั้ง 7 ฟิลด์ของ SOA Record วิธีการอ่านค่า และความสำคัญของการจัดการ Serial Number อย่างถูกต้อง
สรุปสั้น: SOA Record เป็นบันทึก DNS ที่บอกให้ secondary nameserver ทราบว่า primary nameserver ของ zone นั้นคือที่ใด และกำหนดตารางการเช็คการอัปเดต (Refresh, Retry, Expire) รวมถึง TTL สำหรับการแคชบันทึกที่ไม่พบในโซน (Minimum TTL) ทุก DNS zone ต้องมี SOA Record เพียง 1 บันทึก และค่า Serial Number จะต้องเพิ่มขึ้นทุกครั้งที่แก้ไข zone file เพื่อให้ secondary nameserver รู้ว่ามีการเปลี่ยนแปลง
SOA Record คืออะไร และทำไมจึงสำคัญ
SOA (Start of Authority) Record เป็นบันทึก DNS ขั้นพื้นฐานที่ทำหน้าที่เป็น "ผู้รักษาการ" ของ DNS zone นั่นคือระบุว่า nameserver ใดเป็นแหล่งข้อมูลที่ถูกต้อง (authoritative source) สำหรับโดเมนนั้น และควบคุมการเซิงค์ข้อมูลระหว่าง primary nameserver กับ secondary nameserver ในการออกแบบระบบ DNS ที่มี redundancy ของโดเมน จะมี primary nameserver 1 เซิร์ฟเวอร์ที่เก็บข้อมูล zone file ต้นฉบับ และมี secondary nameserver หนึ่งเซิร์ฟเวอร์ขึ้นไป ที่ดึงข้อมูล zone มาเก็บเป็นสำเนา เพื่อให้บริการ DNS ตลอดเวลา SOA Record เป็นตัวกลางที่กำหนดความถี่ของการดึงข้อมูล การจัดการข้อผิดพลาด และขั้นตอนต่างๆ ของกระบวนการซิงค์นี้
ความสำคัญของ SOA Record มีหลายประการ ประการแรก มันระบุ MNAME (Master Name Server) ซึ่งคือ primary nameserver ที่ secondary ต้องติดต่อเพื่อขอข้อมูล zone ประการที่สอง มันระบุ RNAME ซึ่งคือ email address ของคนที่รับผิดชอบการจัดการ zone (ใช้รูปแบบพิเศษที่ @ แทนด้วยจุด) ประการที่สาม มันกำหนด Serial Number ซึ่งใช้บ่งชี้เวอร์ชันของ zone file และเป็นตัวบอกให้ secondary รู้ว่ามีการอัปเดตหรือไม่ ประการที่สี่มันกำหนดตารางการซิงค์ (Refresh เช่น ทุก 3 ชั่วโมง) Retry (หากเซิงค์ไม่สำเร็จให้ลองใหม่เมื่อไหร่) Expire (ว่านานเท่าไหร่ secondary จะหยุดให้บริการ ถ้าไม่สามารถติดต่อ primary) และสุดท้าย Minimum TTL สำหรับการแคชผลลัพธ์ "ไม่พบ" (negative caching)
โครงสร้าง SOA Record และความหมายแต่ละฟิลด์
ตัวอย่าง SOA Record ของโดเมน example.com มีลักษณะดังนี้
example.com. 3600 IN SOA ns1.example.com. hostmaster.example.com. 2024010101 10800 3600 604800 86400
มาแยกเข้าทีละส่วนให้เข้าใจว่าแต่ละส่วนหมายความว่าอะไร
MNAME (Primary Nameserver)
ฟิลด์แรกหลัง "SOA" คือ MNAME ซึ่งเป็น Fully Qualified Domain Name (FQDN) ของ primary nameserver ของ zone นั่นคือ ns1.example.com. (สังเกตจุดท้าย) เซิร์ฟเวอร์นี้เป็นแหล่งข้อมูลหลักของ zone file ต้นฉบับ และ secondary nameserver จะติดต่อเซิร์ฟเวอร์นี้เพื่อเช็คการอัปเดต MNAME ต้องต้องชี้ไปยัง nameserver ที่สามารถจำหน่าย zone file ได้จริง (ต้องมี A record และต้องตอบสนอง DNS query ได้) หากตั้งค่า MNAME ผิด secondary nameserver จะไม่สามารถหาข้อมูล zone ได้
RNAME (DNS Administrator Email)
ฟิลด์ที่สองคือ RNAME ซึ่งระบุ email address ของคนที่รับผิดชอบการจัดการ zone DNS โดยใช้รูปแบบพิเศษที่คำเครื่องหมาย @ ถูกแทนที่ด้วยจุด (dot) ดังนั้น hostmaster.example.com. หมายถึง [email protected] ในความเป็นจริง เหตุผลของการใช้จุดแทน @ คือ ที่แนวเดิมของ DNS ไม่มี @ character ที่ได้รับสนับสนุน จึงเลือกใช้จุดแทน RNAME ไม่ใช่ข้อมูลที่ resolver ใช้จริง ๆ แต่มีประโยชน์ในการระบุตัวตน
Serial Number (เลขเวอร์ชัน Zone)
ตัวเลข Serial เป็นตัวเลขเวอร์ชันของ zone file ที่ใช้ในการตัดสินใจว่า zone ได้รับการอัปเดตหรือไม่ โดยการเปรียบเทียบค่า Serial ของ primary กับ secondary nameserver หากพบว่า Serial ของ primary สูงกว่า secondary จะดึง zone file ใหม่มาทันที Serial จะต้องเป็นตัวเลขประเภท unsigned 32-bit integer ค่าตั้งแต่ 0 ถึง 4294967295 มีแบบแผนที่นิยมใช้ดังนี้ YYYYMMDDNN เช่น 2024010101 หมายถึง วันที่ 1 มกราคม ค.ศ. 2024 และเป็นการอัปเดตครั้งที่ 1 ของวันนั้น (NN คือ counter ตั้งแต่ 00 ถึง 99) ข้อดีของแบบแผนนี้คือ serial เพิ่มขึ้นเรื่อย ๆ โดยอัตโนมัติ และตรงกับลำดับเวลา อย่างไรก็ตาม Serial Number ที่สำคัญคือต้องเพิ่มขึ้นเสมอ ไม่มีข้อบังคับว่าต้องใช้ YYYYMMDDNN เท่านั้น
Refresh (ระยะเวลาการเช็ค)
ตัวเลขนี้บ่งชี้ว่า secondary nameserver จะต้องเช็คการอัปเดตจาก primary nameserver ว่า zone นั้นมีการเปลี่ยนแปลงหรือไม่ โดยการดูค่า Serial ของ SOA Record เป็นระยะเวลานี้ วัดในหน่วยวินาที ค่าทั่วไปคือ 10800 วินาที (3 ชั่วโมง) หมายความว่า secondary nameserver จะส่ง DNS query แบบ SOA ไปยัง primary ทุก ๆ 3 ชั่วโมง เพื่อเช็คว่า Serial มีเปลี่ยนแปลงหรือไม่ โดเมนขนาดเล็กที่ไม่มีการเปลี่ยนแปลงข้อมูล DNSบ่อยๆ อาจตั้ง Refresh นานขึ้น เช่น 86400 วินาที (1 วัน) เพื่อประหยัด network traffic โดเมนที่มี DNS record เปลี่ยนแปลงบ่อยอาจตั้งให้สั้นลง เช่น 3600 วินาที (1 ชั่วโมง)
Retry (ระยะเวลาลองใหม่)
หากการเช็คการอัปเดตจาก primary ล้มเหลว (เช่น primary nameserver ไม่ตอบสนอง) secondary จะรอเวลาที่กำหนดในฟิลด์นี้แล้วพยายามใหม่ โดยวัดในหน่วยวินาที ค่าทั่วไปคือ 3600 วินาที (1 ชั่วโมง) ซึ่งน้อยกว่า Refresh ตัวอย่างเช่น หาก Refresh คือ 3 ชั่วโมง แต่ในเวลาการเช็คลงหรือผลการเช็คไม่สำเร็จ secondary จะรอ 1 ชั่วโมง แล้วพยายามติดต่อ primary ใหม่อีกครั้ง เป้าหมายของ Retry คือเพื่อให้ secondary รู้สึกไม่สิ้นหวัง แม้ว่าการติดต่อครั้งแรกล้มเหลว
Expire (ระยะเวลาหมดอายุ)
หากข้อมูล zone ใน secondary nameserver เก่าเกินไปเพราะไม่สามารถติดต่อ primary ได้เป็นระยะเวลานาน ที่กำหนดในฟิลด์นี้ secondary จะเลิกตอบสนองต่อการค้นหา DNS สำหรับ zone นั้น ถือว่า zone data หมดอายุแล้ว วัดในหน่วยวินาที ค่าทั่วไปคือ 604800 วินาที (1 สัปดาห์) นโยบายนี้คือการให้ความสำคัญต่อการพร้อมใช้งาน (availability) มากกว่าความถูกต้อง หากข้อมูล zone ล้าสมัยแต่ secondary ยังสามารถจำหน่ายได้ DNS client ก็ยังได้รับคำตอบแม้ว่า primary จะมีปัญหา หลังจากผ่านระยะเวลา Expire secondary จะเลิกจำหน่าย zone นี้
Minimum TTL (TTL ขั้นต่ำ/Negative Cache TTL)
ฟิลด์นี้ใช้เป็น TTL ขั้นต่ำสำหรับบันทึกหลายประเภท โดยเฉพาะอย่างยิ่งสำหรับการแคชผลลัพธ์ "ไม่พบ" (negative caching) นั่นคือหากมี DNS query หาบันทึก "notfound.example.com" ที่ไม่มีอยู่ใน zone resolver จะแคชผลลัพธ์ "ไม่มี" นี้ โดยอิงตามค่า Minimum TTL วัดในหน่วยวินาที ค่าทั่วไปคือ 86400 วินาที (1 วัน) หมายความว่า resolver จะไม่ลองค้นหาบันทึก notfound.example.com อีกครั้งเป็นเวลา 1 วัน แม้ว่า resolver จะได้รับคำตอบเชิงลบ เหตุผลของการแคช negative คือเพื่อประหยัด network traffic สำหรับการค้นหาบันทึกที่ไม่มีจริง ๆ
ตารางเปรียบเทียบฟิลด์ SOA Record
| ฟิลด์ | ความหมาย | หน่วย | ค่าทั่วไป | ตัวอย่าง |
|---|---|---|---|---|
| MNAME | Primary nameserver | FQDN | ns1.domain.com. | ns1.example.com. |
| RNAME | DNS admin email (@ → dot) | FQDN | hostmaster.domain.com. | hostmaster.example.com. |
| Serial | Zone version number | Unsigned 32-bit | YYYYMMDDNN | 2024010101 |
| Refresh | Secondary check interval | วินาที | 10800 | 3 ชั่วโมง |
| Retry | Failed sync retry wait | วินาที | 3600 | 1 ชั่วโมง |
| Expire | Secondary stale timeout | วินาที | 604800 | 1 สัปดาห์ |
| Minimum TTL | Negative cache TTL | วินาที | 86400 | 1 วัน |
วิธีการดูค่า SOA Record ด้วยคำสั่ง dig
เพื่อตรวจสอบ SOA Record ของโดเมนใดเดียว คุณสามารถใช้เครื่องมือ DNS query ที่ชื่อ dig ได้ ซึ่งเป็นเครื่องมือมาตรฐานใน Linux/macOS หรือ nslookup ใน Windows โดยพิมพ์คำสั่ง
dig SOA example.com
ผลลัพธ์จะแสดงหลายส่วน โดยส่วนที่เราสนใจคือ ANSWER SECTION ซึ่งจะมี SOA Record ดังนี้
;; ANSWER SECTION: example.com. 3600 IN SOA ns1.example.com. hostmaster.example.com. 2024010101 10800 3600 604800 86400
หากต้องการดูเฉพาะค่า SOA Record โดยไม่มี header หรือ footer ให้ใช้ flag +short
dig SOA example.com +short
ผลลัพธ์จะแสดงเพียงบรรทัดเดียว
ns1.example.com. hostmaster.example.com. 2024010101 10800 3600 604800 86400
หากต้องการตรวจสอบ SOA Record จากเซิร์ฟเวอร์ DNS เฉพาะเจาะจง (เช่น secondary nameserver) ให้เพิ่ม @ns2.example.com
dig @ns2.example.com SOA example.com
วิธีนี้มีประโยชน์ในการตรวจสอบว่า Serial Number ในทุก nameserver ตรงกันหรือไม่ ถ้า Serial ต่างกัน หมายความว่า zone synchronization ยังไม่เสร็จสมบูรณ์
Serial Number และความสำคัญของการเพิ่มค่าเมื่อแก้ไข Zone File
หนึ่งในจุดสำคัญที่สุดของ SOA Record คือ Serial Number เพราะทุกครั้งที่แก้ไข zone file (เพิ่ม ลบ หรือเปลี่ยนแปลง DNS record) จะต้องเพิ่มค่า Serial Number ให้มากขึ้น โดยหลักการคือ Serial ใหม่ต้อง "มากกว่า" Serial เดิม ตามกฎการเปรียบเทียบ unsigned 32-bit integer ถ้าลืมทำเช่นนี้ secondary nameserver จะไม่รู้ว่า zone ได้รับการอัปเดตแล้ว และจะไม่ดึงข้อมูล zone ใหม่จาก primary ทำให้บันทึก DNS ที่เปลี่ยนแปลงในหลาย resolver ทั่วโลกไม่เห็นการเปลี่ยนแปลงนั้น
ตัวอย่างวิธีการ: หากแก้ไข zone file และ Serial เดิมคือ 2024010101 เมื่อแก้ไขเสร็จให้เปลี่ยนเป็น 2024010102 (เพิ่มตัวสุดท้ายจาก 01 เป็น 02) หลังจากเซฟไฟล์ primary nameserver จะใช้ zone file ใหม่นี้ เมื่อ secondary ทำการเช็ค SOA ตามตารางเวลา Refresh จะเห็นว่า Serial เปลี่ยนแปลง (2024010102 > 2024010101) จึงจะดึง zone ใหม่โดยอัตโนมัติ ทั้งหมดนี้เกิดขึ้นในไม่กี่นาที อาจไม่ต้องรอจนกว่า Refresh interval สิ้นสุด เพราะ secondary อาจใช้ NOTIFY mechanism เพื่อให้ secondary รู้ทันทีว่า zone เปลี่ยนแปลง (ถ้า NOTIFY ถูกตั้งค่า)
เคล็ดลับ: หากเปลี่ยนแปลง DNS หลายครั้งในวันเดียวกัน การใช้ format YYYYMMDDNN ทำให้สามารถเพิ่ม NN ได้ถึง 99 ครั้งต่อวัน ตัวอย่างเช่น วันที่ 1 มกราคม ค.ศ. 2024 สามารถใช้ serial ตั้งแต่ 2024010100 ถึง 2024010199 หากจำเป็นต้องอัปเดตมากกว่า 99 ครั้งในวันเดียว (ซึ่งหายากมาก) ให้เลื่อนไปวันถัดไปแล้วรีเซ็ตตัวนับ NN เป็น 00 ใหม่ นอกจากนี้ยังมี tool และ BIND dnssec-settime ที่สามารถ auto-increment serial ได้โดยอัตโนมัติ
ข้อผิดพลาดทั่วไปและการป้องกัน
ข้อควรระวัง: ข้อผิดพลาดที่พบบ่อยที่สุดคือลืมเพิ่มค่า Serial Number เมื่อแก้ไข zone file ผลที่ตามมาคือ secondary nameserver จะไม่เห็นว่า zone ได้รับการอัปเดต และจะยังคงใช้ข้อมูลเก่า บันทึก DNS ใหม่ที่คุณเพิ่มจึงอาจไม่มีผลใช้งาน โดยเฉพาะอย่างยิ่งหากโดเมนของคุณใช้ secondary nameserver หรือ DNS service ที่มี secondary node อื่น ๆ บางครั้งการแก้ไข zone file โดยการใช้ GUI control panel จะมีการ auto-increment serial ให้อัตโนมัติ แต่หากแก้ไข zone file โดยตรง (เช่น SSH แล้ว vi) ต้องจำไว้ว่าต้อง increment serial เอง หากไม่แน่ใจว่า Serial ได้เปลี่ยนแปลงหรือไม่ ให้ใช้คำสั่ง dig SOA เพื่อตรวจสอบค่า Serial ปัจจุบัน
สรุปและข้อมูลเพิ่มเติม
SOA Record เป็นบันทึก DNS ที่สำคัญมากสำหรับการจัดการ zone และการซิงค์ข้อมูลระหว่าง primary และ secondary nameserver ทุกโดเมนต้องมี SOA Record เพียง 1 บันทึก และจะต้องอยู่ที่ apex (root) ของ zone โดยสรุปแล้ว SOA Record ประกอบด้วยฟิลด์ 7 ตัว ได้แก่ MNAME (primary nameserver), RNAME (admin email), Serial (version number), Refresh (check interval), Retry (retry wait), Expire (stale timeout), และ Minimum TTL (negative cache TTL) ทั้งหมดนี้ทำงานร่วมกันเพื่อให้ DNS system ทำงานได้อย่างเสถียรและสม่ำเสมอ ทุกครั้งที่แก้ไข zone file ให้จำไว้ว่าต้องเพิ่มค่า Serial Number และสามารถใช้คำสั่ง dig SOA เพื่อตรวจสอบค่าปัจจุบันและตรวจสอบว่าการเปลี่ยนแปลงได้ถูกเผยแพร่ไปสู่ secondary nameserver แล้วหรือไม่
คำถามที่พบบ่อย (FAQ)
Serial Number ที่ใช้ในรูปแบบ YYYYMMDDNN นั้นบังคับหรือมีรูปแบบอื่นได้บ้าง
ไม่บังคับ Serial Number ต้องเป็น unsigned 32-bit integer ที่มากกว่าค่าเดิมเท่านั้น รูปแบบ YYYYMMDDNN เป็นแบบแผนที่เป็นที่นิยมเพราะง่ายต่อการติดตาม แต่คุณสามารถใช้ตัวเลขอื่นได้ ยาก serial เพียง 1 2 3... ก็ได้ สำคัญคือจะต้องเพิ่มขึ้นเสมอ
ถ้าลืมเพิ่ม Serial Number จะเกิดอะไรขึ้น
Secondary nameserver จะไม่รู้ว่า zone มีการเปลี่ยนแปลง และจะไม่ดึงข้อมูลใหม่ DNS record ที่คุณเพิ่มจะไม่ปรากฏใน secondary server บันทึก DNS ใหม่อาจไม่มีผลใช้งานทั่วโลก เพราะ resolver อาจ query secondary ไม่มี record ใหม่นั้น
Refresh Retry และ Expire ตั้งเป็นเท่าไหร่ดี
ค่าทั่วไปคือ Refresh 10800 วินาที (3 ชั่วโมง) Retry 3600 วินาที (1 ชั่วโมง) Expire 604800 วินาที (1 สัปดาห์) โดเมนขนาดเล็กสามารถตั้ง Refresh นานขึ้นได้ โดเมนที่มี DNS record เปลี่ยนแปลงบ่อยอาจตั้งให้สั้นลง
ทำไม RNAME ต้องใช้จุด (dot) แทน @ ในรูปแบบ email
เพราะตัวอักษร @ ไม่ถูก RFC 1035 ของ DNS ยอมรับ ในรูปแบบข้อมูล zone file จึงใช้จุดแทน @ คำว่า hostmaster.example.com. จึงหมายถึง [email protected] ในความเป็นจริง
จดโดเมนกับ AsiaGB วันนี้
AsiaGB ให้บริการจดโดเมนพร้อม DNS Management ที่ใช้งานง่าย ราคาย่อมเยา พร้อมทีมซัพพอร์ตภาษาไทยช่วยตั้งค่า DNS Record ทุกประเภท
ดูราคาโดเมน