华硕网络产品技术交流平台

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

查看: 18272|回复: 1

[教程] 浅谈KMS自动发现激活原理

[复制链接]
发表于 2019-8-13 14:05:28 | 显示全部楼层 |阅读模式
本帖最后由 数学大亨 于 2019-8-14 09:18 编辑

网上流传着很多关于KMS自动发现激活的教程,但是几乎每个教程下都有很多不成功的回复。前两天,有坛友提出了对KMS自动发现激活的需求。经我再三研究并测试,终于得出了以下经验

显然,KMS自动发现有如下几个前提:
一、KMS服务器正确运行
二、客户端能够正常接入运行KMS服务的主机的所在网络
三、网络中有“提供KMS服务”的“广告”,该“广告”含有找到运行KMS服务的主机的方法,并允许客户端发现
四、客户端能够主动寻找并找到上述“广告”五、依据“广告”内容找到运行KMS服务的主机并自动激活
六、客户端能够与该主机的KMS服务正常会话

下面,我将就上述六点谈谈看法,如有错误,欢迎指正





一、KMS服务器正确运行

无论是使用微软的KMS服务器还是其它KMS服务器模拟器,请参考各自的手册确保它能正确运行。这一点不再赘述



二、客户端能够正常接入KMS服务器所在网络

客户端接入网络必须保证“IP地址”,“子网掩码”,“默认网关”和“DNS服务器地址”四个参数被正确配置。配置方式有两种:手动指定或使用DHCP服务(即自动获得IP地址和自动获得DNS服务器地址)

1. 如使用手动指定的方式,务必确保客户端和运行KMS服务的主机的“IP地址”在同一子网(例如:它们的“IP地址”都是192.168.1.X,其中X不一样);务必确保它们的“DNS服务器地址”指向同一地址。例如:如果路由器本身同时提供DNS服务和KMS服务,并且路由器的“IP地址”是192.168.1.1,“子网掩码”为255.255.255.0。那么,客户端的“IP地址”应为192.168.1.X,“子网掩码”应为255.255.255.0,“默认网关”应为192.168.1.1,“DNS服务器地址”应为192.168.1.1

2. 如使用DHCP服务的方式,务必确保客户端已设置为自动获得IP地址和自动获得DNS服务器地址。并且,此网络中有且仅有一台DHCP服务器运行。例如:如果路由器本身同时提供DNS服务和DHCP服务,并且路由器的“IP地址”是192.168.1.1,“子网掩码”为255.255.255.0。那么,在DHCP服务器设置中,自动分配的IP地址范围应为192.168.1.2-192.168.1.254,“子网掩码”应为255.255.255.0,“DNS服务器地址”应为192.168.1.1,并且要广播路由器自身地址作为网关地址


三、网络中有“提供KMS服务”的“广告”,该“广告”含有找到运行KMS服务的主机的方法,并允许客户端发现

“广告”内容就是DNS的SRV记录(参考),包含“服务名”,“提供服务的主机地址”,“该服务使用的端口号”,“优先级”,“权重”。在KMS服务中,“优先级”,“权重”两个字段不被使用,但是作为SRV记录,必须包含这两个字段
根据KMS服务要求,“服务名”是_vlmcs.tcp;“提供服务的主机地址”是KMS服务器的地址(可以是KMS服务器的FQDN,也可以是KMS服务器IP地址);“该服务使用的端口号”是1688(KMS服务的默认端口。如果手动设置KMS服务器使用端口X,相应地这里要写X);“优先级”是0;“权重”是100(以上全部字段名均来源于dnsmasq.conf的注释,与RFC2782标准有差别)

例如:如果路由器本身同时提供DNS服务和KMS服务,并且路由器的“IP地址”是192.168.1.1,KMS服务使用默认端口:
SRV记录如下(直接使用此记录已经可以自动发现并激活,但是不符合RFC2782标准):
  1. srv-host=_vlmcs._tcp,192.168.1.1,1688,0,100
复制代码

但是,根据RFC2782标准,“提供服务的主机地址”应为FQDN,而不是IP地址,这就是一切噩梦的开端……

例如:
  1. srv-host=_vlmcs._tcp.lan,RT-AC86U.lan,1688,0,100
复制代码
此代码是从网上随便找到的,除了“提供服务的主机地址”字段使用RT-AC86U.lan(这是FQDN)外,在它的“服务名”字段内包含了.lan(此处lan称为“域名”)。这是不必要的。根据dnsmasq.conf,如果dnsmasq.conf中包含domain设置项,那么domain设置项的值会自动附加到SRV记录的“服务名”后,故可省略
由于使用了FQDN来表示“提供服务的主机地址”,就必须确保该FQDN能够被DNS服务器解析为运行KMS服务的主机的IP地址,这是导致大部分自动激活失败的根源


要设置FQDN,域名以及FQDN到IP地址的解析,就必须谈谈DNS服务器(以dnsmasq为例)的配置:
  1. # Configuration file for dnsmasq
  2. # dnsmasq配置文件
  3. #
  4. # Never forward plain names (without a dot or domain part)
  5. # 不转发不包含.或域名部分的名称
  6. domain-needed
  7. #
  8. # Never forward addresses in the non-routed address spaces
  9. # 不转发在不可路由地址空间中的地址
  10. bogus-priv
  11. #
  12. # Add local-only domains here, queries in these domains are answered from /etc/hosts or DHCP only
  13. # 在此处添加本地专用域名,对这些域名的查询将仅被/etc/hosts或DHCP应答
  14. local=/lan/
  15. #
  16. # If you want dnsmasq to read another hosts file, as well as /etc/hosts, use this
  17. # 在此处添加附加hosts文件,它将与/etc/hosts一并被dnsmasq读取
  18. addn-hosts=/opt/etc/hosts.dnsmasq
  19. #
  20. # Set this (and domain: see below) if you want to have a domain automatically added to simple names in a hosts-file
  21. # domain设置项的值将被自动附加到hosts文件中的简单名称(不包含.或域名部分的名称)之后
  22. expand-hosts
  23. #
  24. # Set the domain for dnsmasq. this is optional, but if it is set, it does the following things
  25. # 1) Allows DHCP hosts to have fully qualified domain names, as long as the domain part matches this setting
  26. # 2) Sets the "domain" DHCP option thereby potentially setting the domain of all systems configured by DHCP
  27. # 3) Provides the domain part for "expand-hosts"
  28. # 为dnsmasq设置域名。这是可选项,一旦被设置,将执行下列操作:
  29. # 1) 只要域名部分匹配此设置项的值,将允许DHCP主机拥有FQDN
  30. # 2) 设置DHCP域名选项,因此,潜在地设置了由DHCP配置的全部系统的域名
  31. # 3) 为expand-hosts设置项提供域名部分
  32. domain=lan
  33. #
  34. # DHCP option: set domain name to lan
  35. # DHCP选项:设定域名为lan
  36. # 特别提示:此项当且仅当客户端从DHCP服务器自动获得网络配置时生效,它设置“连接特定的DNS后缀”。如果客户端使用静态地址,必须手动设置“连接特定的DNS后缀”
  37. dhcp-option=15,lan
复制代码
上述为dnsmasq的部分配置,它最重要的功能是指定了本地专用域名lan和FQDN到IP的解析文件/opt/etc/hosts.dnsmasq
为了确保该FQDN能够被DNS服务器解析为运行KMS服务的主机的IP地址,在解析文件/opt/etc/hosts.dnsmasq或解析文件/etc/hosts(如使用/etc/hosts,则在dnsmasq.conf中不能有no-hosts设置项)中,必须包含下述行:
  1. KMS服务器IP地址 KMS服务器FQDN
复制代码
在本例中,即为
  1. 192.168.1.1 RT-AC86U
复制代码
(此处FQDN中省略了域名部分,原因见上文)
至此,SRV记录中的“提供服务的主机地址”字段RT-AC86U.lan,才可以被DNS服务器正确解析到KMS服务器IP地址192.168.1.1


四、客户端能够主动寻找并找到上述“广告”


这是第二个导致大部分自动激活失败的根源。如“二、客户端能够正常接入运行KMS服务的主机的所在网络”所述,客户端接入网络的方式有两种:手动指定或使用DHCP服务

DHCP服务方式(绝大多数情况):由于前文DNS配置文件中已经包含
  1. dhcp-option=15,lan
复制代码
它指定了通过DHCP方式接入网络的客户端的“连接特定的DNS后缀”,因此,在Windows客户端,使用ipconfig /all可以看到在联网的网卡上,属性“连接特定的DNS后缀”的值为“lan”。这是客户端能够找到上述SRV记录的关键。使用

  1. nslookup -type=srv _vlmcs._tcp
复制代码
可以返回正确的SRV记录值。如果属性“连接特定的DNS后缀”的值为空白,则上述命令不能返回正确的SRV记录值。原因如下:在DNS服务器端,SRV记录中的“服务名”_vlmcs._tcp首先被自动添加域名lan,变为_vlmcs.tcp.lan,这才是SRV记录中真正的“服务名”。因此,在SRV记录中,只有“服务名”为_vlmcs.tcp.lan的项
在客户端,对_vlmcs._tcp的查询,首先被自动添加域名lan,变为对_vlmcs.tcp.lan的查询,然后才发送到DNS服务器进行查询。如果属性“连接特定的DNS后缀”的值为空白,那么对_vlmcs._tcp的查询会以原状发送到DNS服务器进行查询。显然,在DNS服务器端没有“服务名”为_vlmcs.tcp的SRV记录,因此无法返回正确信息


手动指定方式:必须在“高级TCP/IP 设置”中,指定“此连接的DNS后缀”为lan(否则属性“连接特定的DNS后缀”的值为空)。此时,虽然使用
  1. nslookup -type=srv _vlmcs._tcp
复制代码
不能返回正确的SRV记录值,但是可以正常激活,具体原因未知


五、依据“广告”内容找到运行KMS服务的主机并自动激活


客户端使用
  1. slmgr /ato
复制代码
即可自动激活


六、客户端能够与该主机的KMS服务正常会话

一般情况下无需设置。如果KMS服务器的防火墙阻止了此网段内的其它计算机访问它,则需要参阅防火墙手册来解除限制




最后,又到了广告时间:使用华硕路由器官方固件和梅林固件开机自动运行脚本方法,可实现客户端自动发现KMS服务器并激活

微信扫一扫,阅读更方便^_^

0

主题

110

回帖

9286

积分

论坛元老

Rank: 8Rank: 8

积分
9286

RT-AC86U

发表于 2021-9-16 12:54:37 | 显示全部楼层
感谢分享,学习学习
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

快速回复 返回列表 搜索 官方QQ群
×

秒后自动关闭

小黑屋|手机版|Archiver|华硕网络产品技术交流平台 ( 苏ICP备16010857号-1 )苏公网安备 32050502000499号

GMT+8, 2024-4-25 04:31 , Processed in 0.029058 second(s), 31 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表