1. ความสำคัญของ NTP ใน Ubuntu
NTP คืออะไร?
NTP (Network Time Protocol) คือโปรโตคอลที่ใช้สำหรับซิงค์เวลาของระบบคอมพิวเตอร์ให้ตรงกันผ่านเครือข่าย การที่ระบบมีเวลาที่ถูกต้องถือเป็นสิ่งสำคัญสำหรับความสอดคล้องของล็อกไฟล์ การประมวลผลธุรกรรม และความถูกต้องของการสื่อสารเครือข่าย หากเวลาไม่ตรงกัน อาจเกิดข้อผิดพลาดในเครือข่ายหรือข้อมูลไม่ตรงกันได้ โดยเฉพาะอย่างยิ่งในการบริหารเซิร์ฟเวอร์ถือว่าสำคัญมาก
ใน Ubuntu แนะนำให้ใช้ chrony
ซึ่งสามารถซิงค์เวลาได้อย่างแม่นยำแม้ในสภาพแวดล้อมเครือข่ายที่ไม่เสถียร Chrony ยังเหมาะสำหรับเซิร์ฟเวอร์และไคลเอนต์เพราะมีความหน่วงต่ำและซิงค์ได้รวดเร็ว
2. วิธีการตั้งค่า NTP
การติดตั้งและตั้งค่า Chrony
Chrony เป็นไคลเอนต์ NTP มาตรฐานใน Ubuntu ตั้งแต่เวอร์ชัน 18.04 ขึ้นไป สามารถติดตั้งและตั้งค่าการซิงค์เวลากับ NTP เซิร์ฟเวอร์ได้ตามขั้นตอนดังนี้
ขั้นตอนการติดตั้ง
sudo apt update
sudo apt install chrony
จากนั้นให้เริ่มบริการ Chrony และตั้งค่าให้เริ่มอัตโนมัติ
sudo systemctl start chrony
sudo systemctl enable chrony
ไฟล์ตั้งค่าอยู่ที่ /etc/chrony/chrony.conf
หากต้องการใช้ NTP เซิร์ฟเวอร์ที่อยู่ใกล้กับญี่ปุ่น สามารถตั้งค่าตัวอย่างนี้ได้
server ntp.nict.jp iburst
server 0.jp.pool.ntp.org iburst
server 1.jp.pool.ntp.org iburst
server 2.jp.pool.ntp.org iburst
ตัวเลือก iburst
จะช่วยให้การซิงค์ในครั้งแรกเร็วขึ้น

3. การเลือกและปรับแต่ง NTP เซิร์ฟเวอร์
การใช้ NTP Pool Project
NTP Pool Project เป็นโครงการที่ให้บริการเซิร์ฟเวอร์ NTP ที่เหมาะสมที่สุดตามภูมิภาคจากทั่วโลก การตั้งค่าเซิร์ฟเวอร์ NTP หลายตัวจะช่วยเพิ่มความน่าเชื่อถือ หากเซิร์ฟเวอร์ใดล่ม เซิร์ฟเวอร์อื่นจะทำงานแทน
ตัวอย่างการตั้งค่านี้ใช้เซิร์ฟเวอร์ในประเทศญี่ปุ่น
server ntp.nict.jp iburst
server 0.jp.pool.ntp.org iburst
server 1.jp.pool.ntp.org iburst
server 2.jp.pool.ntp.org iburst
4. การตั้งค่าโซนเวลา
การใช้คำสั่ง timedatectl
ค่าโซนเวลามาตรฐานของ Ubuntu คือ UTC แต่สามารถเปลี่ยนเป็นเวลามาตรฐานญี่ปุ่น (JST) ได้ด้วยคำสั่งนี้
sudo timedatectl set-timezone Asia/Tokyo
หลังจากเปลี่ยนแล้ว สามารถตรวจสอบสถานะโซนเวลาด้วยคำสั่งต่อไปนี้
timedatectl
5. การแก้ไขปัญหา
เมื่อ NTP ไม่สามารถซิงค์ได้
ตรวจสอบ Firewall
NTP ใช้พอร์ต UDP 123 อาจถูก Firewall บล็อก สามารถเปิดพอร์ตนี้ด้วยคำสั่งต่อไปนี้
sudo ufw allow 123/udp
ตรวจสอบ False-ticker
ใช้คำสั่ง ntpq -p
เพื่อตรวจสอบว่า NTP เซิร์ฟเวอร์ทำงานถูกต้องหรือไม่ หากมี False-ticker (เซิร์ฟเวอร์ที่ส่งเวลาผิดพลาด) จะแสดงสัญลักษณ์ x
ควรเลือกเซิร์ฟเวอร์อื่นหรือแก้ไขการตั้งค่า
ข้อผิดพลาด Stratum 16
หาก NTP เซิร์ฟเวอร์ไม่สามารถซิงค์กับเซิร์ฟเวอร์ระดับสูงได้ จะเกิดข้อผิดพลาด Stratum 16 แสดงว่าการเชื่อมต่อไม่สมบูรณ์หรือมีปัญหาในเครือข่าย ควรตรวจสอบการตั้งค่าหรือเปลี่ยนไปใช้เซิร์ฟเวอร์ที่เชื่อถือได้
การซิงค์เวลาด้วยตนเอง
สามารถซิงค์เวลาด้วยตนเองโดยใช้ Chrony ด้วยคำสั่งนี้
sudo ntpdate ntp.nict.jp
หรือสามารถตรวจสอบบันทึกของ Chrony เพื่อวิเคราะห์ปัญหาได้ด้วยคำสั่งนี้
sudo journalctl -u chrony

6. การปรับแต่ง NTP สำหรับสภาพแวดล้อมที่มีโหลดสูง
การปรับค่า minpoll
และ maxpoll
ในสภาพแวดล้อมที่ต้องการความแม่นยำสูง สามารถปรับช่วงเวลาการสำรวจ (poll) ของ NTP เพื่อซิงค์บ่อยขึ้นและลดความคลาดเคลื่อนของเวลา ตัวอย่างการตั้งค่าดังนี้
server ntp.nict.jp iburst minpoll 4 maxpoll 10
การจัดการ NTP ด้วย Juju
ในระบบคลาวด์ขนาดใหญ่ สามารถใช้ Juju เพื่อทำให้บริการ NTP เป็นอัตโนมัติ Juju จะตรวจสอบภาระงานของแต่ละโฮสต์และเลือกโฮสต์ที่เหมาะสมสำหรับเป็น NTP เซิร์ฟเวอร์ สามารถดีพลอย NTP ด้วยคำสั่งต่อไปนี้
juju deploy cs:ntp ntp
juju config ntp auto_peers=true
ด้วยวิธีนี้จะสามารถบริหาร NTP ได้อัตโนมัติและซิงค์เวลาได้อย่างมีประสิทธิภาพในระบบที่มีภาระงานสูง
7. การเพิ่มความปลอดภัย
การควบคุมการเข้าถึง NTP เซิร์ฟเวอร์
เพื่อความปลอดภัย สามารถจำกัดการเข้าถึง NTP เซิร์ฟเวอร์ให้เฉพาะ IP Address ที่กำหนดได้ เพียงเพิ่มการตั้งค่านี้ใน /etc/chrony/chrony.conf
จะอนุญาตเฉพาะไคลเอนต์จากเครือข่ายหรือ IP ที่กำหนดเท่านั้น
allow 192.168.1.0/24
ด้วยวิธีนี้จะช่วยป้องกันการร้องขอที่ไม่ปลอดภัยจากภายนอก และเพิ่มความปลอดภัยให้กับเครือข่ายภายใน