ADUCがCato SDPクライアントに接続されているときに遅れて読み込まれる

Prev Next

問題

アクティブディレクトリユーザーとコンピューター(ADUC)がCato SDPクライアントに接続されている間、レイテンシーや遅延が発生する可能性があります。

環境

  • Cato SDPクライアント v4.2 以上

トラブルシューティング

実行中に、ADUCは標準外および存在しないSRVレコードを問い合わせます。 これらのクエリは必要ではなく、なぜADUCがこれらを行うのかは不明です。 さらなる情報については、DNSクライアントリゾルバー動作 を参照してください

Cato SDPクライアントはCato VPNインターフェース以外のあらゆるネットワークインターフェースでDNSリクエストをブロックし、DNSをVPNトンネルを通じて指示します。 これはほとんどのアプリケーションに対してはうまく機能しますが、上記のSRVクエリのため、ADUCでは問題が発生します。

ADUCがCato VPNアダプタで設定されたDNSサーバーからクエリへの肯定的な応答を受け取らない場合、物理(WiFi、イーサネット)アダプタに設定されたDNSサーバーにクエリを送信します。 これらのクエリはCato VPNクライアントによってブロックされるため、ADUCは応答を受け取りません。 これはMicrosoftによって承認または確認されていませんが、ADUCが進行する前に物理アダプタでDNSクエリがタイムアウトするのを待っていると私たちは考えており、これが遅い読み込み時間を説明しています。 我々の知っている限りでは、ADUCだけがこの動作を示す唯一のアプリケーションで、Microsoftのバグである可能性も十分にあります。

上記の問題が発生していることを確認するために、トンネルでPCAPキャプチャを行うことができます。 ユーザーがADUCを開いている間、DNS(ポート53)にフィルターをかけます。 Wiresharkで次のフィルターを適用してSRVクエリを表示します:

dns.qry.type == 33

ADUCは存在しないSRVレコードを2つの異なるフォーマットで問い合わせます:

  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にログインし、アクティブディレクトリを管理します。

  • アクティブディレクトリ管理センター(ADAC)を使用して、アクティブディレクトリをリモートで管理します。 ADACはAD管理においてADUCよりも新しく、より強力なツールですが、学習曲線があります。 ADACについての詳細情報はアクティブディレクトリ管理センターを訪れてください

  • 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. サイト名で前のステップで作成したサブドメインに名前を付け、OKをクリックします。

    mceclip12.png

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

    mceclip13.png

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

    mceclip14.png

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

    • サービス: _ldap

    • プロトコル: _tcp

    • このサービスを提供するホスト: DCのFQDNの末尾にピリオドをつけて入力します。

    mceclip15.png

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

    mceclip16.png

  17. ドメイン内の各DCについてステップ3~16を繰り返してください。

PowerShellを使用してSRVレコードを自動的に作成する

以下のPowerShellスクリプトをDCで実行することで、DNSサーバーもドメインコントローラーである限り、ドメインに必要なすべてのSRVレコードを作成できます。 このスクリプトは顧客の環境で動作するように修正する必要があるかもしれませんし、Catoサポートはこのスクリプトの修正には責任を負いません。 顧客はこのスクリプトを自己責任で使用するべきです。

推奨使用法:

  1. スクリプトを.ps1拡張子のファイルに保存し、DCにコピーします。

  2. DCで、管理者権限のPowerShellを開き、スクリプトを実行します:

    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 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 "すべての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レコードの作成が完了しました。"
} さもなければ {
 Write-Host 'キャンセルされました'
}