WSUS 服务器:从 0 到 1

为内网部署一台 WSUS(Windows Server Update Serivces) 服务器是一个不错的想法,可提升更新部署的速度,提升内网设备的安全性。本次内网部署虽然仍存在未解决的问题,整体相对而言还是成功的。

先决条件

  • Windows Server 2016 及以上版本(旧版本的 Windows Server 自身已经没有或即将无法接收更新,不建议使用);
  • 建议为存储更新另外准备一个硬盘,大小最好不要低于 4TB,根据你所选择同步的产品的不同,存储要求亦不同;
  • 稳定且高速的互联网连接,如果互联网质量不好,同步阶段将会非常痛苦;

配置

其实这一块在微软官方文档里写的很全面了,这里只对其中遇到的问题单独拎出来讲一讲。相关配置文档见 https://docs.microsoft.com/zh-cn/windows-server/administration/windows-server-update-services/deploy/deploy-windows-server-update-services

同步的产品

在选择需要同步的产品时,请务必根据实际需求来选择(除非你的磁盘空间非常富裕),不要选择已经停止维护的操作系统和软件(如 Windows XP / Vista / 7, Office 2007 / 2010 等),切记不可 一键全选。关于需要同步的产品分类,如无需求,不建议同步驱动程序相关。

这里还需要说一句,如果为终端设备配置了 WSUS 服务器,请确保你所选择产品可以基本满足用户的需求,频繁让用户通过“联机查找‘Micrsoft 更新’中的更新”功能查找更新,体验并不友好。如果内网终端无法连接到互联网,也即无法手动连接到微软服务器进行更新,缺失的产品更新会使终端用户处于安全风险之中。

存储

建议为更新存储单独分配一块盘,或者单独划一个分区。4TB 是在同步所有当前正在维护的产品(Windows 8.1~11, Windows Server 2012~2022, Office 2016~2021 LTSC)下载更新的最低存储要求。如有条件,使用 iSCSI 挂载一块盘是个不错的选择。

Office 更新

由于 Office 2019 / 2021 LTSC 和 Microsoft 365 采用了 C2R 的部署方式,不同于以前的 MSI 部署模式,默认所有更新均是从 Office CDN 中获取,且对 Windows 的更新服务器设置并不会在 Office 中生效。如需指定从 WSUS 下载更新,请考虑在部署 Office 时使用自定义的 configuration.xml下载并导入组策略模版并进行设置。进一步阅读这个文档可了解如何设置。

同步的连接质量

同步和下载时,会使用了不同的域名,在中国大陆,连接质量也有很大区别。同步仅下载更新的元数据、EULA 等信息,其使用的域名 https://sws.update.microsoft.com 的连接质量相对较差。在初始化拉取产品列表和首次同步拉取所选产品时,请确保内网防火墙不会掐断长连接,或直接为该域名设置规则代理。下载使用的域名与同步不同,但基本上都是 *.windowsupdate.com,连接质量很好,一般无需干预即可全速下载。

首次同步,建议将 BITS 调整到前台工作,该设置将会占满带宽进行下载,对需要同步大量文件的初次同步非常友好。在 PowerShell 中,输入以下内容,使该配置生效。

1$Configuration=(Get-WSUSServer).GetConfiguration()
2$Configuration.BitsDownloadPriorityForeground=$True
3$Configuration.Save()

同步频次

Microsoft Defender 通过 Windows Update 进行更新,建议保证每日 3-4 次的更新频率,这个同步频次不会对系统造成过大的网络负担,同时可保证安全更新可及时部署到设备。

数据库维护与迁移

如在添加角色时不进行任何设置,WSUS 默认会使用 WID(Windows Internal Database) 作为数据库实例,实际上是个精简版的 SQL Server 2014,版本相对落后,性能亦相对较差。随着时间的推移,同步的更新数量越来越多、管理的计算机越来越多,接收的计算机状态、同步日志等会非常庞大。你可使用 SSMS,通过命名管道 \\.\pipe\MICROSOFT##WID\tsql\query 连接到该内置数据库(名称为 SUSDB )进行管理。如果你想迁移到 MSSQL,你可以阅读微软官方文档,操作步骤简单易懂。

自动审批策略与过时的更新

现代的 Windows 更新主要包括月度累积更新、服务堆栈更新(已被合入累积更新)、大版本更新、Microsoft Edge 更新等。这些更新基本上都是可以使用新版本取代旧版本的,你可以在审批时,一次性拒绝所有被取代更新。这些更新在 WSUS 控制台的描述中具有如下的提示:

此更新被另一个更新取代。在拒绝任何被取代的更新之前,我们建议你确保任何计算机都不再需要它。为此,请先审批进行取代的更新。

与此相对应的,你可以在最新的更新(也就是取代旧版本的更新)的描述中看到如下的提示:

此更新取代另一个更新。在拒绝任何被取代的更新之前,我们建议你确保任何计算机都不再需要它。为此,请先审批进行取代的更新。

你可以直接审批所有最新的更新,并拒绝所有被取代的更新。这可为首次全量同步节省时间与存储空间。

建议在选项中,配置自动审批策略。配置后,后续的所有更新将会按照策略设置,自动审批。同时建议定期运行“服务器清理向导”,定期清理过时和被取代的更新。

设置强制 HTTPS

这个问题我至今没有解决,在按照官方最佳实践配置 HTTPS 后,我就无法通过 WSUS 控制台管理我的更新服务了。读者如有配置相关经验和最佳实践,欢迎通过邮件与我交流

后记

目前我部署的内网 WSUS 服务器仍在完成第一次同步,截止本文写作完成,还需下载 40 GB 的数据。总体来说,部署 WSUS 服务的最佳实践是配合 AD 或 MDM 等解决方案,下发配置到终端以配置使用 WSUS 更新,考虑到当前网络环境暂时不允许我这么做,提供一个简明的文档供用户自己设置,也不失为一个不错的选择。对于数据中心,设置好模版 VM + 手动解决存量 VM 可解决配置问题,虽不优雅,但也能在一定程度上推进终端及时更新。