Cách khắc phục sự cố thời gian NTP trên máy chủ Linux

Lỗi NTP khiến cho các máy tính trong mạng không thể cập nhật được thời gian, ảnh hưởng đến hoạt động chung. Vậy thì cách nào để khắc phục sự cố thời gian NTP trên máy chủ Linux hiệu quả nhanh chóng nhất?

NTP là gì, đặc điểm và hoạt động như thế nào?

Network Time Protocol (NTP) là một giao thức được sử dụng để đồng bộ hóa thời gian đồng hồ của máy tính trong mạng . Nó thuộc về và là một trong những phần lâu đời nhất của bộ giao thức TCP/IP. Thuật ngữ NTP áp dụng cho cả giao thức và các chương trình máy khách-máy chủ chạy trên máy tính.

Cách khắc phục sự cố thời gian NTP trên máy chủ Linux  1

NTP, được phát triển bởi David Mills tại Đại học Delaware vào năm 1981, được thiết kế để có khả năng chịu lỗi cao và có thể mở rộng.

Đặc điểm của NTP:

Máy chủ NTP, trong đó có hàng nghìn máy chủ trên khắp thế giới, có quyền truy cập vào đồng hồ nguyên tử và đồng hồ GPS có độ chính xác cao. Các máy thu chuyên dụng được yêu cầu phải giao tiếp trực tiếp với các máy chủ NTP cho các dịch vụ này. Việc trang bị cho mỗi máy tính một trong những bộ thu này là không thực tế hoặc hiệu quả về chi phí. Thay vào đó, các máy tính được chỉ định là máy chủ thời gian chính được trang bị với bộ thu và chúng sử dụng các giao thức như NTP để đồng bộ hóa thời gian đồng hồ của các máy tính nối mạng.

Cách khắc phục sự cố thời gian NTP trên máy chủ Linux  2

NTP sử dụng Giờ phối hợp quốc tế (UTC) để đồng bộ hóa thời gian của đồng hồ máy tính với độ chính xác cực cao, mang lại độ chính xác cao hơn trên các mạng nhỏ hơn – xuống đến một phần nghìn giây trong mạng cục bộ và trong vòng hàng chục mili giây qua internet. NTP không tính đến múi giờ, thay vào đó dựa vào máy chủ để thực hiện các phép tính đó.

Hoạt động:

Máy khách NTP bắt đầu trao đổi yêu cầu thời gian với máy chủ NTP. Kết quả của việc trao đổi này, máy khách có thể tính toán độ trễ liên kết và độ lệch cục bộ của nó, đồng thời điều chỉnh đồng hồ cục bộ của nó để khớp với đồng hồ trên máy tính của máy chủ. Theo quy định, sáu sàn giao dịch trong khoảng thời gian từ 5 đến 10 phút được yêu cầu để đặt đồng hồ ban đầu.

Sau khi được đồng bộ hóa, máy khách cập nhật đồng hồ khoảng 10 phút một lần, thường chỉ yêu cầu một cuộc trao đổi tin nhắn duy nhất. Ngoài việc đồng bộ hóa máy khách-máy chủ. Giao dịch này xảy ra thông qua Giao thức Dữ liệu Người dùng trên cổng 123. NTP cũng hỗ trợ đồng bộ hóa quảng bá của đồng hồ máy tính ngang hàng.

Cách khắc phục sự cố thời gian NTP trên máy chủ Linux

Vì NTP sử dụng giao thức UDP với port 123 nên rất dễ bị tin tặc tấn công DDoS. Vì vậy nhiều nhà cung cấp dịch vụ máy chủ sẽ chặn mặc định cổng này khiến các máy tính trong mạng đó không thể cập nhật được thời gian.

Cách khắc phục

Rất may mắn rằng ngoài phương pháp đồng bộ thời gian qua cổng UDP 123, chúng ta cũng có thể đồng bộ thời gian thông qua HTTP và HTTPS. Chỉ cần sử dụng câu lệnh đơn giản sau (dùng máy chủ thời gian của Google):

date -s "$(curl -H'Cache-Control:no-cache' -sI time.google.com | grep '^Date:' | cut -d' ' -f3-6)Z"

Chúng ta cũng có thể đặt crontab bằng 2 câu lệnh sau trong “crontab -e” để hệ thống luôn được cập nhật giờ mới nhất

0 * * * * date -s "$(curl -H'Cache-Control:no-cache' -sI time.google.com | grep '^Date:' | cut -d' ' -f3-6)Z"
@reboot date -s "$(curl -H'Cache-Control:no-cache' -sI time.google.com | grep '^Date:' | cut -d' ' -f3-6)Z"

Cặp lệnh trên sẽ đồng bộ mỗi giờ một lần và mỗi lần khởi động máy.

Kiểm tra lại xem thời gian đã chuẩn chưa bằng lệnh:

timedatectl

Đầu ra kết quả có dạng tương tự như sau:

Local time: Sat 2021-12-25 09:54:23 +07
Universal time: Fri 2021-12-25 02:54:23 UTC
RTC time: Fri 2021-12-25 02:50:42
Time zone: Asia/Ho_Chi_Minh (+07, +0700)
NTP enabled: yes
NTP synchronized: no
RTC in local TZ: no

Thời gian Hệ điều hành OS chuẩn trên từng giây (Local Time). Nhưng thời gian Mainboard (RTC Time) lại không chuẩn??? Không cần phải lo, chạy ngay lệnh này (chỉ áp dụng cho server vật lý, không áp dụng cho server ảo hóa như KVM, VMWare hay OpenVZ…):

hwclock --systohc

Kiểm tra lại thời gian với timedatectl ta có kết quả:

Local time: Sat 2021-12-25 10:21:41 +07
Universal time: Sat 2021-12-25 03:21:41 UTC
RTC time: Sat 2021-12-25 03:21:41
Time zone: Asia/Ho_Chi_Minh (+07, +0700)

Như vậy là chúng tôi đã hướng dẫn xong cách khắc phục sự cố thời gian NTP trên máy chủ Linux, bạn đọc có thể tham khảo thực hành ngay nhé. Chúc thành công!

Nguồn bài tham khảo: icare24h