Passwall加SmartDNS环境下,KMS激活失败的解决经历
最近在折腾我的雅典娜AX6600路由器,刷了ImmortalWrt系统,本来一切用得好好的。为了提升网络体验,我装了Passwall来海淘,又加了SmartDNS来防DNS污染,参照了论坛里的一个配置帖子,效果确实不错,DNS解析干净利落。
但没多久我就发现,原来在局域网里用得好好的Windows KMS自动激活居然失效了!在电脑上执行nslookup -type=srv _vlmcs._tcp.lan,直接给我返回一个"Non-existent domain",根本找不到局域网里的KMS服务器。这问题困扰了我好一阵子,问了Gemini 2.5 Pro才搞明白怎么回事,这里分享给大家我的解决经历。
问题背景
简单来说,当你在OpenWrt路由器上同时使用vlmcsd(KMS激活服务)、Passwall和SmartDNS时,Windows客户端就无法通过局域网自动发现KMS服务了。
根本原因是:Passwall配合SmartDNS为了实现DNS防污染和智能解析,会接管系统底层的DNS服务(Dnsmasq)。它们将Dnsmasq配置为把所有DNS查询请求都转发给自己处理(比如转发到127.0.0.1#6053)。这样一来,vlmcsd自动写入Dnsmasq的本地KMS服务地址(SRV记录)就被忽略了,查询请求被错误地发送到了公共互联网的DNS服务器上,自然找不到你局域网内的KMS服务器。
核心解决思路
解决问题的关键是要对Dnsmasq进行精确配置,让它能在把大部分DNS请求转发给Passwall/SmartDNS处理之前,优先识别并亲自处理针对本地局域网域名(通常是.lan)的查询。
完整操作步骤
以下是在OpenWrt LuCI管理界面中的详细操作步骤:
第一步:确保vlmcsd服务已启用
导航至“服务” -> “Vlmcsd KMS 服务器”,确认“启用 Vlmcsd KMS 服务器”选项已被勾选,然后点击“保存并应用”。
第二步:手动添加KMS服务的SRV记录
这是为了确保即使vlmcsd自动添加的配置失效,Dnsmasq也能从一个明确的地方读取到这条关键记录。
导航至“网络” -> “DHCP/DNS”,点击顶部标签页中的“Resolv 和 Hosts 文件”,找到名为“额外的 HOSTS 文件”的输入框,在此框中完整地添加以下一行内容:
srv-host=_vlmcs._tcp.lan,openWRT.lan,1688,0,100
注意:如果你修改过路由器的“主机名”,请将openWRT.lan替换为你自己的主机名.lan。你可以在“系统”->“常规设置”中查看你的主机名。
第三步:配置Dnsmasq以优先处理本地域名
这是整个解决方案中最关键的一步,它创建了一个例外规则,防止本地请求被错误转发。
继续停留在“网络” -> “DHCP/DNS”页面,点击顶部标签页中的“转发器”。你会看到“DNS 转发”区域已经存在一条由Passwall/SmartDNS设置的转发地址,例如127.0.0.1#6053。
点击下方的“+”或在新的空白行中,只添加以下内容:
/lan/
语法解释:前后各一个斜杠,中间是你的本地域名(默认为lan)。这行配置的含义是:“任何发往.lan域的DNS查询,都由Dnsmasq本地处理,绝不向上游DNS服务器转发”。
配置完成后,你应该能看到至少两行记录:一行是127.0.0.1#6053,另一行是/lan/。
第四步:保存配置并重启服务
在页面最下方点击“保存并应用”。为确保所有配置和新规则都以正确的顺序加载,强烈建议重启整个路由器。
备选方案是导航至“系统” -> “启动项”,找到dnsmasq服务并点击“重启”,但这不如重启整个路由器来得稳妥。
第五步:在Windows客户端验证并激活
在你的Windows电脑上,以管理员身份打开命令提示符(CMD)或PowerShell。
清除本地DNS缓存,这是一个非常重要的步骤:
ipconfig /flushdns
验证KMS服务是否能被发现:
nslookup -type=srv _vlmcs._tcp.lan
如果配置成功,你将看到包含你路由器IP地址(如192.168.5.1)和KMS端口(1688)的详细信息,而不再是“Non-existent domain”错误。
手动触发激活:
slmgr /ato
片刻之后,系统会弹出“成功地激活了产品”的提示窗口。
点击链接加入群聊四群:722808830
点击链接加入群聊三群:751529538(已满)
点击链接加入群聊二群:376877156(已满)
点击链接加入群聊一群:622891808(已满)
饿了么红包
本站附件分享,如果附件失效,可以去找找看