การตั้งค่าและซิงค์เวลา NTP บน Ubuntu: คู่มือฉบับสมบูรณ์สำหรับมืออาชีพ

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

ด้วยวิธีนี้จะช่วยป้องกันการร้องขอที่ไม่ปลอดภัยจากภายนอก และเพิ่มความปลอดภัยให้กับเครือข่ายภายใน