所以,我的问题不是某样东西不起作用。而是它起作用了,而我却不知道为什么。
简洁版本: 即使 netbios/LLMNR 已关闭,我仍可以访问 \\mydomain\MyDFSRoot,并且 DNS 条目 mydomain.mydomain.locale 不存在。我无法理解为什么。
细节
- AD 林/域:MyDomain.locale
- DFS 命名空间:MyDomain.locale/MyDFSRoot (v2)
- 林/域级别:2008R2
测试计算机:
- DC1(域控制器-WS2019)
- SRV(DFS 命名空间服务器 - WS2019)
- CLI(客户端,Windows 10 1903)(此网络中没有其他计算机)
配置:
- LLMNR - 通过 GPO 关闭
- 通过 GPO 的 Netbios 节点类型 P 节点
- 未提供或配置 WINS
- 网络适配器上已禁用 TCP/IP 上的 Netbios
- SMBv1 通过 GPO 禁用(没有计算机浏览器服务正在运行)
- DFS 配置设置为在 DC 和 DFSn 服务器上都使用 FQDN(但似乎并不重要)
- DNS 后缀搜索列表为默认 (mydomain.locale)
- CLI 在其自己的网络中分离(vswitch 并路由到 DC/SRV),这是为了避免任何广播数据包
- 没有来自网络的外部流量,也没有任何外部 DNS 配置
观察结果:
- 工作:所有 DFSN 路径 (\mydomain(sysvol|netlogon|mydfsroot)
- 不起作用:DC \mydomain\dcsharedfolder 上的共享文件夹
- 延迟:如果我启动与网络断开的客户端,登录、启用网络并测试..它可能需要几秒钟/几分钟才能正常工作。
- LLMNR/Netbios/BROWSER 已关闭:我已捕获所有流量,但没有这些协议的踪迹
- ipconfig /flushdns、dfsutil cache * flush 等被大量使用,但似乎没有任何效果
更新:可能的答案
看来我已经找到了可以触发短名称工作的网络数据包。在某个时候,SMB2
将发送一个类型的数据包Request [FSCTL_DFS_GET_REFERRALS], FILE:
(请注意,不存在文件路径)(Wireshark 过滤器smb2.ioctl.function == 0x00060194
)。反过来,我从域控制器收到以下响应:
Referrals
Referral
Version: 3
Size: 18
Server Type: Non-root targets returned (0)
Flags: 0x0002, NameListReferral
TTL: 600
Domain Offset: 36
Number of Expanded Names: 0
Expanded Names Offset: 0
Domain Name: \MYDOMAIN
Referral
Version: 3
Size: 18
Server Type: Non-root targets returned (0)
Flags: 0x0002, NameListReferral
TTL: 600
Domain Offset: 34
Number of Expanded Names: 0
Expanded Names Offset: 0
Domain Name: \MYDOMAIN.LOCALE
现在微软文章“DFS 的工作原理”有以下引述:
“客户端上的任何 UNC 请求都会先到达 DFS,然后再到达任何网络重定向器。DFS 检查其域缓存以确定该名称是否为域名”
但是,它还指出 MUP 缓存必须事先知道路径。这也许可以解释为什么它最初不起作用,但“如果我等一会儿”就会起作用。在开始工作之前检查 DFS 域缓存:
[*][]
[*][MYDOMAIN]
[*][mydomain.locale]
[+][mydomain.locale]
[+TESTDC.pertra.locale]
开始工作后:
[*][TESTDC.mydomain.locale]
[*][MYDOMAIN]
[*][mydomain.locale]
[+][mydomain]
[+TESTDC] AccessStatus: 0
[+][mydomain.locale]
[+TESTDC.mydomain.locale]
前面带有 [+] 的条目应该是引用,而 [*] 是“从工作站服务接收的”。在这种情况下,这意味着现在它可以工作了,因为我已经获得了该路径的引用,这可能是因为其他东西(我认为是 GPO)访问了 DFS 根。
编辑2:我检查了发送查询的进程的 PID,它是工作站服务。
答案1
看来我已经搞清楚了(看问题以获得长答案)。基本上:
- DFS 使用短名称而不使用 Netbios
- 如果您访问 DFSn 命名空间,它将为您提供它的别名 - 包括一个简短版本。
- UNC 在其他提供商之前尝试 DFS(例如正常名称解析)