Microsoft MVP성태의 닷넷 이야기
글쓴 사람
정성태 (techsharer at outlook.com)
홈페이지
첨부 파일
 

(시리즈 글이 2개 있습니다.)
개발 환경 구성: 283. Hyper-V 내에 구성한 Active Directory 환경의 시간 구성 방법
; https://www.sysnet.pe.kr/2/0/10931

오류 유형: 375. Hyper-V 내에 구성한 Active Directory 환경의 시간 구성 방법 - 두 번째 이야기
; https://www.sysnet.pe.kr/2/0/11136




Hyper-V 내에 구성한 Active Directory 환경의 시간 구성 방법

Hyper-V 물리 서버에 VM으로 AD 서버 구성하고 그 AD에 Hyper-V의 물리 서버를 구성원으로 등록시켰습니다. 그랬더니... 시간이 안 맞네요. ^^; 관련해서 다음의 이야기들이 있습니다.

Hyper-V Time Sync for VM Domain Controller
; http://serverfault.com/questions/486593/hyper-v-time-sync-for-vm-domain-controller

시간이 안 맞는 물리 서버에 다음과 같이 실행하면 기준이 되는 시간 서버를 알 수 있습니다.

C:\Windows\system32>net time /SET /Y
Current time at \\MYAD is 2016-01-07 오후 3:04:30

The command completed successfully.

물리 서버도 AD에 참여하고 있기 때문에 당연히 Active Directory가 설치된 MYAD 서버를 기준으로 삼고 있군요. ^^ 그런데, 정작 MYAD PDC 서버는 시간 기준을 Hyper-V 측의 시간으로 잡고 있는 것을 다음의 명령으로 확인할 수 있습니다.

C:\Windows\system32>w32tm /query /source
VM IC Time Synchronization Provider

이 때문에 시간이 꼬리 물기식으로 순환하면서 점점 느려지게 되는 것입니다. 물리 서버는 VM으로 설치된 AD의 시간을 기준으로 하고, VM은 다시 물리 서버의 시간과 연계해 주는 "Hyper-V Time Synchronization Service"를 기준으로 하는 것입니다.

이 연관 관계를 끊어줘야 하는데요. 어쨌든 AD 상의 도메인 컨트롤러 서버가 AD 멤버들의 시간을 관리하는 것이 좋기 때문에 Hyper-V 측으로부터의 시간 전달 서비스를 안 받도록 해야 합니다. 이를 위해 AD PDC VM에서 다음과 같은 레지스트리 명령을 내려줍니다.

C:\Windows\system32>reg add HKLM\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\VMICTimeProvider /v Enabled /t reg_dword /d 0

Value Enabled exists, overwrite(Yes/No)? y
The operation completed successfully.

그럼, AD는 더 이상 Hyper-V 물리 서버로부터 시간을 연계하지 않습니다. 하지만, 이렇게 되면 Active Directory 내의 구성원 간에는 시간이 단일화될 수 있어도 자칫 틀린 시간으로 맞춰질 수 있습니다. 따라서, 기준이 되는 별도의 NTP 서버를 지정해 주는 것이 좋은데요. 이럴 때 인터넷 상의 유명한 NTP 서버를 이용할 수 있습니다. 제 경우에는 pool.ntp.org 서버를 지정해 주었습니다.

C:\Windows\system32>net stop w32time

C:\Windows\system32>w32tm /config /syncfromflags:manual /manualpeerlist:"0.pool.ntp.org, 1.pool.ntp.org, 2.pool.ntp.org"
C:\Windows\system32>w32tm /config /reliable:yes

C:\Windows\system32>net start w32time

설정이 잘 되었는지 다음의 명령으로 확인합니다.

C:\Windows\system32>w32tm /query /configuration
[Configuration]

...[생략]...

[TimeProviders]

...[생략]...
Type: NTP (Local)
NtpServer: 0.pool.ntp.org, 1.pool.ntp.org, 2.pool.ntp.org (Local)

NtpServer (Local)
DllName: C:\Windows\system32\w32time.dll (Local)
Enabled: 1 (Local)
InputProvider: 0 (Local)
AllowNonstandardModeCombinations: 1 (Local)

VMICTimeProvider (Local)
DllName: C:\Windows\System32\vmictimeprovider.dll (Local)
Enabled: 0 (Local)
InputProvider: 1 (Local)

또는 간단하게 다음의 명령으로도 가능합니다.

C:\Windows\system32>w32tm /query /source
0.pool.ntp.org,

이제 잠시 후부터 전체적인 시간 설정이 정상적으로 동기화하는데, 기다리지 말고 다음의 명령으로 곧바로 동기화시켜도 됩니다.

C:\Windows\system32>w32tm /resync /force
Sending resync command to local computer
The command completed successfully.




참고로, 특정 Active Directory의 PDC 서버 이름을 찾고 싶다면 다음과 같은 명령어를 내려도 됩니다. ^^

C:\Windows\system32>netdom /query fsmo
Schema master               myad.testad.com
Domain naming master        myad.testad.com
PDC                         myad.testad.com
RID pool manager            myad.testad.com
Infrastructure master       myad.testad.com
The command completed successfully.





[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]







[최초 등록일: ]
[최종 수정일: 2/5/2025]

Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
by SeongTae Jeong, mailto:techsharer at outlook.com

비밀번호

댓글 작성자
 



2019-03-18 01시20분
[ad 환경 초보자] 안녕하세요. 정성태님 글을 보고 답변을 얻을 수있을거 같아서 질문드립니다.
현재 저의 ad 환경은 위에 글과 같이 Hyper-V 물리 서버위에 VM으로 AD 서버 구성하고 windows 2012 r2가 깔렸습니다.
제가 알고 싶은건 Hyper-V 물리 서버의 시간을 가져다 VM으로 AD 서버에서 보고 싶은데 그렇게 하려면 어떠한 방법이 있어야 하나요?
가령 vm위의 ad 환경의 시간이 변화 했는데도 불구하고 hyper-v의 물리 서버 시간을 볼 수 있는 방법입니다.
[guest]
2019-03-18 01시40분
[ad 환경 초보자] 혹은 Hyper-V Time Synchronization Service를 중지 했다가 다시 실행 시킬 수 있는 명령어 좀 알려주면 감사하겠습니다.
[guest]
2019-03-18 03시58분
이 글에서는 AD VM의 Host 서버 참조를 끊은 것인데요, 마찬가지 방법으로 Host 서버의 AD VM 시간 참조를 끊으면 됩니다. (방법은 이미 글에 있습니다.)

"Hyper-V Time Synchronization Service" 서비스 재시작은 net stop/start 명령어를 함께 사용하시면 됩니다.

net stop vmictimesync
net start vmictimesync
정성태

... 16  17  18  19  20  21  22  23  24  25  26  27  28  [29]  30  ...
NoWriterDateCnt.TitleFile(s)
13212정성태1/8/202313564기타: 85. 단정도/배정도 부동 소수점의 정밀도(Precision)에 따른 형변환 손실
13211정성태1/6/202313324웹: 42. (https가 아닌) http 다운로드를 막는 웹 브라우저
13210정성태1/5/202312103Windows: 219. 윈도우 x64의 경우 0x00000000`7ffe0000 아래의 주소는 왜 사용하지 않을까요?
13209정성태1/4/202311535Windows: 218. 왜 윈도우에서 가상 메모리 공간은 64KB 정렬이 된 걸까요?
13208정성태1/3/202312372.NET Framework: 2086. C# - Windows 운영체제의 2MB Large 페이지 크기 할당 방법파일 다운로드1
13207정성태12/26/202212853.NET Framework: 2085. C# - gpedit.msc의 "User Rights Assignment" 특권을 코드로 설정/해제하는 방법 [1]파일 다운로드1
13206정성태12/24/202213016.NET Framework: 2084. C# - GetTokenInformation으로 사용자 SID(Security identifiers) 구하는 방법 [4]파일 다운로드1
13205정성태12/24/202212195.NET Framework: 2083. C# - C++과의 연동을 위한 구조체의 fixed 배열 필드 사용 (2)파일 다운로드1
13204정성태12/22/202211374.NET Framework: 2082. C# - (LSA_UNICODE_STRING 예제로) CustomMarshaler 사용법파일 다운로드1
13203정성태12/22/202211807.NET Framework: 2081. C# Interop 예제 - (LSA_UNICODE_STRING 예제로) 구조체를 C++에 전달하는 방법파일 다운로드1
13202정성태12/21/202213150기타: 84. 직렬화로 설명하는 Little/Big Endian파일 다운로드1
13201정성태12/20/202214260오류 유형: 835. PyCharm 사용 시 C 드라이브 용량 부족
13200정성태12/19/202212256오류 유형: 834. 이벤트 로그 - SSL Certificate Settings created by an admin process for endpoint
13199정성태12/19/202212300개발 환경 구성: 656. Internal Network 유형의 스위치로 공유한 Hyper-V의 VM과 호스트가 통신이 안 되는 경우
13198정성태12/18/202212540.NET Framework: 2080. C# - Microsoft.XmlSerializer.Generator 처리 없이 XmlSerializer 생성자를 예외 없이 사용하고 싶다면?파일 다운로드1
13197정성태12/17/202212079.NET Framework: 2079. .NET Core/5+ 환경에서 XmlSerializer 사용 시 System.IO.FileNotFoundException 예외 발생하는 경우파일 다운로드1
13196정성태12/16/202212687.NET Framework: 2078. .NET Core/5+를 위한 SGen(Microsoft.XmlSerializer.Generator) 사용법
13195정성태12/15/202213037개발 환경 구성: 655. docker - bridge 네트워크 모드에서 컨테이너 간 통신 시 --link 옵션 권장 이유
13194정성태12/14/202213305오류 유형: 833. warning C4747: Calling managed 'DllMain': Managed code may not be run under loader lock파일 다운로드1
13193정성태12/14/202213449오류 유형: 832. error C7681: two-phase name lookup is not supported for C++/CLI or C++/CX; use /Zc:twoPhase-
13192정성태12/13/202213362Linux: 55. 리눅스 - bash shell에서 실수 연산
13191정성태12/11/202215277.NET Framework: 2077. C# - 직접 만들어 보는 SynchronizationContext파일 다운로드1
13190정성태12/9/202216786.NET Framework: 2076. C# - SynchronizationContext 기본 사용법파일 다운로드1
13189정성태12/9/202216889오류 유형: 831. Visual Studio - Windows Forms 디자이너의 도구 상자에 컨트롤이 보이지 않는 문제
13188정성태12/9/202215317.NET Framework: 2075. C# - 직접 만들어 보는 TaskScheduler 실습 (SingleThreadTaskScheduler)파일 다운로드1
13187정성태12/8/202215287개발 환경 구성: 654. openssl - CA로부터 인증받은 새로운 인증서를 생성하는 방법 (2)
... 16  17  18  19  20  21  22  23  24  25  26  27  28  [29]  30  ...