업데이트 다운로드가 0%에서 멈추는 현상
Windows Server 2016(Windows 10 RTM)의 Windows Update 서비스에서 흥미로운 "버그"가 발견되었습니다. 내부 WSUS 서버를 사용하지 않고 인터넷상의 Microsoft Update 서버에서 직접 업데이트를 받아야 하는 환경에서, 프록시 서버를 경유해 업데이트를 다운로드하면 진행률이 0%에서 멈추는 현상(Downloading Updates 0%)이 발생합니다.

흥미로운 점은 Windows Update 클라이언트가 업데이트 메타데이터(필요한 업데이트 목록)는 정상적으로 받아오지만, 정작 업데이트 파일은 하나도 다운로드하지 못한다는 것입니다. Get-WindowsUpdateLog cmdlet을 사용해 WindowsUpdate.log를 생성한 후 내용을 확인해 보겠습니다.
2018/11/11 12:32:47.8312332 123 3542 DownloadManager BITS job initialized: JobId = {E3BB42A1C-42B4-221B-1320-8AB433CE1965E}
2018/11/11 12:32:47.8436054 123 3542 DownloadManager Downloading from https://download.windowsupdate.com/c/msdownload/update/software/defu/2017/09/nis_engine_1af0e4b80bf4028f8dac56ebf186b392e4e72486.exe to C:\Windows\SoftwareDistribution\Download\f71ddf93ec2d087c819cf75c55ddfda2\1af0e4b80bf4028f8dac56ebf186b392e4e72486 (full file)
2018/11/11 12:32:47.8452605 123 3542 DownloadManager New download job {E3BB42A1C-42B4-221B-1320-8AB433CE1965E} for UpdateId F608EDA4-2E84-433A-A8C9-8117411F91A8.200
2018/11/11 12:32:47.8545291 123 3542 DownloadManager Download job E3BB42A1C-42B4-221B-1320-8AB433CE1965E resumed.
2018/11/11 12:32:47.8734449 123 3542 DownloadManager Failed to connect to the DO service; (hr = 80040154)
2018/11/11 12:32:47.8734462 123 3542 DownloadManager GetDOManager() failed, hr=80246008, hrExtended=80040154
2018/11/11 12:32:47.8734472 123 3542 DownloadManager Failed creating DO job with hr 80246008
2018/11/11 12:32:47.8772521 123 3542 DownloadManager DO download failed with error 80246008[Extended: 80040154], falling back to BITS and retrying with new Download Job.로그에서 확인할 수 있듯이 BITS가 80246008 오류(SUS_E_DM_FAILTOCONNECTTOBITS)로 인해 파일 다운로드에 실패하고 있습니다.
원인: WinHTTP 프록시 설정 누락
조사 결과, Windows Server 2016 RTM(10.0.14393)에서는 Internet Explorer의 프록시 설정이 이전 Windows 버전과 동일한 방식으로 작동하지 않는 것이 원인이었습니다. Windows Update 클라이언트가 프록시를 통해 인터넷에 접속하려면 winhttp에 대한 시스템 수준 프록시를 명시적으로 설정해 주어야 합니다.

다음 명령으로 현재 WinHTTP 프록시 설정을 확인할 수 있습니다.
netsh winhttp show proxy현재 WinHTTP 프록시 설정은 다음과 같습니다.
Direct access (no proxy server) — 프록시 서버 없이 직접 접속 중인 상태입니다.

보시다시피 WinHTTP용 프록시가 설정되어 있지 않습니다. Internet Explorer에는 사용자 수준에서 프록시가 구성되어 있지만, 시스템 수준(WinHTTP)에는 설정이 없는 상태이며, 바로 이 구성이 Windows Update 연결 실패의 원인입니다.
해결 방법: WinHTTP 프록시 설정
다음과 같이 WinHTTP에 시스템 프록시를 설정할 수 있습니다.
netsh winhttp set proxy proxy-server="192.168.100.24:3128" bypass-list="*.woshub.com"
또는 Internet Explorer의 설정을 그대로 가져오는 방법도 있습니다(단, IE 프록시 설정은 미리 수동으로 구성하거나 GPO로 배포해 두어야 합니다).
netsh winhttp import proxy source=ie프록시 설정 변경 후에는 Windows Update 서비스를 재시작합니다.
Restart-service wuauserv
WinHTTP에 프록시를 지정한 후 Windows Server 2016은 Microsoft Update 서버에서 정상적으로 업데이트를 다운로드하기 시작했습니다.
Windows 10 RTM 및 최신 업데이트 참고 사항
동일한 문제는 Windows 10 RTM 버전(Windows Update Agent 10.0.14393.0)에서도 나타납니다.
참고: Microsoft Update Catalog에서 최신 누적 업데이트(2016년 11월 이후 배포분)를 수동으로 다운로드해 설치하면 WinHTTP 프록시를 설정하지 않아도 업데이트가 정상적으로 다운로드·설치됩니다. Microsoft에 따르면 이 버그는 Windows Update Agent 10.0.14393.187 이상에서 수정되었습니다.
또한 인증을 요구하는 프록시 서버를 통해서는 업데이트를 받을 수 없다는 점에도 유의해야 합니다. Windows Update 클라이언트는 프록시 인증을 지원하지 않습니다(PowerShell과 달리). Windows Update가 정상 작동하려면 프록시 서버에서 Microsoft Update 서버에 대한 익명 접근을 허용해야 하며, 허용해야 할 URL 목록은 다음과 같습니다.
- *.microsoft.com
- microsoft.com
- *.windowsupdate.com
- windowsupdate.com
- *.trafficmanager.net
- trafficmanager.net