Fix ngay sự cố thời gian NTP trên máy chủ Linux chỉ bằng 1 câu lệnh đơn giản

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.

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.

NTP hoạt động như thế nào?

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 đ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.

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 đó.

Những sự cố thường gặp khi sử dụng NTP

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)

Chuẩn chỉ từng giây luôn nhé. Chúc các bạn thành công.

Đề xuất cho bạn

Về tác giả: Vương Công Minh

Cậu IT Minh năm nay mới 18 tủi thôi hiện đang là 1 Freelancer dạo. Sở Thích: Ăn Uống, Du Lịch, Khám Phá Công Nghệ, Thiết Kế Website, Webmaster, Làm SEO, SysAdmin,... tất cả mọi thứ liên quan đến công nghệ. Phương châm sống là không tin vào những thứ làm giàu nhanh. Chỉ tin vào việc học tập và làm việc chăm chỉ, thêm giá trị, thêm kiến thức, ứng dụng công nghệ, tăng cường ngoại giao và phục vụ nhiều người mới là con đường đúng đắn nhất để làm giàu thành công.

Để lại bình luận tại đây nhé: