ADUC连接到Cato SDP客户端时加载缓慢

问题

当Active Directory用户和计算机(ADUC)连接到Cato SDP客户端时,可能会遇到延迟或缓慢的情况。

环境

  • Cato SDP客户端v4.2及以上

故障排除

正在运行时,ADUC会对非标准的、不存在的SRV记录进行DNS查询。 这些查询并不必要,目前尚不清楚为什么ADUC会发出这些请求。 如需更多信息,请参阅 DNS客户端解析器行为

Cato SDP客户端在每个网络接口上阻止DNS请求,除非是Cato VPN接口,以通过VPN隧道直接DNS。 由于上述SRV查询,几乎所有应用程序都能正常工作,唯有ADUC例外。

如果ADUC未收到来自配置在Cato VPN适配器上的DNS服务器的正面响应,它会将查询发送到配置在物理(WiFi,以太网)适配器上的DNS服务器。 这些查询被Cato VPN客户端阻止,因此ADUC从未收到响应。 虽然微软尚未证实或认可此问题,但我们相信ADUC会等待物理适配器上的DNS查询超时,然后继续操作,这就解释了加载时间慢的原因。 据我们所知,ADUC是唯一表现出这种行为的应用程序,这可能是微软的一个漏洞。

要验证是否遇到上述问题,可以在隧道上进行PCAP捕获。 用户打开ADUC时,过滤器DNS(端口53)。 在Wireshark中应用以下过滤器以查看SRV查询:

dns.qry.type == 33

ADUC可以使用两种不同的格式查询不存在的SRV记录:

  1.  _ldap._tcp.DCName.Domain.com
  2. _ldap._tcp.SiteName._sites.DCName.Domain.com

其中DCName是域控制器(DC)的NetBIOS名称(主机名),SiteName是DC所在站点的名称,Domain.com是域名。

ADUC可能会对域中的每个DC查询SRV记录。 如果您在PCAP中看到任一SRV查询并得到"无此名称"响应,则存在本文中所述的问题。

mceclip0.png

 

解决方案

  • 使用远程桌面或其他远程访问工具登录到DC并管理Active Directory。
  • 使用Active Directory管理中心(ADAC)远程管理Active Directory。 在AD管理方面,ADAC比ADUC更新且更强大,但有学习曲线。 关于ADAC的更多信息,请访问Active Directory管理中心
  • 在Windows DNS中创建ADUC请求的SRV记录。 请参阅以下说明。
  • 联系Cato支持以获取其他故障排除和后端替代解决方案。

手动创建SRV记录

1. 在DNS服务器上打开DNS管理器。

2. 展开正向查找区域。

mceclip2.png

3. 右键单击您的域名,然后单击“新域...”。

mceclip3.png

4. 输入DC的主机名作为域名。

mceclip4.png

5. 右键单击在上一步中创建的子域,然后选择“其他新记录...”。

mceclip5.png

6. 选择服务位置(SRV),然后单击“创建记录...”。

mceclip6.png

7. 在弹出的窗口中输入以下参数:

  • 服务: _ldap
  • 协议: _tcp
  • 提供此服务的主机: DC的FQDN,末尾有一个句点。

mceclip7.png

8. 点击“确定”。 将创建一个SRV记录。

mceclip8.png

9. 右键单击在步骤4中创建的以DC命名的子域,然后选择“新域...”

mceclip9.png

10. 将域命名为“_sites”,然后点击"确定"。

mceclip10.png

11. 右键单击_sites域,选择“新域...”。

mceclip11.png

12. 根据DC所在的站点命名上一步创建的子域,然后点击"确定"。

mceclip12.png

13. 右键单击在上一步中创建的子域,然后选择"其他新记录..."。

mceclip13.png

14. 选择服务位置(SRV),然后单击"创建记录..."。

mceclip14.png

15. 在弹出的窗口中输入以下参数:

  • 服务: _ldap
  • 协议: _tcp
  • 提供此服务的主机: DC的FQDN,末尾有一个句点。

mceclip15.png

16. 点击"确定"。 将创建一个新的SRV记录。

mceclip16.png

17. 对您域中的每个DC重复步骤3-16。

使用PowerShell自动创建SRV记录

只要DNS服务器也作为域控制器,下面的PowerShell脚本即可在DC上运行以创建该域所需的所有SRV记录。 请注意,可能需要修改此脚本以适应客户的环境,Cato支持部对此脚本的任何修改不负责任。 客户应自行承担使用此脚本的风险。

建议使用:

1. 将脚本保存为扩展名为.ps1的文件,并将其复制到域控制器。

2. 在域控制器上,以管理员权限打开PowerShell并运行脚本:

path_to_script.ps1

3. 注意,脚本已检测到正确的域名和DNS服务器,并且域中所有域控制器的列表是正确的。

4. 默认情况下,脚本在为每个域控制器创建SRV记录之前会提示。我们建议至少对第一个域控制器使用此方法,然后在继续之前确认SRV记录成功创建。

5. 如果第一个域控制器的SRV记录成功创建,可以再次执行脚本,但选择"批量创建"选项[B],一次性创建所有SRV记录,而无需提示。

示例输出:

mceclip1.png

脚本: 

$allDCs = (Get-ADForest).Domains | %{ Get-ADDomainController -Filter * -Server $_ } | Select-Object -Property Name, HostName, Domain, Site
$Domain = (Get-ADForest).Name
Write-Host ""
Write-Host "Domain:"
Write-Host " $Domain"
$DNSstring = nslookup -type=ns $Domain | Select-String -Pattern 'nameserver'
$DNSstring -match '(?<=nameserver = )(.*)' > $null
$DNSserver = $Matches[1]

Write-Host ""
Write-Host "Found DNS server:"
Write-Host " $DNSserver"
Write-Host ""
Write-Host "Found Domain Controllers:"
Foreach ($DC in $allDCs) {
Write-Host " $($DC.HostName)"
}

$title = 'Create SRV Records'
$question = 'How do you want to create SRV records?'

$bulk = New-Object System.Management.Automation.Host.ChoiceDescription "&Bulk create", "Creates all SRV records at once."
$prompt = New-Object System.Management.Automation.Host.ChoiceDescription "&Prompt for each", "Prompts before creating each SRV record."
$choices = [System.Management.Automation.Host.ChoiceDescription[]]($bulk, $prompt)

$decision = $Host.UI.PromptForChoice($title, $question, $choices, 1)
if ($decision -eq 0) {
Foreach ($DC in $allDCs) {
Add-DnsServerResourceRecord -Srv -Name "_ldap._tcp.$($DC.Name)" -ZoneName $DC.Domain -DomainName "$($DC.HostName)" -Weight 0 -Priority 0 -Port 389 -ComputerName $DNSserver
Add-DnsServerResourceRecord -Srv -Name "_ldap._tcp.$($DC.Site)._sites.$($DC.Name)" -ZoneName $DC.Domain -DomainName "$($DC.HostName)" -Weight 0 -Priority 0 -Port 389 -ComputerName $DNSserver
}
Write-Host ""
Write-Host "Created SRV records for all DCs."
} elseif ($decision -eq 1) {
Foreach ($DC in $allDCs) {
Write-Host ""
Write-Host "Create SRV records for $($DC.HostName)?" -ForegroundColor Yellow
$Readhost = Read-Host " ( y / n ) "
if ($Readhost -eq 'y') {
Add-DnsServerResourceRecord -Srv -Name "_ldap._tcp.$($DC.Name)" -ZoneName $DC.Domain -DomainName "$($DC.HostName)" -Weight 0 -Priority 0 -Port 389 -ComputerName $DNSserver
Add-DnsServerResourceRecord -Srv -Name "_ldap._tcp.$($DC.Site)._sites.$($DC.Name)" -ZoneName $DC.Domain -DomainName "$($DC.HostName)" -Weight 0 -Priority 0 -Port 389 -ComputerName $DNSserver
}
}
Write-Host ""
Write-Host "Done creating SRV records."
} else {
Write-Host 'Cancelled'
}

 

 

这篇文章有帮助吗?

2 人中有 1 人觉得有帮助

0 条评论