Cato SDPクライアントに接続されている間、ADUCの読み込みが遅くなる

問題

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レコードのクエリを行います:

  1.  _ldap._tcp.DCName.ドメイン.com
  2. _ldap._tcp.サイト名._sites.DCName.ドメイン.com

ここでDCNameはドメインコントローラー(DC)のホスト名(NetBIOS名前)、サイト名はDCが存在するサイトの名前、ドメイン.comはドメイン名です。

ADUCは、ドメイン内のすべてのDCのSRVレコードを照会する可能性があります。 PCAPでSRVクエリのいずれかおよび「そのような名前はありません」応答を確認する場合、この問題が存在します。

mceclip0.png

 

解決策

  • リモート デスクトップや他のリモート アクセス ツールを使用してドメインコントローラにログインし、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. フォワード ルックアップ ゾーンを展開します。

mceclip2.png

3. ドメインを右クリックし、「新規ドメイン…」をクリックします。

mceclip3.png

4. DCのホスト名をドメイン名として入力します。

mceclip4.png

5. 前のステップで作成したサブドメインを右クリックし、「その他の新規レコード…」を選択します。

mceclip5.png

6. サービス ロケーション(SRV)を選択し、「レコードを作成…」をクリックします。

mceclip6.png

7. ポップアップウィンドウに以下のパラメータを入力します:

  • サービス: _ldap
  • プロトコル: _tcp
  • このサービスを提供するホスト: 最後にピリオドを付けたDCのFQDN。

mceclip7.png

8. 「OK」をクリックします。 SRVレコードが作成されます。

mceclip8.png

9. ステップ4で作成したDCにちなむサブドメインを右クリックし、「新規ドメイン...」を選択します

mceclip9.png

10. ドメインに「_sites」と命名し、「OK」をクリックします。

mceclip10.png

11. _sitesドメインを右クリックし、「新規ドメイン…」を選択します。

mceclip11.png

12. 前のステップで作成したサブドメインにDCが存在するサイトの名前を付け、「OK」をクリックします。

mceclip12.png

13. 前のステップで作成したサブドメインを右クリックし、「その他の新規レコード...」を選択します。

mceclip13.png

14. サービス ロケーション(SRV)を選択し、「レコード作成...」をクリックします。

mceclip14.png

15. ポップアップウィンドウに次のパラメータを入力します:

  • サービス: _ldap
  • プロトコル: _tcp
  • Host offering this service: the FQDN of the DC with a period at the end.

mceclip15.png

16. 「OK」をクリックします。 新しいSRVレコードが作成されます。

mceclip16.png

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レコードを一度にすべて作成できます。

出力例:

mceclip1.png

スクリプト: 

$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 'キャンセルされました'
}

 

 

この記事は役に立ちましたか?

4人中3人がこの記事が役に立ったと言っています

0件のコメント