Cách cấu hình NTP trên Ubuntu: Đồng bộ thời gian chính xác với Chrony

1. Tầm quan trọng của NTP trên Ubuntu

NTP là gì?

NTP (Network Time Protocol) là một giao thức được thiết kế để đồng bộ thời gian của các hệ thống máy tính một cách chính xác qua mạng. Việc duy trì thời gian hệ thống chính xác là cần thiết cho tính nhất quán của log, xử lý giao dịch và độ tin cậy của giao tiếp mạng. Nếu đồng hồ hệ thống bị trôi, các lỗi mạng hoặc sự không nhất quán dữ liệu có thể xảy ra, khiến việc đồng bộ thời gian chính xác trở nên quan trọng, đặc biệt trong môi trường máy chủ.

Trên Ubuntu, chrony được khuyến nghị vì nó cung cấp đồng bộ thời gian chính xác ngay cả trong môi trường mạng không ổn định. Chrony cũng cung cấp độ trễ thấp và đồng bộ nhanh, phù hợp cho cả môi trường máy chủ và máy khách.

2. Cách cấu hình NTP

Cài đặt và cấu hình Chrony

Chrony là client NTP mặc định trên Ubuntu 18.04 trở lên. Sử dụng các bước sau để cài đặt Chrony và cấu hình đồng bộ thời gian bằng các máy chủ NTP.

Các bước cài đặt

sudo apt update
sudo apt install chrony

Tiếp theo, khởi động dịch vụ Chrony và bật nó để tự động khởi động.

sudo systemctl start chrony
sudo systemctl enable chrony

Tệp cấu hình nằm ở /etc/chrony/chrony.conf. Nếu bạn muốn sử dụng các máy chủ NTP nằm ở Nhật Bản, cấu hình như sau:

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

Tùy chọn iburst tăng tốc đồng bộ ban đầu khi kết nối tới một máy chủ NTP.

3. Tối ưu hoá và chọn máy chủ NTP

Sử dụng Dự án NTP Pool

Dự án NTP Pool cung cấp các máy chủ NTP được tối ưu theo khu vực, lấy từ khắp nơi trên thế giới. Bằng cách cấu hình nhiều máy chủ NTP, độ tin cậy tăng lên, đảm bảo rằng nếu một máy chủ không khả dụng, các máy chủ khác vẫn có thể tiếp tục đồng bộ thời gian một cách liền mạch.

Ví dụ dưới đây cho thấy một cấu hình sử dụng các máy chủ nằm ở Nhật Bản:

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. Cài đặt múi giờ

Sử dụng lệnh timedatectl

Mặc định, Ubuntu sử dụng UTC làm múi giờ hệ thống. Bạn có thể thay đổi sang Giờ chuẩn Nhật Bản (JST) bằng lệnh sau:

sudo timedatectl set-timezone Asia/Tokyo

Sau khi thực hiện thay đổi, xác minh cài đặt múi giờ hiện tại bằng cách:

timedatectl

5. Khắc phục sự cố

Khi NTP không đồng bộ

Kiểm tra tường lửa

NTP sử dụng cổng UDP 123, và việc đồng bộ có thể thất bại nếu tường lửa chặn cổng này. Mở cổng 123 bằng lệnh sau:

sudo ufw allow 123/udp

Kiểm tra các máy chủ sai thời gian

Sử dụng lệnh ntpq -p để xác minh xem các máy chủ NTP có hoạt động đúng không. Các máy chủ cung cấp thời gian không chính xác sẽ được đánh dấu bằng ký hiệu x. Nếu phát hiện, hãy loại bỏ hoặc thay thế những máy chủ đó trong cấu hình của bạn.

Lỗi Stratum 16

Nếu máy chủ NTP không thể đồng bộ với máy chủ upstream, sẽ xảy ra lỗi Stratum 16. Điều này cho thấy có vấn đề về kết nối hoặc cấu hình. Kiểm tra lại cài đặt mạng và cấu hình lại các máy chủ NTP để đảm bảo đồng bộ với các nguồn upstream đáng tin cậy.

Đồng bộ thời gian thủ công

Để đồng bộ thời gian thủ công bằng Chrony, chạy lệnh sau:

sudo ntpdate ntp.nict.jp

Bạn cũng có thể xem nhật ký Chrony để chẩn đoán các vấn đề đồng bộ:

sudo journalctl -u chrony

6. Tối ưu hoá NTP trong môi trường tải cao

Điều chỉnh minpollmaxpoll

Trong các môi trường yêu cầu đồng bộ thời gian độ chính xác cao, việc điều chỉnh khoảng thời gian thăm dò NTP cho phép cập nhật thường xuyên hơn và giúp giảm thiểu độ trôi của thời gian. Ví dụ cấu hình dưới đây tăng tần suất đồng bộ:

server ntp.nict.jp iburst minpoll 4 maxpoll 10

Quản lý NTP với Juju

Trong các môi trường đám mây quy mô lớn, Juju có thể tự động hóa việc triển khai dịch vụ NTP. Juju giám sát tải của máy chủ và tự động chọn máy chủ tối ưu làm máy chủ NTP. Triển khai NTP qua Juju như sau:

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

Điều này cho phép quản lý NTP tự động, phân phối tải hiệu quả và đảm bảo đồng bộ hóa thời gian hiệu quả.

7. Nâng cao Bảo mật

Kiểm soát Truy cập cho Máy chủ NTP

Để cải thiện bảo mật, bạn có thể hạn chế truy cập máy chủ NTP vào các địa chỉ IP cụ thể. Thêm quy tắc kiểm soát truy cập vào /etc/chrony/chrony.conf như được hiển thị bên dưới để chỉ cho phép yêu cầu từ các mạng được phê duyệt:

allow 192.168.1.0/24

Điều này ngăn chặn các yêu cầu NTP không được ủy quyền từ các máy chủ bên ngoài và tăng cường bảo mật mạng nội bộ.

侍エンジニア塾