問題
Active Directoryのユーザーとコンピュータ(ADUC)は、Cato SDPクライアントに接続されているときにレイテンシーや遅延を体験することがあります。
環境
- Cato SDPクライアント v4.2以上
トラブルシューティング
実行中、ADUCは非標準の、存在しないSRVレコードのためのDNSクエリを行います。 これらのクエリは必要なく、なぜADUCがこれを行うかは不明です。 詳細情報については、DNSクライアントリゾルバの挙動を参照してください。
Cato SDPクライアントは、DNSをVPNトンネルを通してダイレクトするために、Cato VPNインターフェース以外のすべてのネットワークインタフェース上のDNS要求をブロックします。 これは、上記で述べたSRVクエリのためにADUCを除くほぼすべてのアプリケーションでうまく機能します。
ADUCがCato VPNアダプタで設定されたDNSサーバからクエリへの肯定的な応答を受け取らない場合、物理的な(WiFi、イーサネット)アダプタで設定されたDNSサーバにクエリを送信します。 これらのクエリはCato VPNクライアントによってブロックされるため、ADUCは決して応答を受け取りません。 これはMicrosoftによって認められたり確認されたわけではありませんが、ADUCが動作を続ける前に物理的なアダプタでDNSクエリがタイムアウトするのを待っていると私たちは考えており、これが遅い読み込み時間を説明します。 私たちの知る限り、ADUCはこの動作を示す唯一のアプリケーションであり、おそらくMicrosoftのバグである可能性があります。
上記の問題が発生していることを確認するために、トンネルでPCAPキャプチャを取ることができます。 ユーザーがADUCを開くときに、DNS(ポート53)のためのフィルターを適用します。 SRVクエリを表示するためにWiresharkで次のフィルターを適用します:
dns.qry.type == 33
ADUCは2つの異なる形式で存在しないSRVレコードのクエリを行います:
- _ldap._tcp.DCName.ドメイン.com
- _ldap._tcp.サイト名._sites.DCName.ドメイン.com
ここでDCNameはドメインコントローラー(DC)のホスト名(NetBIOS名前)、サイト名はDCが存在するサイトの名前、ドメイン.comはドメイン名です。
ADUCは、ドメイン内のすべてのDCのSRVレコードを照会する可能性があります。 PCAPでSRVクエリのいずれかおよび「そのような名前はありません」応答を確認する場合、この問題が存在します。
解決策
- リモート デスクトップや他のリモート アクセス ツールを使用してドメインコントローラにログインし、Active Directoryを管理します。
- Active Directory管理センター(ADAC)を使用して、リモートでActive Directoryを管理します。 AD管理において、ADACはADUCよりも新しく強力なツールですが、学習曲線があります。 ADACについての詳細情報は、Active Directory Administrative Centerを参照してください
- Windows DNSでADUCが照会するSRVレコードを作成します。 以下の指示をご覧ください。
- 追加のトラブルシューティングとバックエンドの代替ソリューションについては、Catoサポートに問い合わせてください。
SRVレコードを手動で作成
1. DNSサーバー上でDNSマネージャーを開きます。
2. フォワード ルックアップ ゾーンを展開します。
3. ドメインを右クリックし、「新規ドメイン…」をクリックします。
4. DCのホスト名をドメイン名として入力します。
5. 前のステップで作成したサブドメインを右クリックし、「その他の新規レコード…」を選択します。
6. サービス ロケーション(SRV)を選択し、「レコードを作成…」をクリックします。
7. ポップアップウィンドウに以下のパラメータを入力します:
- サービス: _ldap
- プロトコル: _tcp
- このサービスを提供するホスト: 最後にピリオドを付けたDCのFQDN。
8. 「OK」をクリックします。 SRVレコードが作成されます。
9. ステップ4で作成したDCにちなむサブドメインを右クリックし、「新規ドメイン...」を選択します
10. ドメインに「_sites」と命名し、「OK」をクリックします。
11. _sitesドメインを右クリックし、「新規ドメイン…」を選択します。
12. 前のステップで作成したサブドメインにDCが存在するサイトの名前を付け、「OK」をクリックします。
13. 前のステップで作成したサブドメインを右クリックし、「その他の新規レコード...」を選択します。
14. サービス ロケーション(SRV)を選択し、「レコード作成...」をクリックします。
15. ポップアップウィンドウに次のパラメータを入力します:
- サービス: _ldap
- プロトコル: _tcp
- Host offering this service: the FQDN of the DC with a period at the end.
16. 「OK」をクリックします。 新しいSRVレコードが作成されます。
17. Repeat steps 3-16 for each DC in your domain.
PowerShellを使用してSRVレコードを自動作成する
以下のPowerShellスクリプトは、DNSサーバーがドメインコントローラーである限り、ドメインに必要なすべてのSRVレコードを作成するためにDCで実行できます。 このスクリプトは、顧客の環境で動作するように修正する必要がある場合があり、Catoサポートはこのスクリプトの修正には責任を負いません。 顧客は自己責任でこのスクリプトを使用する必要があります。
推奨使用法:
1. スクリプトを拡張子.ps1のファイルとして保存し、DCにコピーします。
2. On the DC, open PowerShell with administrator privileges and run the script:
path_to_script.ps1
3. スクリプトによって正しいドメインとDNSサーバーが検出され、ドメイン内のすべてのDCのリストが正しいことを確認してください。
4. デフォルトでは、スクリプトは各DCのSRVレコードを作成する前に確認を求めます。少なくとも最初のDCにはこの方法を使用し、続行する前にSRVレコードが正常に作成されたことを確認することをお勧めします。
5. 最初のDCのSRVレコードが正常に作成された場合は、もう一度スクリプトを実行し、「一括作成」オプション[B]を選択して、プロンプトなしでSRVレコードを一度にすべて作成できます。
出力例:
スクリプト:
$allDCs = (Get-ADForest).Domains | %{ Get-ADDomainController -Filter * -Server $_ } | Select-Object -Property 名前, ホスト名, ドメイン, サイト
$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 "すべてのDCの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 'キャンセルされました'
}
0件のコメント
サインインしてコメントを残してください。