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

Prev Next

问题

当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.域名.com

  2. _ldap._tcp.站点名称._sites.DCName.域名.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 "域名:"
Write-Host " $Domain"
$DNSstring = nslookup -type=ns $Domain | Select-String -Pattern 'nameserver'
$DNSstring -match '(?<=nameserver = )(.*)' > $null
$DNSserver = $Matches[1]

Write-Host ""
Write-Host "找到的DNS服务器:"
Write-Host " $DNSserver"
Write-Host ""
Write-Host "找到的域控制器:"
Foreach ($DC in $allDCs) {
 Write-Host " $($DC.HostName)"
}

$title = '创建SRV记录'
$question = '您想如何创建SRV记录?'

$bulk = New-Object System.Management.Automation.Host.ChoiceDescription "&批量创建", "一次创建所有SRV记录。"
$prompt = New-Object System.Management.Automation.Host.ChoiceDescription "&每次提示", "创建每个SRV记录之前提示。"
$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 "为所有域控制器创建了SRV记录。"
} elseif ($decision -eq 1) {
 Foreach ($DC in $allDCs) {
 Write-Host ""
 Write-Host "为$($DC.HostName)创建SRV记录?" -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 "完成创建SRV记录。"
} else {
 Write-Host '已取消'
}