
หากคุณเคยพยายามเพิ่ม CNAME Record ที่ root domain (เช่น yourdomain.com ชี้ไป yourapp.provider.com) แล้วพบว่า DNS Server ไม่ยอมให้ทำ หรือเกิดปัญหาขึ้น นั่นเป็นเพราะ CNAME ที่ Apex Domain มีข้อจำกัดทาง RFC บทความนี้อธิบายว่าทำไมถึงเป็นเช่นนั้น และวิธีแก้ปัญหาด้วย CNAME Flattening, ALIAS Record หรือ Cloudflare ซึ่งเป็นเทคนิคที่บริษัทและนักพัฒนาทั่วโลกใช้กันอย่างแพร่หลายในการ deploy เว็บไซต์บนแพลตฟอร์มสมัยใหม่อย่าง Cloudflare Pages, Vercel, Netlify และ AWS
ทำไม CNAME ที่ Apex Domain ถึงมีปัญหา
ตาม RFC 1034 CNAME Record ห้ามอยู่ร่วมกับ Record ประเภทอื่นในชื่อเดียวกัน แต่ที่ Apex Domain (root domain หรือ naked domain เช่น yourdomain.com) มักต้องมี NS Record และ SOA Record อยู่แล้วเป็นบังคับ ซึ่งขัดแย้งกับกฎนี้อย่างหลีกเลี่ยงไม่ได้ DNS Server ที่ปฏิบัติตาม RFC อย่างเคร่งครัดจะปฏิเสธการเพิ่ม CNAME ที่ root domain ทันที ในขณะที่บาง DNS Server อาจยอมให้บันทึกได้แต่ก็จะเกิดพฤติกรรมที่ไม่แน่นอนในการ resolve
นอกจากนี้ MX Record สำหรับอีเมลก็มักถูกเพิ่มที่ root domain ด้วย ทำให้ไม่สามารถใส่ CNAME ที่ตำแหน่ง @ ได้เลยจาก technical standpoint ปัญหานี้กลายเป็นอุปสรรคสำคัญในยุคที่การ deploy เว็บบน Platform-as-a-Service เป็นเรื่องปกติ เพราะ Platform เหล่านี้มักกำหนดให้ชี้โดเมนผ่าน CNAME เนื่องจาก IP ของ Platform อาจเปลี่ยนแปลงโดยไม่แจ้งล่วงหน้า
ตัวอย่างที่มักพบ
ต้องการชี้ yourdomain.com ไปยัง:
- Load Balancer ของ AWS (เช่น
xxx.elb.amazonaws.com) - GitHub Pages (
yourusername.github.io) - Netlify, Vercel หรือ Cloudflare Pages
- CDN endpoint ที่ IP เปลี่ยนบ่อย
บริการเหล่านี้ต้องการ CNAME หรือ "Point to hostname" แต่ไม่สามารถทำที่ root domain ได้ตาม RFC มาตรฐาน
CNAME Flattening คืออะไร
CNAME Flattening (หรือ ANAME / ALIAS) เป็นเทคนิคที่ DNS Provider แก้ปัญหานี้โดยทำ CNAME resolution ฝั่ง server ก่อน แล้วส่ง A Record กลับให้ client แทน ทำให้จาก client มองเหมือนได้ A Record ปกติ แต่จริงๆ DNS Server ทำ CNAME chain ไว้ให้แล้ว
กระบวนการคือ: Resolver ถามหา yourdomain.com → DNS Server ของ provider ดึง IP จาก CNAME target (yourapp.provider.com) แบบ real-time → ส่ง IP กลับมาเป็น A Record → client ได้ IP ที่ถูกต้องโดยไม่มี CNAME ใน response
วิธีแก้ปัญหา 3 แนวทาง
วิธีที่ 1 — ใช้ Cloudflare (แนะนำ)
Cloudflare รองรับ CNAME Flattening อัตโนมัติสำหรับ root domain ใน Free Plan เมื่อคุณ proxy DNS ผ่าน Cloudflare (สัญลักษณ์เมฆสีส้ม):
- เพิ่มโดเมนใน Cloudflare
- ไปที่ DNS → Add Record
- เลือก Type CNAME, Name ใส่
@, Target ใส่ hostname ปลายทาง - เปิด Proxy (สีส้ม) หรือเลือก DNS Only — ทั้งคู่ใช้ CNAME Flattening
วิธีที่ 2 — ใช้ ALIAS Record (DNS Provider ที่รองรับ)
DNS Provider บางรายอย่าง DNSimple, Route 53, Dyn รองรับ ALIAS Record ซึ่งทำงานเหมือน CNAME Flattening แต่ถูก expose เป็น Record type พิเศษ สำหรับ AsiaGB Hosting ใช้วิธีนี้ผ่าน DirectAdmin ได้หากต้องการ (ขึ้นอยู่กับ Name Server ที่ใช้)
วิธีที่ 3 — ใช้ A Record + Monitoring Script
สำหรับกรณีที่ target IP เปลี่ยนไม่บ่อย สามารถ query IP ของ hostname ปลายทางแล้วเพิ่ม A Record โดยตรง และตั้ง monitoring script อัปเดต Record เมื่อ IP เปลี่ยน วิธีนี้ไม่ elegant แต่ใช้ได้กับ DNS Provider ที่ไม่รองรับ ALIAS
สรุป: ทางออกที่ง่ายและฟรีที่สุดคือใช้ Cloudflare เป็น DNS Provider ซึ่งรองรับ CNAME Flattening ทันทีใน Free Plan หาก provider ที่คุณใช้อยู่ไม่รองรับ แนะนำให้โอน DNS Management ไปยัง Cloudflare ซึ่งทำได้โดยเพียงเปลี่ยน Nameserver ของโดเมนไปชี้ที่ Cloudflare การเปลี่ยน Nameserver ไม่กระทบ Email หรือบริการอื่นใดหากนำเข้า Record ให้ครบถ้วนก่อน
ความแตกต่างระหว่าง CNAME, ALIAS และ ANAME
- CNAME — มาตรฐาน RFC, ใช้ได้เฉพาะ subdomain ไม่ใช่ root, client ทำ chain resolution เอง
- ALIAS — ชื่อที่ DNSimple ใช้สำหรับ CNAME Flattening ที่ root domain
- ANAME — ชื่อที่ DNS Made Easy และ provider อื่นๆ ใช้ ทำงานเหมือนกับ ALIAS
- CNAME Flattening — เทคนิคที่ Cloudflare ใช้ ทำงานภายใน Name Server โดยอัตโนมัติ
วิธีตรวจสอบว่า DNS Provider รองรับ ALIAS หรือ CNAME Flattening
ก่อนตัดสินใจย้าย DNS หรือเลือก Provider ใหม่ ให้ตรวจสอบว่า provider ปัจจุบันรองรับ ALIAS/CNAME Flattening หรือไม่โดยดูจากเอกสาร หรือทดสอบผ่าน dig command ดังนี้
# ทดสอบว่า root domain ส่ง A Record กลับหรือ CNAME
dig yourdomain.com A
# ถ้าเห็น CNAME ใน answer section แสดงว่า provider ไม่ได้ flatten
# ถ้าเห็น A record โดยตรง แสดงว่า provider ทำ flattening แล้ว
# ตรวจสอบเพิ่มเติมด้วย
dig +trace yourdomain.com
หากผลลัพธ์แสดง CNAME ใน answer section เมื่อถามหา root domain แสดงว่า provider ยังไม่รองรับ Flattening และอาจเกิดปัญหากับบางระบบที่ตรวจสอบตาม RFC อย่างเคร่งครัด ควรพิจารณาย้ายไปใช้ Cloudflare หรือ provider ที่รองรับ
เคล็ดลับ: Provider ที่รองรับ CNAME Flattening ได้แก่ Cloudflare (ฟรี), DNSimple, Amazon Route 53, Dyn, NS1 และ Bunny DNS หากต้องการตรวจสอบ provider อื่นให้ค้นหาคำว่า "ALIAS record" หรือ "ANAME record" ในเอกสารของ provider นั้น
เปรียบเทียบตัวเลือก DNS Provider สำหรับ CNAME Flattening
| Provider | รองรับ Flattening | ชื่อ Record | ค่าใช้จ่าย |
|---|---|---|---|
| Cloudflare | ✓ รองรับ | CNAME (Flattening อัตโนมัติ) | ฟรี |
| DNSimple | ✓ รองรับ | ALIAS | มีค่าใช้จ่าย |
| Amazon Route 53 | ✓ รองรับ | Alias Record | จ่ายตามการใช้งาน |
| ผู้ให้บริการทั่วไป | ✗ ไม่รองรับ | — | — |
ข้อควรระวังเมื่อใช้ CNAME Flattening กับ Email และ SPF
หนึ่งในข้อผิดพลาดที่พบบ่อยคือการคิดว่า CNAME Flattening จะช่วยให้ชี้ MX Record ผ่าน CNAME ได้ด้วย ซึ่งนั่นคือความเข้าใจผิด CNAME Flattening แก้ปัญหาเฉพาะ A Record ของ root domain เท่านั้น ไม่เกี่ยวกับ MX Record โดยตรง สิ่งสำคัญที่ต้องเข้าใจก่อนใช้งานคือขอบเขตที่ CNAME Flattening แก้ปัญหาได้จริงๆ และสิ่งที่ยังต้องดำเนินการตามมาตรฐาน RFC เดิม
- MX Record ยังต้องชี้ไปยัง hostname โดยตรง — ไม่สามารถใช้ CNAME เป็น target ของ MX ได้ตาม RFC (ห้ามโดยสิ้นเชิง) หากผู้ให้บริการอีเมลของคุณบอกให้เพิ่ม CNAME เป็น MX แสดงว่าเอกสารนั้นผิดพลาด ต้องใช้ hostname ของ MX server โดยตรงเสมอ
- SPF Record ที่ root domain — ยังทำงานปกติ เพราะ SPF ใช้ TXT Record ซึ่งไม่ขัดแย้งกับ ALIAS สามารถมี SPF TXT, ALIAS และ MX อยู่ร่วมกันที่ root domain ได้พร้อมกัน
- DKIM สำหรับ subdomain — ใช้ CNAME ได้ปกติ เพราะ DKIM selector เป็น subdomain ไม่ใช่ root เช่น
mail._domainkey.yourdomain.comสามารถเป็น CNAME ชี้ไปยัง provider ได้ - DMARC — ใช้ TXT Record ที่
_dmarc.yourdomain.comซึ่งเป็น subdomain ไม่มีปัญหาแต่อย่างใด
โดยสรุป CNAME Flattening แก้ปัญหาได้เฉพาะการชี้ root domain ไปยัง hostname ของบริการเว็บ ได้แก่ CDN, Load Balancer, Static Hosting หรือ Platform as a Service เท่านั้น ไม่ได้เปลี่ยนกฎ RFC สำหรับ MX Record การตั้งค่าระบบอีเมลยังต้องทำตามขั้นตอนปกติโดยใส่ hostname ของ Mail Server ใน MX Record โดยตรง
กรณีศึกษา: ย้าย DNS ไปใช้ Cloudflare เพื่อแก้ปัญหา CNAME ที่ Root Domain
สมมติว่าคุณสร้างเว็บไซต์บน Vercel และต้องการชี้ yourdomain.com (root domain) ไปยัง cname.vercel-dns.com แต่ Registrar ของคุณไม่รองรับ ALIAS Record ขั้นตอนการแก้ปัญหาโดยใช้ Cloudflare มีดังนี้
- สร้างบัญชี Cloudflare ที่ cloudflare.com (ฟรี) แล้วเพิ่มโดเมนของคุณ Cloudflare จะสแกน DNS Record เดิมและแนะนำการนำเข้า
- ตรวจสอบ DNS Records ที่ Cloudflare นำเข้า ให้ครบถ้วน โดยเฉพาะ MX, TXT (SPF, DKIM) และ A/AAAA Record ของ subdomain ต่างๆ
- เปลี่ยน Nameserver ที่ Registrar ไปชี้ที่ Nameserver ของ Cloudflare (เช่น
aria.ns.cloudflare.comและbob.ns.cloudflare.com) ต้องรอ DNS Propagation ประมาณ 24-48 ชั่วโมง - เพิ่ม CNAME Record ที่ Cloudflare โดยตั้ง Name เป็น
@และ Target เป็นcname.vercel-dns.comCloudflare จะทำ Flattening โดยอัตโนมัติ - ตรวจสอบผล ด้วย
dig yourdomain.com Aควรได้ IP Address ของ Vercel กลับมาโดยตรงแทนที่จะเป็น CNAME
กระบวนการนี้ไม่ทำให้ Email หรือบริการอื่นหยุดทำงาน เพราะ Cloudflare นำเข้า MX และ TXT Record เดิมมาด้วยตั้งแต่ขั้นตอนที่ 2 สิ่งสำคัญคือต้องตรวจสอบให้ครบถ้วนก่อนเปลี่ยน Nameserver
ผลกระทบต่อ SOA, MX และ DNSSEC
เมื่อใช้ CNAME Flattening ผ่าน Cloudflare หรือ ALIAS Record คุณยังสามารถมี MX, SOA, TXT และ Record อื่นๆ ที่ root domain ได้พร้อมกัน เพราะ ALIAS/CNAME Flattening ไม่ทำลาย co-existence rule ต่างจาก CNAME มาตรฐาน ซึ่งข้อแตกต่างนี้คือหัวใจสำคัญที่ทำให้เทคนิค CNAME Flattening แก้ปัญหาได้โดยไม่ต้องยุ่งเกี่ยวกับมาตรฐาน DNS ที่มีอยู่เดิม อย่างไรก็ตามหากใช้ DNSSEC ต้องตรวจสอบว่า provider รองรับ ALIAS + DNSSEC ร่วมกันด้วย เนื่องจากบาง implementation อาจมีปัญหาด้าน signature validation เมื่อ IP ของ target เปลี่ยนแบบ real-time ผ่าน ALIAS resolution
Cloudflare รองรับ DNSSEC ร่วมกับ CNAME Flattening ได้อย่างสมบูรณ์ในทุก Plan รวมถึง Free Plan ทำให้เป็นตัวเลือกที่ครอบคลุมที่สุดสำหรับกรณีที่ต้องการทั้ง CNAME Flattening และ DNSSEC พร้อมกัน หากคุณใช้ provider อื่นควรทดสอบด้วยเครื่องมือ DNSSEC Analyzer ก่อน deploy จริงเสมอ
จดโดเมนพร้อม DNS Management ยืดหยุ่น
AsiaGB รองรับ DNS Management ครบทุก record type สำหรับโดเมน .com .co.th .in.th และนามสกุลอื่นๆ กว่า 500 ชนิด จดโดเมน .com เพียง 500 บาท/ปี
จดโดเมนที่ AsiaGB