유닉스/리눅스 시스템에서 시간 맞추기
서버의 시간이 date로 봤을 때와 hwclock으로 봤을 때가 무려 4분이나 차이가 나서, 유닉스/리눅스 시스템에서 시간을 맞추는 방법을 찾아보았다.
2026년 수정 안내 이 글에서 “time.windows.com에는 접속이 안 되는데, 아마 타임서버가 요청지 주소를 판단하는 것 같다”고 추측했는데 틀린 진단이었다. 프로토콜이 달라서 그런 것이다. 아래에 원인을 정리하고, 지금 권장되는 방식도 함께 적는다.
rdate를 이용한 방법 (당시 방법)
타임서버의 시각을 확인하려면
rdate -p time.bora.net
시간을 동기화하려면
rdate -s time.bora.net
시스템 시각을 하드웨어 시계(RTC)에도 반영하려면
hwclock -w
rdate가 time.windows.com에 붙지 못하는 이유
IP 필터링이 아니다. 프로토콜이 다르기 때문이다.
rdate는 TIME 프로토콜(RFC 868) 을 쓴다. TCP/UDP 37번 포트로 접속해 1900년 1월 1일 기준 경과 초를 4바이트로 받아오는, 1983년에 정의된 아주 오래된 방식이다.time.windows.com,time.apple.com,pool.ntp.org같은 현대의 타임서버는 NTP(123번 포트) 만 제공한다. 37번 포트는 아예 열려 있지 않다.
그래서 타임아웃이 났던 것이다. time.bora.net은 당시 TIME 프로토콜도 함께 제공하고 있어서 동작했던 것뿐이다.
TIME 프로토콜은 정밀도가 1초 단위이고 인증도 없어서 현재는 거의 쓰이지 않는다. 대부분의 배포판에서 rdate 패키지 자체가 기본 설치 목록에서 빠졌다.
지금 권장되는 방법
rdate를 cron으로 하루 한 번 돌리는 방식에는 문제가 하나 더 있다. 시각을 한 번에 점프시킨다는 점이다. 시계가 갑자기 뒤로 가면 로그 순서가 뒤집히고, 타임스탬프로 만료를 판단하는 로직이 오작동하며, DB 복제에서 문제가 생긴다.
NTP 데몬은 오차를 서서히 보정(slew) 하기 때문에 이런 문제가 없다.
chrony (현재 RHEL/CentOS/Rocky 계열 기본)
dnf install chrony
systemctl enable --now chronyd
# /etc/chrony.conf
server time.bora.net iburst
server kr.pool.ntp.org iburst
상태 확인:
chronyc sources -v
chronyc tracking
systemd-timesyncd (Ubuntu/Debian 기본)
timedatectl set-ntp true
timedatectl status
# /etc/systemd/timesyncd.conf
[Time]
NTP=time.bora.net kr.pool.ntp.org
한국에서 쓸 만한 NTP 서버
kr.pool.ntp.org— NTP Pool 프로젝트의 한국 서버time.bora.net— LG유플러스time.kriss.re.kr— 한국표준과학연구원 (국가 표준시)
하드웨어 시계
NTP 데몬을 쓰면 하드웨어 시계도 주기적으로 자동 동기화되므로 hwclock -w를 따로 돌릴 필요가 없다. 수동으로 맞춰야 한다면 여전히 같은 명령을 쓴다.
hwclock -w # 시스템 시각 → 하드웨어 시계
hwclock -s # 하드웨어 시계 → 시스템 시각
가상 머신이라면 보통 호스트가 게스트의 시각을 관리하므로, 게스트에서 NTP를 따로 돌릴지는 하이퍼바이저 정책에 맞춰 결정한다.
댓글 남기기