1. DNS SRV 记录概述
SRV 记录(Service Record)是 DNS 记录的一种,用于定义提供特定服务的服务器地址和端口。
KMS 客户端通过查询 DNS 中的 _vlmcs._tcp SRV 记录来 自动发现 KMS 主机,无需手动配置 KMS 服务器地址。
💡 为什么需要 SRV 记录
- 自动发现 — 客户端无需手动配置 KMS 服务器地址
- 高可用 — 可以配置多个 KMS 主机(优先级和权重)
- 简化管理 — 更换 KMS 主机时只需更新 DNS 记录
2. KMS SRV 记录格式
KMS 使用的 SRV 记录格式:
| 字段 | 值 | 说明 |
|---|---|---|
| 服务 | _vlmcs | Volume Licensing Management Services |
| 协议 | _tcp | 使用 TCP 协议 |
| 域名 | iehang.cn | 你的域名 |
| 完整名称 | _vlmcs._tcp.iehang.cn | SRV 记录完整名称 |
| 目标服务器 | kms.iehang.cn | KMS 主机 FQDN |
| 端口 | 1688 | KMS 默认端口 |
| 优先级 | 0 | 数字越小优先级越高 |
| 权重 | 0 | 负载均衡权重(相同优先级时) |
⚠️ 注意
SRV 记录名称必须是 _vlmcs._tcp,否则 KMS 客户端无法自动发现。
3. 自动发布 SRV 记录
KMS 主机激活后,会 自动尝试 在 DNS 中发布 SRV 记录。
CMD - 启用 DNS 自动发布
REM 在 KMS 主机上以管理员身份运行
REM 启用 DNS 发布(默认已启用)
slmgr.vbs /dns
REM 验证 DNS 发布状态
slmgr.vbs /dlv
REM 输出应显示:
REM DNS publishing enabled: Yes
REM 如果显示 No,运行以下命令启用:
slmgr.vbs /dns1
REM 禁用 DNS 发布(如果需要)
slmgr.vbs /dns0
3.1 自动发布失败的原因
- KMS 主机的 DNS 指向 非 AD 集成的 DNS 服务器
- KMS 主机没有 更新 DNS 记录 的权限
- DNS 服务器不允许 动态更新
PowerShell - 检查 DNS 动态更新
# 在 DNS 服务器(通常是域控)上运行
Get-DnsServerZone -Name "iehang.cn" | Select-Object "DynamicUpdate"
# 如果显示 "None",需要启用动态更新:
Set-DnsServerZone -Name "iehang.cn" -DynamicUpdate "Secure"
# 也可以在 DNS 管理器中操作:
# 右键域名 → 属性 → 动态更新 → 选择"仅安全"或"非安全和安全"
4. 手动创建 SRV 记录
如果自动发布失败,可以手动创建 SRV 记录。
1
打开 DNS 管理器(dnsmgmt.msc)
2
展开服务器 → 展开 正向查找区域 → 右键域名(iehang.cn) → 其他新记录
3
滚动到最下方,选择 服务位置(SRV) → 创建记录
4
填写信息:
- 服务:
_vlmcs - 协议:
_tcp - 优先级:
0 - 权重:
0 - 端口:
1688 - 提供此服务的主机:
kms.iehang.cn
5
点击 确定 → 完成
PowerShell - 创建 SRV 记录
# 在 DNS 服务器(域控)上运行
Add-DnsServerResourceRecord -Srv `
-Name "_vlmcs._tcp" `
-ZoneName "iehang.cn" `
-DomainName "kms.iehang.cn." `
-Port 1688 `
-Priority 0 `
-Weight 0
# 验证记录创建成功
Get-DnsServerResourceRecord -Name "_vlmcs._tcp" -ZoneName "iehang.cn"
💡 提示
如果有 多个 KMS 主机,可以创建多个 SRV 记录,通过 优先级 和 权重 实现高可用和负载均衡。
5. 验证 SRV 记录
创建 SRV 记录后,需要验证客户端能否正确查询。
CMD - 验证 SRV 记录
REM 在客户端上运行
REM 方法 1:使用 nslookup
nslookup -type=srv _vlmcs._tcp.iehang.cn
REM 输出示例:
REM Server: UnKnown
REM Address: 192.168.10.254
REM _vlmcs._tcp.iehang.cn SRV service location:
REM priority = 0
REM weight = 0
REM port = 1688
REM svr hostname = kms.iehang.cn
REM 方法 2:使用 PowerShell
Resolve-DnsName -Name "_vlmcs._tcp.iehang.cn" -Type "SRV"
5.1 测试 KMS 主机连通性
PowerShell - 测试 KMS 主机
# 测试 KMS 主机是否可达
Test-NetConnection -ComputerName "kms.iehang.cn" -Port 1688
# 输出应显示:
# ComputerName : kms.iehang.cn
# RemoteAddress : 192.168.10.254
# RemotePort : 1688
# InterfaceAlias : Ethernet0
# SourceAddress : 192.168.10.10
# TcpTestSucceeded : True
6. 常见问题
Q1:客户端无法自动发现 KMS 主机
排查步骤:
- 使用
nslookup -type=srv _vlmcs._tcp.iehang.cn验证 SRV 记录是否存在 - 检查客户端 DNS 设置(应指向 DNS 服务器,通常是域控)
- 检查 KMS 主机是否启用了 DNS 发布(
slmgr.vbs /dlv) - 如果 SRV 记录不存在,手动创建(参见第 4 节)
Q2:SRV 记录自动发布失败
解决方法:
- 检查 DNS 服务器是否允许动态更新(设置为"仅安全"或"非安全和安全")
- 检查 KMS 主机是否有更新 DNS 记录的权限(通常是域计算机账户)
- 手动创建 SRV 记录(参见第 4 节)
- 在 KMS 主机上运行
ipconfig /registerdns重新注册 DNS 记录
Q3:多个 KMS 主机如何实现高可用?
创建 多个 SRV 记录,通过 优先级 和 权重 控制流量:
- 优先级:数字越小优先级越高(0 最高)
- 权重:相同优先级时,按权重比例分配流量
示例:
- KMS1(主):优先级 0,权重 10
- KMS2(备):优先级 10,权重 10
客户端优先连接 KMS1,如果 KMS1 不可用,自动切换到 KMS2。