KVM安装windows server 2016并启用WSUS服务

17:12 2017/2/10 create @shuiche80

Introduction

最近新开了些windows server 2012 R2的kvm虚机,想着来配置一下wsus。我的WSUS服务器是3.2版本,也就是win 2k8r2上搭建的,客户端配置完成后可以进行更新没有什么问题,但在WSUS 3.2控制台上看到的计算机版本却不匹配,本来是windows server 2012 r2却显示的是windows server 2000看着还真不顺眼。一不做二不休,反正新版的windows server 2016已经出来了,何不拿来搭个新的WSUS10.0呢。

URL

01. Installing & Configuring WSUS in Windows Server 2016
02. Windows Server 2012 R2 WSUS 部署
03. 曾垂鑫的技术专栏
04. wuauclt实用工具

ENV

Role IP OS Other
Host 10.0.0.9 centos6.5 iptables&selinux disabled
WSUS KVM Guest 10.0.0.19x windows server 2016 4C/8G/copy host cpu configuration; add a cdrom for attach the virtio-win driver

Principle

WSUS服务使用端口 WSUS版本 OS版本 需要的第三方服务 其它
TCP 80(http)/443(https) or 8530(http)/8531(https) WSUS 3.2 win2k8r2sp1 IIS 客户端和WSUS服务器之间,上游WSUS服务器与下游WSUS服务器之间默认使用80/443端口
TCP 80(http)/443(https) or 8530(http)/8531(https) WSUS 10.0 win2k16 IIS 客户端和WSUS服务器之间,上游WSUS服务器与下游WSUS服务器之间都默认使用8530/8531端口,上游WSUS服务器与微软更新服务器之间还是使用80/443端口。实际上从WSUS4.0(windows server 2012)开始客户端和WSUS服务器之间就已经默认使用8530/8531端口了。

Setup

新建windows server 2016虚机

这里的虚机是用virt-manager图形方式建立的,当然你也可以使用virt-install来建立,或者在你的云平台上直接建立也是OK的哈。

步骤:

  • 4C/8G/500G(virtio)
  • 网卡(virtio)
  • cdrom1:windows server 2016 iso
  • cdrom2:virtio-win statle iso
  • CPU必须copy host cpu configuration(否则会卡在引导界面,centos7.x中可能不需要这样的设置)
  • 安装过程中virtio硬盘驱动从cdrom2选择
  • 安装完成进入OS后从cdrom2更新virtio网卡驱动
  • 激活windows(可能需要先禁用windows defender)
  • 配置静态ip地址
  • 取消IPV6支持(可选)
  • 启用远程桌面
  • 关闭UAC
  • 关闭防火墙
  • 启用桌面通用图标,勾选计算机和网络
  • 禁止服务器管理器自启动
  • 关闭IE增强的安全配置(服务器管理器的本地服务器属性中)
  • 更改计算机名称
  • 重启服务器

安装WSUS服务

步骤:

  • 打开服务器管理器,添加角色和功能
  • 选择安装类型,基于角色或基于功能的安装
  • 选择服务器角色,勾选windows server更新服务
  • 选择功能,默认,next
  • windows server更新服务,默认,next
  • 选择角色服务,默认勾选“WID Connectivity”和“WSUS服务”
  • 内容位置选择,选择一个存储windows update包的本地目录(在C盘新建WSUS updates目录,如果你有多个分区,这个目录可以建立在其它分区上,只要空间够大就好)
  • IIS,next
  • 确认安装所选内容,勾选“如果需要,自动重新启动目标服务器”,安装
  • 安装进度,完成后点击关闭
  • 服务器管理器,安装提示的WSUS服务部署后配置任务
  • 完成安装

打开服务器管理器
选择安装类型
勾选windows server更新服务
勾选windows server更新服务
选择功能,默认,next
windows server更新服务,默认,next
选择角色服务,默认勾选“WID Connectivity”和“WSUS服务”
内容位置选择,选择一个存储windows update包的本地目录(新建WSUS updates目录)
IIS,next
确认安装所选内容,勾选“如果需要,自动重新启动目标服务器”,安装
确认安装所选内容,勾选“如果需要,自动重新启动目标服务器”,安装
安装进度
安装完成
服务器管理器,安装提示的WSUS服务部署后配置任务
服务器管理器,安装提示的WSUS服务部署后配置任务

配置WSUS服务

步骤:

  • 服务器管理器->工具->windows server更新服务
  • 进入windows server update services向导,next
  • 不加入“Microsoft更新改善计划”,next
  • 选择上游服务器,从Microsoft更新中进行同步,next
  • 指定代理服务器,next(如果你使用的代理服务器,这里需要给出代理服务器的信息)
  • 连接到上游服务器,开始连接(这里需要等待一段时间),完成后,点击next
  • 选择语言,默认选择“英语”和“中文(简体)”(当然你可以只选择中文),next
  • 选择产品,这里选择Office2010,Office2016,Windows10,windows7,windows server 2008 R2,windows server 2012 R2,Windows Server 2016,next
  • 选择分类,默认选择Upgrades,安全更新程序,定义更新,关键更新程序,next
  • 配置同步计划,选择自动同步,第一次同步0:00:00,每天同步3次,next
  • 完成,忽略初始同步(完成后我们在里面同步一样的),next
  • 完成

服务器管理器->工具->windows server更新服务
进入windows server update services向导,next
不加入“Microsoft更新改善计划”,next
选择上游服务器,从Microsoft更新中进行同步,next
指定代理服务器,next(如果你使用的代理服务器,这里需要给出代理服务器的信息)
连接到上游服务器,开始连接(这里需要等待一段时间),完成后,点击next
连接到上游服务器,开始连接(这里需要等待一段时间),完成后,点击next
选择语言,默认选择“英语”和“中文(简体)”,next
选择产品,这里选择Office2010,Office2016,Windows10,windows7,windows server 2008 R2,windows server 2012 R2,Windows Server 2016,next
选择分类,默认选择Upgrades,安全更新程序,定义更新,关键更新程序,next
配置同步计划,选择自动同步,第一次同步0:00:00,每天同步3次,next
完成,忽略初始同步(完成后我们在里面同步一样的),next
完成

管理WSUS服务

步骤:

  • 同步,因为我们前面没有做初始同步,所以这里我们可以立即同步,需要注意的是,手动同步可能会同步失败,没关系多同步几次或者等待自动同步就好了
  • 选项,更新文件和语言,重新指定更新文件存储方式和下载哪些语言的更新包,这里正好我们取消英文的更新包,反正日常用的都是简体中文的
  • 选项,自动审批,勾选默认的自动审批规则,运行规则
  • 选项,计算机,这里是选择如何为客户端计算机进行分组,我们可以选择使用默认的更新服务控制台方式,或者使用组策略或注册表方式(这种方式建议域环境下使用,需要客户端配合)
  • 选项,电子邮件通知,无非就是设置接收邮箱,发送邮件服务器之类的,设置完成后注意最好发送测试邮件进行测试
  • 报告,这里面可以生成各种报告,首次运行的时候会提示你安装Microsoft Report Viewer 2012,在安装Microsoft Report Viewer 2012的时候还会提示你安装Microsoft System CLR Types for SQL Server 2012,而这个包在Microsoft SQL Server 2012 SP1包中,名为CHS\x64\SQLSysClrTypes.msi,都下载完成后依次运行就可以查看和导出报告了
  • 计算机,所有计算机,右键添加计算机组,这里可以手动添加多个计算机分组

WSUS客户端设置

通常来说如果你是域环境,有域控那就方便多了,直接在域控上新建WSUS组策略,然后设置组策略:启用WSUS自动更新;指定更新服务器(注意端口8530);启用非管理员接收更新;指定客户端在WSUS服务器上的分组等,最后刷新域策略并更新组策略就可以批量完成客户端计算机的WSUS配置了。实际上我这里没有域环境,客户端数量不大但也不少,如果一个个手动设置组策略还是非常原始的,其实我们都知道组策略最终的修改还是体现在我们的注册表中,所以我们提取注册表修改项就好了。需要注意是,因为我们现在有了DNS服务器了,所以指定WSUS服务器的时候最好使用域名。下面我先介绍最简单的在客户端修改组策略来配置WSUS的方法(适用于少量客户端),然后再介绍使用注册表文件导入WSUS配置的方法(适用于较多客户端)。

客户端修改组策略配置WSUS

步骤:

  • gpedit.msc
  • 本地计算机策略,计算机配置,管理模板,windows组件,windows update/windows 更新
  • 配置自动更新,已启用,3-自动下载并通知安装,确定
  • 指定Intranet Microsoft更新服务位置,已启用,设置检测更新的Intranet更新服务:http://wsus.yoursite.com:8530,设置Intranet统计服务器:http://wsus.yoursite.com:8530,确定
  • 自动更新检测频率,已启用,间隔10小时,确定
  • 允许非管理员接收更新通知,已启用,确定
  • 允许自动更新立即安装,已启用,确定
  • 对于有已登录用户的计算机,计划的自动更新安装不执行重新启动,已启用,确定
  • 重新计划自动更新计划的安装,已启用,启动30分钟后,确定
  • 允许客户端目标设置,已启用,此计算机的目标组名称(这个要看你wsus服务器计算机组的设置),确定(可选)
  • 关闭组策略编辑器
  • gpupdate /force,使组策略立即生效
  • wuauclt /detectnow,立即检查更新

使用注册表文件简单配置WSUS

如果我们的客户端计算机不多,我们可以在客户端计算机上使用组策略来配置WSUS,但是一旦客户端计算机数量增加之后再使用本地组策略来设定WSUS显然效率是十分低下的。其实我们可以通过修改注册表的方法来设定WSUS,当然我们不会笨到在每个客户端上使用注册表编辑器来设置WSUS,我们只需要将设置好后的相关注册表项导出到一个reg文件中,再在其它的客户端中双击导入这个reg文件就可以了。根据客户端常用的两种自动更新方式,这里给出了“自动下载并通知安装”和“自动下载并计划安装”的reg文件内容,具体内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#自动下载并通知安装.reg文件内容
Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate]
"WUServer"="http://wsus.yoursite.com:8530"
"WUStatusServer"="http://wsus.yoursite.com:8530"
"ElevateNonAdmins"=dword:00000001

[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU]
"NoAutoUpdate"=dword:00000000
"AUOptions"=dword:00000003
"ScheduledInstallDay"=dword:00000000
"ScheduledInstallTime"=dword:00000003
"UseWUServer"=dword:00000001
"DetectionFrequencyEnabled"=dword:00000001
"DetectionFrequency"=dword:0000000a
"AutoInstallMinorUpdates"=dword:00000001
"NoAutoRebootWithLoggedOnUsers"=dword:00000001
"RescheduleWaitTimeEnabled"=dword:00000001
"RescheduleWaitTime"=dword:0000001e

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run]
"WSUS Update"="wuauclt.exe /detectnow"

#自动下载并计划安装.reg文件内容
Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate]
"WUServer"="http://wsus.yoursite.com:8530"
"WUStatusServer"="http://wsus.yoursite.com:8530"
"ElevateNonAdmins"=dword:00000001

[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU]
"NoAutoUpdate"=dword:00000000
"AUOptions"=dword:00000004
"ScheduledInstallDay"=dword:00000000
"ScheduledInstallTime"=dword:00000003
"UseWUServer"=dword:00000001
"DetectionFrequencyEnabled"=dword:00000001
"DetectionFrequency"=dword:0000000a
"AutoInstallMinorUpdates"=dword:00000001
"NoAutoRebootWithLoggedOnUsers"=dword:00000001
"RescheduleWaitTimeEnabled"=dword:00000001
"RescheduleWaitTime"=dword:0000001e

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run]
"WSUS Update"="wuauclt.exe /detectnow"

Troubleshooting

当我们配置了客户端计算机使用WSUS服务器进行自动更新之后,你会发现可能会有各种问题出现:客户端无法检测到更新并报告错误;服务器端无法发现客户端,或者发现的客户端一致处于尚未报告的状态等等。这个时候我们就需要进行排障,下面介绍了两种常用的WSUS排障的方法。

wuauclt命令

wuauclt.exe = A Windows Update AutoUpdate Client,Background process which checks with Microsoft website for updates to the operating system.

wuauclt.exe命令有几个常用的参数:
/detectnow:让client立即与WSUS Server进行联系,检查是否有更新
/reportnow:立即向server报告状态(==此描述不一定准确==),如果你在server上发现客户端总是显示“尚未报告”,可以试一下这个参数
/resetauthorization:client使用了cookie储存一些信息,如果这些cookie时效过期,那可能就需要使用该参数重新获取,一般配合/detectnow一起使用
/updatenow:立即更新(==此描述不一定准确==),有人用它来做win10的周年更新

WSUS客户端和服务器端日志

对于排障来说,日志是必备的,client日志文件:C:\Windows\WindowsUpdate.log,服务器端日志文件:C:\Program Files\Update Services\LogFiles\SoftwareDistribution.log。当我们在debug过程中可以随时查看这些文件获取更多详细的输出信息,这更有利于我们更快地排除故障。

最后

因为我这里没有域环境,加之之前的一些windows kvm guest设置WSUS服务器地址的时候使用的是IP地址而且默认用的80端口,所以如果要将它们更换到新的WSUS服务器会很麻烦,索性先保留旧的WSUS 3.2服务器虚机,让它和新的WSUS 10.0服务器虚机共存。后期新增的windows kvm guest的自动更新将设置到新的WSUS服务器上并且使用域名和8530端口的方式。当然要先在DNS服务器上增加WSUS服务器域名的解析哦。