问题
当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记录:
- _ldap._tcp.DCName.Domain.com
- _ldap._tcp.SiteName._sites.DCName.Domain.com
其中DCName是域控制器(DC)的NetBIOS名称(主机名),SiteName是DC所在站点的名称,Domain.com是域名。
ADUC可能会对域中的每个DC查询SRV记录。 如果您在PCAP中看到任一SRV查询并得到"无此名称"响应,则存在本文中所述的问题。
解决方案
- 使用远程桌面或其他远程访问工具登录到DC并管理Active Directory。
- 使用Active Directory管理中心(ADAC)远程管理Active Directory。 在AD管理方面,ADAC比ADUC更新且更强大,但有学习曲线。 关于ADAC的更多信息,请访问Active Directory管理中心
- 在Windows DNS中创建ADUC请求的SRV记录。 请参阅以下说明。
- 联系Cato支持以获取其他故障排除和后端替代解决方案。
手动创建SRV记录
1. 在DNS服务器上打开DNS管理器。
2. 展开正向查找区域。
3. 右键单击您的域名,然后单击“新域...”。
4. 输入DC的主机名作为域名。
5. 右键单击在上一步中创建的子域,然后选择“其他新记录...”。
6. 选择服务位置(SRV),然后单击“创建记录...”。
7. 在弹出的窗口中输入以下参数:
- 服务: _ldap
- 协议: _tcp
- 提供此服务的主机: DC的FQDN,末尾有一个句点。
8. 点击“确定”。 将创建一个SRV记录。
9. 右键单击在步骤4中创建的以DC命名的子域,然后选择“新域...”
10. 将域命名为“_sites”,然后点击"确定"。
11. 右键单击_sites域,选择“新域...”。
12. 根据DC所在的站点命名上一步创建的子域,然后点击"确定"。
13. 右键单击在上一步中创建的子域,然后选择"其他新记录..."。
14. 选择服务位置(SRV),然后单击"创建记录..."。
15. 在弹出的窗口中输入以下参数:
- 服务: _ldap
- 协议: _tcp
- 提供此服务的主机: DC的FQDN,末尾有一个句点。
16. 点击"确定"。 将创建一个新的SRV记录。
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记录,而无需提示。
示例输出:
脚本:
$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'
}
0 条评论
请登录写评论。