ทำไมต้องมี Domain Name ในการพัฒนาซอฟต์แวร์
เวลาที่เราเช่าเซิร์ฟเวอร์มาใหม่ เรามักจะเข้าถึงมันผ่านหมายเลข IP Address (เลขที่อยู่ของคอมพิวเตอร์บนอินเทอร์เน็ต) ซึ่งตัวเลขยาว ๆ เหล่านี้จำยากมากสำหรับมนุษย์ เราจึงต้องใช้สิ่งที่เรียกว่า Domain Name (ชื่อเว็บไซต์ที่ตั้งขึ้นเพื่อให้จดจำได้ง่าย) เข้ามาช่วยเปรียบเสมือนการบันทึกเบอร์โทรศัพท์เพื่อนไว้ในรายชื่อ แทนที่จะต้องจำเบอร์ยาว ๆ เอง
การมีโดเมนไม่ใช่แค่เรื่องความสวยงาม แต่เป็นหัวใจสำคัญของการทำ Production (การนำระบบขึ้นใช้งานจริง) หากไม่มีโดเมนที่ชี้ไปยังเซิร์ฟเวอร์เราโดยตรง เราจะไม่สามารถขอ SSL Certificate (ใบรับรองความปลอดภัยที่ทำให้เว็บไซต์เป็น HTTPS) จากผู้ให้บริการอย่าง Let's Encrypt ได้ ซึ่งจะทำให้เบราว์เซอร์แจ้งเตือนว่าเว็บไซต์ของเราไม่ปลอดภัย
นอกจากนี้ การเชื่อมต่อโดเมนยังเป็นพื้นฐานของการทำระบบเครือข่ายให้เป็นระเบียบ เมื่อคุณเริ่มทำโปรเจกต์ที่ซับซ้อนขึ้น คุณอาจต้องการแยกชื่อโดเมนย่อย เช่น cloud.yourdomain.com หรือ git.yourdomain.com เพื่อให้ผู้ใช้งานเข้าถึงบริการต่าง ๆ ของคุณได้สะดวกและดูเป็นมืออาชีพมากขึ้นครับ
เตรียมตัวก่อนเริ่มเชื่อมต่อโดเมน
ก่อนจะเริ่มลงมือทำ เราต้องเตรียม Prerequisites (สิ่งที่ต้องมีก่อนเริ่มงาน) ให้พร้อมก่อน สิ่งแรกคือเซิร์ฟเวอร์ที่ติดตั้งเสร็จแล้วพร้อมกับรู้ค่า Public IP (หมายเลขไอพีที่เข้าถึงได้จากอินเทอร์เน็ต) ของตัวเอง และต้องมีโดเมนที่จดทะเบียนไว้เรียบร้อยแล้ว รวมถึงสิทธิ์ในการเข้าถึง DNS Management (หน้าตั้งค่าการจัดการโดเมน) ของผู้ให้บริการโดเมนที่คุณซื้อมา
ขั้นตอนแรกเราจะไปดูเลข IP ของเซิร์ฟเวอร์กันก่อน ให้คุณ SSH (วิธีรีโมทเข้าไปควบคุมเซิร์ฟเวอร์ผ่านคำสั่ง) เข้าไปที่เซิร์ฟเวอร์แล้วใช้คำสั่งดังนี้ครับ
# แสดงเลข IP เวอร์ชั่น 4 ของเซิร์ฟเวอร์
ip -4 addr show scope global
# แสดงเลข IP เวอร์ชั่น 6 ของเซิร์ฟเวอร์
ip -6 addr show scope global
คำสั่ง ip -4 addr จะแสดงเลขไอพีหลัก (เช่น 203.0.113.10) ที่เราต้องใช้ ส่วน ip -6 addr จะแสดงเลขไอพีเวอร์ชั่นใหม่ที่มีความยาวมากกว่า ถ้าเซิร์ฟเวอร์ไม่มี IPv6 ก็ไม่ต้องกังวลครับ ให้จดเฉพาะเลข IPv4 ไว้ก็เพียงพอแล้วสำหรับการเริ่มต้นใช้งาน
สร้าง A Record เพื่อชี้โดเมนไปที่เซิร์ฟเวอร์
เมื่อได้เลข IP มาแล้ว เราต้องไปที่หน้าจัดการ DNS ของผู้ให้บริการโดเมนเพื่อสร้าง Resource Records (บันทึกข้อมูลการตั้งค่าชื่อโดเมน) ซึ่งตัวที่สำคัญที่สุดคือ A Record (บันทึกที่ใช้จับคู่ชื่อโดเมนกับเลข IP เวอร์ชั่น 4) เพื่อบอกอินเทอร์เน็ตว่าถ้ามีคนพิมพ์ชื่อโดเมนนี้ ให้วิ่งไปที่เลข IP ของเซิร์ฟเวอร์เรา
ให้คุณล็อกอินเข้าหน้าจัดการ DNS แล้วเพิ่มค่าเหล่านี้ลงไป
- Type: A, Host: @, Value: เลข IP ของคุณ
- Type: A, Host: www, Value: เลข IP ของคุณ
- Type: AAAA, Host: @, Value: เลข IPv6 ของคุณ (ถ้ามี)
เครื่องหมาย @ คือการแทนค่าโดเมนหลักของเรา ส่วน www คือการรองรับชื่อที่มี www นำหน้า ที่ต้องทำแบบนี้เพราะคนส่วนใหญ่ยังคงชินกับการพิมพ์ www นำหน้าชื่อเว็บไซต์อยู่ครับ สำหรับ AAAA Record (บันทึกที่ใช้จับคู่ชื่อโดเมนกับเลข IP เวอร์ชั่น 6) จะใช้สำหรับ IPv6 เท่านั้น ซึ่งชื่อเรียกนี้มาจาก IPv6 ที่มีความยาวเป็น 4 เท่าของ IPv4 นั่นเอง
เข้าใจเรื่อง TTL และการกระจายตัวของ DNS
ทุกครั้งที่เราเพิ่มข้อมูล DNS จะมีค่าหนึ่งที่เรียกว่า TTL (Time To Live - เวลาที่ข้อมูลนี้จะมีชีวิตอยู่) ซึ่งกำหนดเป็นหน่วยวินาที เช่น 3600 วินาที หรือ 1 ชั่วโมง ค่านี้จะบอกให้คอมพิวเตอร์ทั่วโลกที่มาเช็คชื่อโดเมนเราว่า ให้เก็บข้อมูลนี้ไว้ในเครื่องก่อนนะ ไม่ต้องมาถามซ้ำบ่อย ๆ จนกว่าเวลาจะหมด
เหตุการณ์ที่มักจะทำให้มือใหม่สับสนคือ Propagation (การกระจายตัวของข้อมูล DNS) เมื่อเราเปลี่ยนเลข IP ระบบอินเทอร์เน็ตทั่วโลกไม่ได้เปลี่ยนตามเราทันที แต่ต้องรอให้ข้อมูลเก่าในหน่วยความจำของแต่ละเครื่องหมดอายุลงก่อน ซึ่งอาจใช้เวลาตั้งแต่ไม่กี่นาทีไปจนถึงหนึ่งชั่วโมงครับ
ถ้าคุณมีแผนจะย้ายเซิร์ฟเวอร์ในอนาคต ผมแนะนำให้ลดค่า TTL ให้ต่ำลงเหลือประมาณ 300 วินาที (5 นาที) ล่วงหน้าสัก 1-2 วัน วิธีนี้จะทำให้การเปลี่ยนค่า IP ในวันจริงเห็นผลเกือบจะทันทีทั่วโลก หลังจากย้ายเสร็จแล้วอย่าลืมปรับค่านี้กลับเป็นค่าปกติเพื่อประหยัดการทำงานของระบบ DNS ครับ
ตรวจสอบการตั้งค่าด้วยเครื่องมือ dig
หลังจากตั้งค่าเสร็จแล้ว เราต้องตรวจสอบว่าโดเมนของเราวิ่งไปที่เซิร์ฟเวอร์ถูกต้องหรือไม่ เครื่องมือที่โปรแกรมเมอร์นิยมใช้คือ dig (Domain Information Groper - เครื่องมือสั่งถามข้อมูลจากระบบ DNS) หากคุณใช้ Linux หรือ Ubuntu สามารถติดตั้งได้ด้วยคำสั่ง sudo apt install bind9-dnsutils ครับ
เมื่อติดตั้งเสร็จแล้ว ให้ลองทดสอบด้วยคำสั่งนี้เพื่อดูว่าโดเมนของเราชี้ไปที่ IP ไหน
# ตรวจสอบว่าโดเมนชี้ไปที่ IP ไหน
dig +short yourdomain.com A
ผลลัพธ์ที่ควรเห็นคือเลข IP ของเซิร์ฟเวอร์ที่คุณตั้งค่าไว้ในขั้นตอนก่อนหน้า เช่น 152.53.246.100 หากคำสั่งนี้แสดงเลข IP ตรงกับในเซิร์ฟเวอร์ แสดงว่าการเชื่อมต่อสำเร็จแล้ว ถ้ายังไม่ขึ้น ให้ลองรอสักพักเพื่อให้ระบบอัปเดตข้อมูลหรือลองใช้คำสั่ง dig +short yourdomain.com @1.1.1.1 เพื่อเช็คผ่านระบบ DNS สาธารณะแทนครับ
ทำความรู้จักกับ Reverse DNS (PTR)
ถ้าคุณต้องการให้เซิร์ฟเวอร์ของคุณส่งอีเมลได้โดยไม่ถูกมองว่าเป็นสแปม คุณต้องตั้งค่า Reverse DNS (การย้อนกลับจากเลข IP ไปหาชื่อโดเมน) หรือที่เรียกว่า PTR Record (Pointer Record - บันทึกที่ใช้ชี้จาก IP กลับไปหาชื่อโดเมน) ซึ่งต่างจาก A Record ที่เราทำตอนแรก เพราะการตั้งค่านี้ต้องทำที่หน้าจัดการของ VPS Provider (ผู้ให้บริการเช่าเซิร์ฟเวอร์) ไม่ใช่ที่ผู้ให้บริการโดเมน
การตั้งค่านี้สำคัญมากสำหรับโปรแกรมเมอร์ที่ทำระบบแจ้งเตือนผ่านอีเมลจากเซิร์ฟเวอร์ตัวเอง หากไม่มี PTR record เซิร์ฟเวอร์อีเมลปลายทางอาจปฏิเสธข้อความของคุณทันที การตั้งค่าคือเข้าไปที่เมนู Network ในหน้าจัดการเซิร์ฟเวอร์ของคุณ แล้วใส่ชื่อโดเมนลงในช่อง Reverse DNS ให้ตรงกับเลข IP ของคุณครับ
ข้อควรระวังคือค่า Forward and Reverse (การชี้ไปและชี้กลับ) ต้องตรงกันเสมอ หมายความว่าชื่อที่คุณใส่ใน PTR ต้องชี้กลับมาที่เลข IP นี้ด้วย A Record ที่เราสร้างไว้ในขั้นตอนแรก การตรวจสอบทำได้โดยใช้คำสั่ง dig -x [IP_ADDRESS] ซึ่งควรจะแสดงชื่อโดเมนของคุณกลับมาครับ
สรุป
การเชื่อมต่อโดเมนเป็นทักษะพื้นฐานที่โปรแกรมเมอร์ทุกคนต้องทำได้ เพราะมันคือประตูบานแรกที่จะทำให้โปรเจกต์ของคุณออกสู่โลกภายนอก เราได้เรียนรู้ตั้งแต่การทำ A Record เพื่อชี้โดเมนไปที่เซิร์ฟเวอร์ การเข้าใจค่า TTL เพื่อรับมือกับการอัปเดตข้อมูล และการใช้ dig เพื่อตรวจสอบความถูกต้อง ซึ่งทั้งหมดนี้จะช่วยให้คุณจัดการระบบได้เหมือนมืออาชีพ
ตัวอย่างการนำไปใช้จริงคือ เมื่อคุณเขียนเว็บแอปพลิเคชันด้วย Docker (เครื่องมือจำลองสภาพแวดล้อมการทำงาน) เสร็จแล้ว คุณสามารถนำโดเมนที่เชื่อมต่อนี้ไปใช้กับ Traefik (ระบบจัดการการรับส่งข้อมูลเข้าออก) เพื่อทำระบบ HTTPS อัตโนมัติได้ทันที ขอให้สนุกกับการตั้งค่าเซิร์ฟเวอร์ของตัวเองครับ หากติดขัดตรงไหน ลองเช็คค่า DNS อีกรอบและใจเย็นกับเรื่องการกระจายตัวของข้อมูลนะครับ
ที่มา: Connecting a domain to your server (DNS basics) — DEV Community