วิธีตั้งค่า NTP บน Ubuntu: การซิงโครไนซ์เวลาอย่างแม่นยำด้วย Chrony

1. ความสำคัญของ NTP บน Ubuntu

NTP คืออะไร?

NTP (Network Time Protocol) เป็นโปรโตคอลที่ออกแบบมาเพื่อซิงโครไนซ์เวลาในระบบคอมพิวเตอร์อย่างแม่นยำผ่านเครือข่าย การรักษาเวลาให้แม่นยำเป็นสิ่งจำเป็นสำหรับความสอดคล้องของบันทึก, การประมวลผลธุรกรรม, และความน่าเชื่อถือของการสื่อสารในเครือข่าย หากนาฬิการะบบหลุดออกจากเวลาอาจทำให้เกิดข้อผิดพลาดของเครือข่ายหรือข้อมูลไม่สอดคล้องกัน ทำให้การซิงโครไนซ์เวลาที่แม่นยำเป็นสิ่งสำคัญโดยเฉพาะในสภาพแวดล้อมของเซิร์ฟเวอร์

บน Ubuntu, chrony ถูกแนะนำให้ใช้เพราะให้การซิงโครไนซ์เวลาที่แม่นยำแม้ในเครือข่ายที่ไม่เสถียร Chrony ยังมีความหน่วงต่ำและการซิงโครไนซ์ที่รวดเร็ว ทำให้เหมาะกับทั้งสภาพแวดล้อมของเซิร์ฟเวอร์และไคลเอนต์

2. วิธีการตั้งค่า NTP

การติดตั้งและกำหนดค่า Chrony

Chrony เป็นไคลเอนต์ NTP เริ่มต้นบน Ubuntu 18.04 ขึ้นไป ใช้ขั้นตอนต่อไปนี้เพื่อติดตั้ง Chrony และกำหนดค่าการซิงโครไนซ์เวลาโดยใช้เซิร์ฟเวอร์ 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 เร่งการซิงโครไนซ์ครั้งแรกเมื่อเชื่อมต่อกับเซิร์ฟเวอร์ NTP

3. การปรับแต่งและการเลือกเซิร์ฟเวอร์ NTP

การใช้ NTP Pool Project

NTP Pool Project ให้บริการเซิร์ฟเวอร์ 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 ไม่ทำการซิงโครไนซ์

ตรวจสอบไฟร์วอลล์

NTP ใช้พอร์ต UDP 123 และการซิงโครไนซ์อาจล้มเหลวหากไฟร์วอลล์บล็อกพอร์ตนี้ เปิดพอร์ต 123 ด้วยคำสั่งต่อไปนี้

sudo ufw allow 123/udp

ตรวจสอบการทำงานผิดพลาดของเซิร์ฟเวอร์

ใช้คำสั่ง ntpq -p เพื่อตรวจสอบว่าเซิร์ฟเวอร์ NTP ทำงานอย่างถูกต้องหรือไม่ เซิร์ฟเวอร์ที่ให้เวลาผิดพลาดจะถูกทำเครื่องหมายด้วยสัญลักษณ์ x หากพบ ให้ลบหรือเปลี่ยนเซิร์ฟเวอร์เหล่านั้นในไฟล์กำหนดค่าของคุณ

ข้อผิดพลาด Stratum 16

หากเซิร์ฟเวอร์ NTP ไม่สามารถซิงโครไนซ์กับเซิร์ฟเวอร์ต้นทางได้ จะเกิดข้อผิดพลาด Stratum 16 ซึ่งบ่งบอกถึงปัญหาการเชื่อมต่อหรือการกำหนดค่า ตรวจสอบการตั้งค่าเครือข่ายของคุณและกำหนดค่าเซิร์ฟเวอร์ NTP ใหม่เพื่อให้ซิงโครไนซ์กับแหล่งต้นทางที่เชื่อถือได้

การซิงโครไนซ์เวลาแบบแมนนวล

เพื่อซิงโครไนซ์เวลาแบบแมนนวลด้วย Chrony ให้รันคำสั่งต่อไปนี้

sudo ntpdate ntp.nict.jp

คุณยังสามารถตรวจสอบบันทึกของ Chrony เพื่อวินิจฉัยปัญหาการซิงโครไนซ์ได้อีกด้วย

sudo journalctl -u chrony

6. การปรับประสิทธิภาพ NTP ในสภาพแวดล้อมที่มีโหลดสูง

ปรับค่า minpoll และ maxpoll

ในสภาพแวดล้อมที่ต้องการการซิงโครไนซ์เวลาความแม่นยำสูง การปรับช่วงเวลาการโพลของ NTP จะทำให้มีการอัปเดตบ่อยขึ้นและช่วยลดการหลุดของเวลา ตัวอย่างการกำหนดค่าด้านล่างเพิ่มความถี่ของการซิงโครไนซ์

server ntp.nict.jp iburst minpoll 4 maxpoll 10

การจัดการ NTP ด้วย Juju

ในสภาพแวดล้อมคลาวด์ขนาดใหญ่ Juju สามารถทำการอัตโนมัติการปรับใช้บริการ NTP ได้ โดย Juju จะตรวจสอบภาระของโฮสต์และเลือกโฮสต์ที่เหมาะสมที่สุดเป็นเซิร์ฟเวอร์ NTP โดยอัตโนมัติ ปรับใช้ NTP ผ่าน Juju ตามขั้นตอนต่อไปนี้:

juju deploy cs:ntp ntp
juju config ntp auto_peers=true

การทำเช่นนี้ช่วยให้การจัดการ NTP เป็นอัตโนมัติ กระจายภาระอย่างมีประสิทธิภาพและรับประกันการซิงโครไนซ์เวลาอย่างมีประสิทธิผล

7. เพิ่มความปลอดภัย

การควบคุมการเข้าถึงสำหรับเซิร์ฟเวอร์ NTP

เพื่อเพิ่มความปลอดภัย คุณสามารถจำกัดการเข้าถึงเซิร์ฟเวอร์ NTP ให้กับที่อยู่ IP เฉพาะได้ โดยเพิ่มกฎการควบคุมการเข้าถึงลงในไฟล์ /etc/chrony/chrony.conf ตามตัวอย่างด้านล่าง เพื่ออนุญาตคำขอเฉพาะจากเครือข่ายที่ได้รับการยอมรับ:

allow 192.168.1.0/24

การทำเช่นนี้จะป้องกันคำขอ NTP ที่ไม่ได้รับอนุญาตจากโฮสต์ภายนอกและเสริมความแข็งแกร่งให้กับความปลอดภัยของเครือข่ายภายใน.