关于打印的 RPC 连接更新Windows 11的若干问题,微软官方正式回应解决方法。
由于微软官方在windows更新 22H2 后,改变了部分策略,导致大量共享出来的打印机无法正常打印。适用于:Windows 11版本 22H2 及更高版本的 Windows
Windows 11版本 22H2 引入了对打印组件的更改,这些更改修改了 Windows 计算机在打印或打印相关操作期间相互通信方式。 例如,当您打印到打印服务器或网络上的另一台计算机共享的打印机时,更改将生效。 这些更改是为了进一步提高 Windows 中打印的整体安全性。 RPC 连接设置的默认配置强制使用更新且更安全的通信方法。 家庭用户和企业管理员还可以自定义其环境的设置。
更新详细信息
-
对于打印相关的通信,默认情况下,TCP 上的 RPC 用于客户端 - 服务器通信。
- 通过命名管道使用 RPC 在计算机之间打印相关通信仍可用,但默认情况下处于禁用状态。
- 通过 TCP 使用 RPC 或通过命名管道使用 RPC 进行打印相关通信,可以通过组策略或注册表进行控制。
-
默认情况下,客户端或服务器仅侦听通过 TCP 通过 RPC 传入的连接。
- 可以将 Spooler 服务配置为通过 RPC 通过命名管道侦听传入连接。 这不是默认配置。
- 此行为可以通过组策略或注册表进行控制。
-
使用 TCP 上的 RPC 时,可以将特定端口配置为用于通信,而不是动态端口。
-
所有计算机都加入域并支持 Kerberos 的环境现在可以强制实施 Kerberos 身份验证。
有关配置环境的建议
以下内容包含有关如何正确配置环境以避免或解决计算机间通信问题的建议。
允许通过 TCP 通信进行 RPC
最常见的问题是防火墙规则阻止计算机之间的通信。 若要解决防火墙问题,请执行以下步骤:
- 确保 RPC 终结点映射器端口 (135) 未被阻止。
- 在服务器上打开高范围临时端口 (49152 – 65535) ,或按照 配置 RPC 中的指南使用下面的某些端口 部分来指定 RPC 的端口范围。
有关不同端口及其通过系统服务使用的详细信息,请 参阅 Windows 的服务概述和网络端口要求。
通过命名管道使用 RPC
不建议使用此配置。 但是,如果当前环境中的 RPC over TCP 不是一个选项,则可以使用它。
- 若要启用Windows 11版本 22H2 计算机通过命名管道使用 RPC,而不是通过 TCP 通过 RPC 进行通信,请参阅使用 RPC 通过命名管道进行客户端 - 服务器通信部分。
- 若要启用Windows 11版本 22H2 计算机通过 RPC 通过命名管道和 RPC 通过 TCP 侦听传入连接,请参阅“启用”侦听通过命名管道的 RPC 上的传入连接
还可能需要以下附加配置才能在环境中通过命名管道正确支持 RPC。
- 在服务器/主机上将 RpcAuthnLevelPrivacyEnabled 注册表值设置为 0 。 请参阅 管理 CVE-2021-1678 (KB4599464 的打印机 RPC 绑定更改的部署) (microsoft.com)
- 某些方案还需要在默认禁用的 SMB2/SMB3 中访问来宾。 若要启用它,请参阅 默认情况下在 Windows 中禁用 SMB2 和 SMB3 中的来宾访问
将 RPC 配置为使用某些端口
请参阅 如何将 RPC 配置为使用某些端口,以及如何使用 IPsec 帮助保护这些端口。
- 若要设置动态/排除的端口范围,请运行
netsh int
命令。 - 若要将 IPSec 与 netsh 配合使用,请运行
netsh ipsec
命令。 - 若要使用 Windows 防火墙阻止一系列端口,请运行
netsh advfirewall
命令。
上述所有解决方案都是可行的解决方案。 但是,某些解决方案可能比需要为每个端口设置规则的解决方案更容易 (IPSec 和 AdvFirewall) 。 为了进行测试,可以使用动态/排除的端口范围方法,因为可以指定范围。 例如:
若要限制动态端口范围,请运行以下命令:
控制台
netsh int ipv4 show dynamicport tcp
netsh int ipv4 show dynamicport udp
netsh int ipv4 set dynamicportrange tcp startport=50000 numberofports=255
netsh int ipv4 set dynamicportrange udp startport=50000 numberofports=255
netsh int ipv6 set dynamicportrange tcp startport=50000 numberofports=255
netsh int ipv6 set dynamicportrange udp startport=50000 numberofports=255
然后,重新启动计算机。
备注
255 是可以设置的最小端口数。
若要进一步限制端口范围,请运行以下命令:
控制台
netsh int ip show excludedportrange tcp
netsh int ip show excludedportrange udp
netsh int ipv4 add excludedportrange tcp startport=50000 numberofports=225
netsh int ipv4 add excludedportrange udp startport=50000 numberofports=225
netsh int ipv6 add excludedportrange tcp startport=50000 numberofports=225
netsh int ipv6 add excludedportrange udp startport=50000 numberofports=225
然后,重新启动计算机。
备注
如果限制端口数过多,则系统上的服务将无法有效通信,并可能导致功能问题。
为 Windows 打印组件配置 RPC 通信
可以通过组策略或直接通过注册表配置以下设置,以达到所需的效果。 有关每个设置的特定详细信息,请参阅组策略编辑器中的文档。
通过命名管道使用 RPC 进行客户端 - 服务器通信
- 使用组策略启用:
路径: 计算机配置>管理模板>打印机>配置 RPC 连接设置
启用并设置为 RpcOverNamedPipes。 - 使用注册表启用设置:
运行reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows NT\Printers\RPC" /v RpcUseNamedPipeProtocol /t REG_DWORD /d 1 /f
通过命名管道在 RPC 上启用侦听传入连接
- 通过组策略启用:
路径:计算机配置 > 管理模板 > 打印机 > 配置 RPC 侦听器设置
启用并设置允许用于 RpcOverNamedPipesAndTcp 的协议。 - 通过注册表启用设置:
运行reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows NT\Printers\RPC" /v RpcProtocols /t REG_DWORD /d 0x7 /f
通过 TCP 通信使用 RPC 的特定端口
- 通过组策略启用:
路径: 计算机配置>管理模板>打印机>通过 TCP 端口 启用和设置端口号配置 RPC - 通过注册表启用设置
运行reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows NT\Printers\RPC" /v RpcTcpPort /t REG_DWORD /d <port number> /f
最大端口:65535
强制执行 Kerberos 身份验证
- 通过组策略启用:
路径: 计算机配置>管理模板>打印机>配置 RPC 侦听器设置
启用和设置允许用于 Kerberos 的身份验证协议。 - 通过注册表启用设置
运行reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows NT\Printers\RPC" /v ForceKerberosForRpc /t REG_DWORD /d 1 /f