문제
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)를 필터링합니다. Wireshark에서 SRV 쿼리를 보기 위해 다음 필터를 적용합니다:
dns.qry.type == 33
ADUC는 두 가지 형식으로 존재하지 않는 SRV 레코드에 대한 쿼리를 수행할 수 있습니다:
- _ldap._tcp.DCName.Domain.com
- _ldap._tcp.SiteName._sites.DCName.Domain.com
DCName는 도메인 컨트롤러(DC)의 호스트명(호스트명)이고, SiteName은 DC가 위치한 사이트의 이름이며, Domain.com은 도메인입니다.
ADUC는 도메인의 모든 도메인 컨트롤러에 대해 잠재적으로 SRV 레코드를 조회할 수 있습니다. PCAP에서 SRV 쿼리 중 하나와 "그런 이름 없음"이라는 응답이 보이면, 이 기사에 언급된 문제가 존재함을 의미합니다.
솔루션
- 원격 데스크탑 또는 다른 원격 액세스 도구를 사용하여 도메인 컨트롤러에 로그인하고 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 레코드 생성
아래의 PowerShell 스크립트는 DNS 서버가 도메인 컨트롤러인 경우 DC에서 도메인을 위한 모든 필요한 SRV 레코드를 생성할 수 있습니다. 이 스크립트는 고객 환경에 맞게 수정이 필요할 수 있으며, 이에 대해 Cato 지원팀은 책임지지 않습니다. 고객은 이 스크립트를 자발적으로 사용해야 합니다.
추천 사용 방법:
1. 스크립트를 .ps1 확장자의 파일로 저장하고 DC에 복사하세요.
2. 도메인 컨트롤러에서 관리자 권한으로 PowerShell을 열고 스크립트를 실행하세요:
path_to_script.ps1
3. 스크립트가 올바른 도메인과 DNS 서버를 감지했으며 도메인 내 모든 DC의 목록이 올바른지 확인하세요.
4. 기본적으로 스크립트는 각 DC에 대해 SRV 레코드를 생성하기 전에 프롬프트를 표시합니다. 최소한 첫 번째 DC에 대해 이 방법을 사용하고 계속하기 전에 SRV 레코드가 성공적으로 생성되었는지 확인하는 것이 좋습니다.
5. 첫 번째 DC의 SRV 레코드가 성공적으로 생성된 경우, 스크립트를 다시 실행할 수 있지만 프로ンプ트 없이 모든 SRV 레코드를 한 번에 생성하기 위해 "대량 생성" 옵션[B]을 선택하십시오.
출력 예시:
스크립트:
$allDCs = (Get-ADForest).도메인 | %{ Get-ADDomainController -Filter * -Server $_ } | Select-Object -Property 이름, 호스트명, 도메인, 사이트
$Domain = (Get-ADForest).이름
Write-Host ""
Write-Host "도메인:"
Write-Host " $Domain"
$DNSstring = nslookup -유형=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.호스트명)"
}
$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.이름)" -ZoneName $DC.도메인 -DomainName "$($DC.호스트명)" -Weight 0 -우선순위 0 -포트 389 -ComputerName $DNSserver
Add-DnsServerResourceRecord -Srv -Name "_ldap._tcp.$($DC.사이트)._sites.$($DC.이름)" -ZoneName $DC.도메인 -DomainName "$($DC.호스트명)" -Weight 0 -우선순위 0 -포트 389 -ComputerName $DNSserver
}
Write-Host ""
Write-Host "모든 DC에 대한 SRV 레코드가 생성되었습니다."
} elseif ($decision -eq 1) {
Foreach ($DC in $allDCs) {
Write-Host ""
Write-Host "$($DC.호스트명)에 대한 SRV 레코드를 생성하시겠습니까?" -ForegroundColor Yellow
$Readhost = Read-Host " ( y / n ) "
if ($Readhost -eq 'y') {
Add-DnsServerResourceRecord -Srv -Name "_ldap._tcp.$($DC.이름)" -ZoneName $DC.도메인 -DomainName "$($DC.호스트명)" -Weight 0 -우선순위 0 -포트 389 -ComputerName $DNSserver
Add-DnsServerResourceRecord -Srv -Name "_ldap._tcp.$($DC.사이트)._sites.$($DC.이름)" -ZoneName $DC.도메인 -DomainName "$($DC.호스트명)" -Weight 0 -우선순위 0 -포트 389 -ComputerName $DNSserver
}
}
Write-Host ""
Write-Host "SRV 레코드 생성 완료."
} else {
Write-Host '취소됨'
}
댓글 0개
댓글을 남기려면 로그인하세요.