Windows NTP Server/Client (w32tm) 완벽 가이드

Juhwan Song·2025년 2월 25일
0
post-thumbnail

들어가며

Windows, 특히 Active Directory를 사용하는 환경에서 시간 동기화는 매우 중요한 작업이다. 도메인 컨트롤러와 클라이언트 간의 시간이 일치하지 않으면 KERBEROS/NTLM 인증에 실패할 수 있고, DC와 클라이언트 사이의 동기화가 끊어질 수 있다.

AD 환경에서 w32tm을 구성하기 위한 가이드는 많이 있지만, 해당 설정들이 실제로 어떠한 영향을 미치는지, 트러블슈팅과 디버깅을 위해서는 어떤 방법들을 사용할 수 있는지 설명하는 문서는 거의 없어 이번 포스트를 작성하게 되었다.

w32tm 명령어 목록

일부 명령어는 관리자 권한을 요구하기 때문에, 명령 프롬프트를 관리자 권한으로 실행하는 것이 바람직하다.

w32tm의 설정 옵션에는 서버 옵션과 클라이언트 옵션이 혼재되어 있기 때문에, 개별 설정을 Server/Client로 구분하였다.


기본 형식: w32tm [/명령어]

  • /config: w32tm의 설정을 변경한다.
    • /reliable: [yes|no] 자신을 신뢰할 수 있는 시간 소스로 설정한다 (Server)
    • /syncfromflag: [NO|DOMHIER|MANUAL] 동기화 대상을 지정한다 (Client)
    • /manualpeerlist: 동기화 할 NTP 서버를 지정한다. <NTP 서버 주소>,<플래그> 꼴로 구성되며, 여러 개의 서버를 구성할 경우 쌍따옴표("")로 감싸고, 띄어쓰기로 구분한다. (Client)
      • flags (binary): 비트 조합으로 동시 활성화 가능 (e.g. 0x9)
        • 0x1: 표준 쿼리 간격 대신 특수 간격 사용
        • 0x2: 폴백 전용 서버로 사용
        • 0x4: symmetric active peer 모드 사용
        • 0x8: NTP Client 전용 모드 사용
    • /update: 설정 변경을 즉시 반영한다.
  • /resync: 시스템 시간을 다시 동기화한다.
    • /rediscover: 네트워크 구성을 다시 확인하고 동기화한다.
    • /nowait: 재동기화 과정을 기다리지 않고 즉시 return 한다.
  • /monitor: w32tm의 현재 상태를 확인한다.
  • /query: w32tm의 상태와 구성을 확인한다.
    • /source: 현재 동기화 중인 시간 소스를 출력한다.
    • /peers: 시간 동기화 대상 피어를 출력한다.
    • /configuration: w32tm의 현재 구성 정보를 출력한다.
    • /verbose: 다른 명령어와 함께 사용할 경우, 더 많은 정보를 출력한다.

Configuration Best Practice

일반적으로 도메인 컨트롤러와 클라이언트 사이의 시간이 어긋나는 것이 가장 큰 문제가 되기 때문에, 특별한 요구사항이 있지 않은 이상은 도메인 컨트롤러는 외부의 타임 서버를 바라보고, 클라이언트는 도메인 서버를 바라보게 하는 것이 바람직하다.

따라서, 다음과 같이 w32tm을 구성한다.

수동 구성 - 도메인 컨트롤러의 경우

# 구성 초기화
w32tm /unregister
w32tm /register
net start w32time

# NTP 서버와의 시간 동기화 설정
w32tm /config /manualpeerlist:yourNTPserver,0x8 /syncfromflags:manual /reliable:yes /update
w32tm /resync /rediscover

수동 구성 - 클라이언트의 경우

# 구성 초기화
w32tm /unregister
w32tm /register
net start w32time

# 도메인 컨트롤러와의 동기화 설정
w32tm /config /syncfromflags:DOMHIER /update
w32tm /resync /nowait

정책 구성 - 도메인 컨트롤러의 경우

도메인 컨트롤러의 그룹 정책 구성은 Default Domain Controllers Policy에 설정해야 한다. 만약 자체적인 도메인 컨트롤러 정책이 존재한다면, 해당 정책에 구성을 반영한다.

Active Directory Group Policy를 통한 구성은 Computer > Policies > Administrative Templates > System > Windows Time Service 에서 설정할 수 있다.

Group Policy에서 사용하는 용어와 w32tm 명령어의 용어가 다르기 때문에, 설정 시 약간의 주의가 필요하다.

NTP 서버와의 시간 동기화

  • Time Providers > Configure Windows NTP Client
    • NtpServer: manualpeerlist와 같은 형식으로 입력. 단, 여러 서버를 지정할 때 띄어쓰기만 필요하며, 쌍따옴표는 필요하지 않음
    • Type: NTP (w32tmsyncfromflags:MANUAL 과 동일)
    • CrossSiteSyncFlags: 2 (기본값)
  • Time Providers > Enable Windows NTP Client: Enabled
  • Time Providers > Enable Windows NTP Server: Enabled

정책 구성 - 클라이언트의 경우

클라이언트의 정책은 Default Domain Policy를 이용해 구성한다.

도메인 컨트롤러와의 시간 동기화

  • Time Providers > Configure Windows NTP Client
    • Type: NT5DS (w32tmsyncfromflags:DOMHIER 과 동일)
    • CrossSiteSyncFlags: 2 (기본값)
  • Time Providers > Enable Windows NTP Client: Enabled

트러블슈팅 가이드

시간 동기화가 정상적으로 이루어지는지 확인하기 위해서 다음 명령어들을 사용할 수 있다.

# 동기화 상태 확인
w32tm /query /status

# AD 구성요소 모니터링
w32tm /monitor

# 현재 동기화 중인 타임 소스 확인
w32tm /query /source

# 동기화 대상 NTP Peer 확인
w32tm /query /peers

w32time을 통한 시간 동기화가 제대로 이루어지지 않는 경우에는 w32tm 명령어를 통해 트러블슈팅에 필요한 정보들을 수집할 수 있다.

현황 파악

w32tm /monitor 명령어를 통해, 현재 w32tm이 어떤 서버와 동기화를 진행하고 있는지, 기준 시계가 무엇인지 확인한다. 만약 RefID'LOCL' 이라면, 서버와 시간이 동기화되지 않고 있는 것이다.

w32tm /query /source 명령어를 통해 보다 자세한 정보를 확인할 수 있으며, 로컬 시계를 사용 중일 경우 Local CMOS Clock 과 같은 출력을 볼 수 있을 것이다.

그 다음으로는, w32tm /query /configuration /verbose 명령어를 통해 현재 w32tm의 구성 정보를 확인한다.
로컬 구성의 경우, 레지스트리의 HKLM\System\CurrentControlSet\Services\w32time\ 에서도 확인할 수 있다.

이 명령어의 경우 현재 적용된 설정이 로컬에서 구성된 것인지, 그룹 정책으로 구성된 것인지를 보여주기 때문에 트러블슈팅 시 아주 유용하다.

연결 테스트

구성에 문제가 없다면, NTP 서버와의 연결 테스트를 진행할 수 있다.

w32tm /stripchart /packetinfo /samples:5 /computer:<yourNTPserver>

만약 NTP 서버와의 통신이 실패한다면, DNS 조회 및 윈도우 방화벽과 네트워크 방화벽의 구성을 점검해 봐야 한다.

디버그 로깅

보다 자세한 원인 분석이 필요하다면, w32tm의 디버그 로깅 옵션을 활용할 수 있다.

# 디버깅 로그 기록 시작
w32tm /debug /enable /file:C:\Windows\debug\w32tm.log /size:100000000 /entries:300
# 디버깅 로그 기록 종료
w32tm /debug /disable

디버그 모드를 활성화 한 상태로 w32tm /resync 등의 명령어를 실행하여 에러에 대한 보다 자세한 정보를 수집할 수 있다.

Appendix A: Windows Secure Time Seeding 으로 인한 시간 재설정 문제

Microsoft에서는 배터리 방전 후 재시작 된 시스템들이 신뢰할 수 있는 시간 정보를 얻을 수 있는 방법으로, TLS 핸드쉐이크 중 수신하는 타임스탬프를 사용하기로 했습니다.

문제는 이 타임스탬프 값이 TLS 1.2부터는 랜덤한 값으로 기록된다는 점입니다. 이 MS는 이미 이 문제를 알고 있었으며, 이러한 이슈에 대응하기 위한 휴리스틱 알고리즘을 내장했으나, 모든 문제를 해결하지는 못했습니다.

이 문제를 보고하는 다수의 사용자 리포트가 있으며, 한 MS 개발자는 비공식적으로 이 기능을 비활성화 할 것을 권고하기도 했습니다.

AD 환경에서 이 기능을 비활성화하려면, System - Windodws Time Service - Global Configuration Settings 에서 UtilizeSslTimeData0으로 설정하면 됩니다.

기본값은 1 (활성화) 이며, Windows Server 2016 이상과 Windows 10/11 에서 기본적으로 활성화 되어 있습니다.


2025년 4월 26일 부로, Microsoft는 Windows Server 2016 이상의 시스템에서 Secure Time Seeding을 비활성화 할 것을 권고하였습니다.

Windows Server 2025에서는 STS가 기본적으로 비활성화 됩니다.

profile
Virtualization / Network / Storage / Server Hardware and.. Linux

0개의 댓글