Chrony는 Linux에서 NTP(Network Time Protocol) 기반 시간 동기화를 담당하는 데몬입니다.
기존 ntpd를 대체하는 최신 표준으로, RHEL 7 / CentOS 7 이상과 Ubuntu 18.04 이상에서 기본 탑재되어 있습니다.
이 글에서는 chrony.conf 설정 방법, iburst 옵션, 특정 NTP 서버로의 교체, chronyc 진단 명령어, 그리고 흔히 발생하는 에러 해결 방법을 실무 기준으로 정리합니다.
🧭 Chrony란? #
Chrony는 불안정한 네트워크 환경(재부팅, 슬립 모드, 간헐적 연결)에서도 빠르고 정확하게 시스템 시간을 동기화하는 NTP 구현체입니다.
1NTP 서버 (Stratum 1/2)
2 ↓ UDP 123
3 chronyd 데몬
4 ↓
5 시스템 클럭 조정
6 ↓
7 (rtcsync) 하드웨어 클럭(RTC) 반영| 항목 | ntpd | chronyd (Chrony) |
|---|---|---|
| 수렴 속도 | 느림 | 빠름 (iburst) |
| 불안정 네트워크 대응 | 취약 | 강함 |
| 기본 탑재 | RHEL 6 이하 | RHEL 7+ / Ubuntu 18.04+ |
| 설정 파일 | /etc/ntp.conf | /etc/chrony.conf 또는 /etc/chrony/chrony.conf |
📦 설치 #
RHEL / CentOS / Rocky Linux #
1sudo dnf install chrony -y # RHEL 8+
2# 또는
3sudo yum install chrony -y # CentOS 7Ubuntu / Debian #
1sudo apt-get update
2sudo apt-get install chrony -y서비스 시작 및 자동 실행 등록 #
1sudo systemctl enable --now chronyd
2sudo systemctl status chronyd⚙️ chrony.conf 주요 설정 #
설정 파일 경로:
- Ubuntu:
/etc/chrony/chrony.conf - CentOS / RHEL / Rocky:
/etc/chrony.conf
pool vs server #
1# pool: NTP Pool 프로젝트에서 여러 서버를 자동 선택
2pool 2.rocky.pool.ntp.org iburst
3
4# server: 특정 서버 한 대를 직접 지정
5server time.google.com iburstTip:
pool은 여러 서버를 자동으로 활용해 안정성이 높습니다. 사내 전용 NTP 서버가 있다면server로 직접 지정하세요.
주요 옵션 설명 #
| 옵션 | 설명 |
|---|---|
iburst | 초기 동기화 시 패킷을 집중 전송하여 수렴 속도를 높임 |
prefer | 해당 서버를 우선 참조 소스로 지정 |
maxsources N | pool에서 사용할 최대 서버 수 (기본값: 4) |
minpoll N | 최소 폴링 간격 (2^N 초, 기본 6 = 64초) |
maxpoll N | 최대 폴링 간격 (2^N 초, 기본 10 = 1024초) |
makestep T S | T초 이상 오차 발생 시 처음 S번은 즉시 시간 점프 |
rtcsync | 시스템 클럭을 하드웨어 RTC와 주기적으로 동기화 |
driftfile | 클럭 드리프트 값 저장 경로 |
logdir | 로그 저장 디렉토리 |
권장 기본 설정 예시 #
1# /etc/chrony.conf (CentOS/RHEL 기준)
2
3# 기본 pool 대신 특정 서버로 교체 시 아래처럼 pool 줄을 주석 처리
4# pool 2.centos.pool.ntp.org iburst
5
6server 0.asia.pool.ntp.org iburst
7server 1.asia.pool.ntp.org iburst
8server 2.asia.pool.ntp.org iburst
9server 3.asia.pool.ntp.org iburst
10
11# 한국 공개 NTP 서버
12# server time.bora.net iburst
13# server time.kornet.net iburst
14
15# 시간 오차 1.0초 초과 시 처음 3번은 즉시 점프 조정
16makestep 1.0 3
17
18# 하드웨어 RTC와 동기화
19rtcsync
20
21# 클럭 드리프트 저장
22driftfile /var/lib/chrony/drift
23
24# 로그 디렉토리
25logdir /var/log/chrony🔄 특정 NTP 서버로 교체하기 #
사내 NTP 서버 또는 클라우드 내부 NTP 서버로 교체하는 실무 절차입니다.
1단계: 설정 파일 편집 #
1sudo vi /etc/chrony.conf
2# 또는 Ubuntu
3sudo vi /etc/chrony/chrony.conf기존 pool 또는 server 라인을 주석 처리하고 새 서버를 추가합니다.
1# 기존 pool 비활성화
2# pool 2.centos.pool.ntp.org iburst
3
4# 사내 NTP 서버로 교체
5server 192.168.1.10 iburst
6server 192.168.1.11 iburst2단계: 서비스 재시작 #
1sudo systemctl restart chronyd3단계: 동기화 상태 확인 #
1chronyc sources -v출력 예시:
1MS Name/IP address Stratum Poll Reach LastRx Last sample
2===============================================================================
3^* 192.168.1.10 2 6 377 23 +12us[ +8us] +/- 220us
4^+ 192.168.1.11 2 6 377 24 -15us[ -10us] +/- 180us☁️ 클라우드 환경별 NTP 설정 #
클라우드 인스턴스는 해당 클라우드 내부 NTP 서버를 사용하는 것이 정확도·안정성 측면에서 유리합니다.
| 클라우드 | 내부 NTP 서버 |
|---|---|
| AWS | 169.254.169.123 |
| GCP | metadata.google.internal |
| Azure | time.windows.com |
| Naver Cloud | 내부 NTP 서버 (VPC 설정 참고) |
AWS 환경 예시:
1server 169.254.169.123 prefer iburst minpoll 4 maxpoll 4Tip:
prefer옵션으로 내부 서버를 우선 참조 소스로 지정하고,minpoll/maxpoll 4로 폴링 간격을 16초로 고정해 빠른 동기화를 유지할 수 있습니다.
🛠️ chronyc 진단 명령어 #
sources — NTP 소스 상태 확인 #
1chronyc sources -v| 소스 상태 기호 | 의미 |
|---|---|
* | 현재 동기화 중인 기준 서버 |
+ | 신뢰할 수 있는 후보 서버 |
- | 알고리즘에 의해 제외된 서버 |
? | 연결 불가 / 응답 없음 |
x | 거짓 서버(falseticker)로 판정됨 |
tracking — 시스템 시간 동기화 세부 정보 #
1chronyc tracking 1Reference ID : C0A8010A (192.168.1.10)
2Stratum : 3
3Ref time (UTC) : Sat Apr 26 12:00:00 2026
4System time : 0.000012345 seconds fast of NTP time
5Last offset : +0.000012345 seconds
6RMS offset : 0.000015678 seconds
7Frequency : 2.341 ppm fast
8Residual freq : +0.001 ppm
9Skew : 0.012 ppm
10Root delay : 0.002345678 seconds
11Root dispersion : 0.001234567 secondsmakestep — 즉시 시간 강제 동기화 #
시스템 시간이 크게 틀어졌을 때 즉시 보정합니다.
1sudo chronyc makestep
2# 또는 -a 옵션으로 인증 우회
3sudo chronyc -a makestep기타 유용한 명령어 #
1chronyc sourcestats -v # 소스별 통계 (오프셋 히스토리, 지터 등)
2chronyc activity # 온라인/오프라인 서버 수 확인
3timedatectl status # 시스템 시간·타임존·NTP 상태 종합 확인
4timedatectl set-timezone Asia/Seoul # 타임존 변경🌏 타임존 설정 #
시간 동기화와 함께 타임존도 올바르게 설정해야 합니다.
1# 현재 타임존 확인
2timedatectl status
3
4# 한국 표준시로 변경
5timedatectl set-timezone Asia/Seoul
6
7# 변경 결과 확인
8date🔒 방화벽 설정 (UDP 123) #
NTP는 UDP 123번 포트를 사용합니다. 클라이언트가 외부 NTP 서버에 접근하려면 아웃바운드 규칙이 열려 있어야 합니다.
1# firewalld (RHEL/CentOS)
2sudo firewall-cmd --add-service=ntp --permanent
3sudo firewall-cmd --reload
4
5# UFW (Ubuntu)
6sudo ufw allow 123/udp
7
8# iptables 직접 설정
9sudo iptables -A OUTPUT -p udp --dport 123 -j ACCEPT클라우드 환경이라면 보안 그룹(Security Group) 의 아웃바운드 규칙에서도 UDP 123번을 허용해야 합니다.
❓ 자주 묻는 질문 및 트러블슈팅 #
Q. chronyc sources에서 모든 서버가 ? 로 표시됩니다
#
→ NTP 서버에 연결이 안 되는 상태입니다. 다음 순서로 확인합니다.
1# 1. 방화벽 UDP 123 허용 여부 확인
2sudo firewall-cmd --list-all
3
4# 2. NTP 서버 IP 도달 가능 여부 확인
5ping -c 3 time.google.com
6
7# 3. UDP 123 연결 테스트
8sudo nc -uzv time.google.com 123
9
10# 4. 서비스 재시작
11sudo systemctl restart chronydQ. iburst 옵션을 추가했는데 시간이 빨리 맞지 않습니다 #
→ iburst는 초기 동기화 속도를 높이지만, 시간 오차가 크면 makestep으로 즉시 강제 보정해야 합니다.
1sudo chronyc makestep
2chronyc tracking # System time 값이 줄어드는지 확인Q. iburst를 설정 파일에 단독 라인으로 넣으면 에러가 납니다
#
→ iburst는 독립 지시어가 아니라 server 또는 pool 명령어의 옵션입니다. 반드시 서버 주소 뒤에 붙여야 합니다.
1# 잘못된 예
2# pool 2.centos.pool.ntp.org
3iburst # ❌ 단독 라인 — 문법 오류
4
5# 올바른 예
6server time.google.com iburst # ✅ server 뒤에 옵션으로 추가
7pool 2.centos.pool.ntp.org iburst # ✅ pool 뒤에도 동일하게Q. 시간이 동기화되었는지 한 번에 확인하는 방법은? #
1timedatectl status | grep -E "synchronized|NTP"
2# System clock synchronized: yes
3# NTP service: active✅ 요약 #
| 단계 | 명령어 |
|---|---|
| 설치 | dnf install chrony |
| 설정 파일 편집 | vi /etc/chrony.conf |
| 기존 pool 주석, 새 server 추가 | server [IP] iburst |
| 서비스 재시작 | systemctl restart chronyd |
| 동기화 상태 확인 | chronyc sources -v |
| 즉시 강제 동기화 | chronyc makestep |
| 타임존 설정 | timedatectl set-timezone Asia/Seoul |