본문 바로가기

Trouble Shooting

DNSLint를 사용하여 Active Directory 복제 문제를 해결하는 방법

이 문서에서는 DNSLint 유틸리티를 사용하여 Active Directory 복제 문제를 해결하는 방법을 설명합니다.
Active Directory는 분산 데이터베이스로, 네트워크의 개체에 대한 정보를 저장하고 사용자가 이러한 정보에 액세스하도록 하는 데 사용됩니다. Active Directory 복제는 Active Directory 포리스트에 있는 도메인 컨트롤러 간에 파티션 복제를 동기화하는 데 사용됩니다. 이 복제 프로세스를 통해 사용자는 네트워크 어디에서나 정보에 액세스할 수 있습니다. 이 복제 프로세스가 정상적으로 작동하지 않으면 Active Directory의 정보를 사용하는 서비스(예: 도메인 로그온 및 파일과 프린터 같은 네트워크 리소스에 대한 액세스)가 중단될 수 있습니다.
Active Directory 복제는 필요한 경우 DNS(Domain Name System)를 통해 IP 주소에 대해 이름을 확인합니다. Active Directory 도메인 컨트롤러는 일반적으로 netlogon 서비스를 시작할 때 다양한 DNS 레코드를 구성된 DNS 서버에 등록합니다. DNSLint는 Windows 2000 이상의 운영 체제에서 실행되는 Microsoft Windows 유틸리티입니다. 이 유틸리티는 특히 Active Directory 복제 문제를 해결하는 데 도움이 될 수 있습니다. 또한 다음 두 가지를 확인하는 데 특히 유용합니다.

  • Active Directory 포리스트의 루트에 대해 인증된 모든 DNS 서버가 Active Directory 포리스트에 있는 도메인 컨트롤러 간에 파티션 복제를 성공적으로 동기화하는 데 필요한 DNS 레코드를 실제로 갖고 있는지 확인하는 데 유용합니다. DNSLint는 각 인증 DNS 서버에서 어느 DNS 레코드가 없는지 식별합니다.
  • 특정 Active Directory 도메인 컨트롤러가 Active Directory 포리스트에 있는 도메인 컨트롤러 간에 파티션 복제를 성공적으로 동기화하는 데 필요한 모든 DNS 레코드를 확인할 수 있는지 결정하는 데 유용합니다. DNSLint는 테스트하는 도메인 컨트롤러가 어느 DNS 레코드를 확인할 수 없는지 식별합니다.
문제 해결
Active Directory 도메인 컨트롤러는 다른 도메인 컨트롤러로 복제하려는 경우 DNS를 사용하여 다른 도메인 컨트롤러를 찾습니다. 이 프로세스는 다음과 같이 작동합니다.
  1. 복제를 시작하는 도메인 컨트롤러(DC1)는 구성된 복제 파트너를 검색하기 위해 Active Directory에 쿼리합니다. 이러한 복제 파트너는 일반적으로 지식 일관성 검사기(KCC)에 의해 정의되지만 수동으로도 정의할 수도 있습니다. 자세한 내용은 Microsoft 기술 자료의 다음 문서를 참조하십시오.

    244368 대규모 네트워크에서 Active Directory 복제를 최적화하는 방법

    DC1은 복제할 도메인 컨트롤러의 이름(DC2)만 알고 있습니다. Active Directory에서 대상 도메인 컨트롤러의 이름(DC2)과 일치하는 GUID를 찾습니다. 포리스트에 있는 각 도메인 컨트롤러는 고유한 GUID를 갖고 있어야 합니다.

  2. DC1은 DC2의 GUID를 알고 있으므로 네트워크를 통해 연결할 수 있도록 DC2의 IP 주소를 찾아야 합니다. 이렇게 하기 위해 DC1은 DNS를 사용합니다. DC1은 CNAME 레코드를 찾기 위해 재귀적 DNS 쿼리를 로컬로 구성된 DNS 서버로 보냅니다. 이 레코드의 형식은 항상 다음과 일치합니다.

    guid._msdcs.root of Active Directory forest

    여기서 guid는 DC1이 Active Directory에서 찾은 GUID이고 root of Active Directory forest는 Active Directory 포리스트의 루트입니다. 예를 들어 다음과 같습니다.

    91f9b084-4876-4b59-be17-59e74c340221._msdcs.reskit.com

    여기서 91f9b084-4876-4b59-be17-59e74c340221은 GUID이고 reskit.com은 Active Directory 포리스트의 루트입니다.
    DC1의 로컬로 구성된 DNS 서버는 별칭으로 CNAME에 대한 쿼리에 응답해야 합니다. 별칭은 GUID의 또 다른 이름입니다. 예를 들어 GUID 91f9b084-4876-4b59-be17-59e74c340221은 dc-02.reskit.com으로 확인됩니다.

  3. DC1은 GUID의 별칭을 알고 있으므로 네트워크를 통해 DC2에 연결할 수 있도록 IP 주소로 별칭을 확인해야 합니다. DC1은 별칭의 이름과 일치하는 호스트(A) 레코드를 찾기 위해 재귀적 DNS 쿼리를 로컬로 구성된 DNS 서버로 보냅니다. DNS 서버는 별칭에 매핑된 IP 주소(예: 169.254.66.7)로 응답해야 합니다
  4. DC1은 DC2의 IP 주소를 알고 있으므로 네트워크를 통해 DC2에 연결하고 Active Directory 데이터를 복제할 수 있습니다.
이 프로세스가 실패하면 도메인 컨트롤러 간의 Active Directory 복제도 실패하므로 데이터가 도메인 컨트롤러 간에 일관적이지 않게 될 수 있습니다. DNSLint를 사용하면 이 프로세스에서 사용되는 DNS 레코드가 제대로 있고 확인될 수 있는지 결정할 수 있습니다.
  1. DNS가 Active Directory 포리스트에 있는 도메인 컨트롤러 간에 Active Directory 복제 문제를 유발하는지 확인하려면 다음 명령을 실행하십시오.

    dnslint /ad 169.254.32.1 /s 169.254.10.22

    여기서 /ad 매개 변수는 Active Directory 포리스트에 있는 모든 도메인 컨트롤러에 대해 GUID를 찾는 데 사용할 수 있는 Active Directory 도메인 컨트롤러를 지정하는 데 사용됩니다. 기본적으로 포리스트의 모든 도메인 컨트롤러에는 이 정보가 들어 있습니다. /ad 기능을 사용할 때는 /s 옵션이 필요합니다. /s 옵션은 _msdcs.forest root 영역에 대해 인증된 DNS 서버의 IP 주소를 DNSLint에 알려 주는 데 사용됩니다.
    이 명령을 실행하면 DNSLint는 먼저 /ad 스위치(169.254.32.1) 뒤에 지정된 Active Directory 도메인 컨트롤러에 연락합니다. 이 명령은 DNSLint가 Active Directory 포리스트의 모든 GUID에 대해 이 도메인 컨트롤러의 Active Directory를 쿼리하도록 합니다. 특히, Active Directory의 다음 위치를 쿼리합니다.

    CN=NTDS Settings, CN=Sites,CN=Configuration,DC=reskit,DC=com

    여기서 DC=reskit,DC=com은 Active Directory 포리스트의 루트입니다.
    이러한 종류의 LDAP(Lightweight Directory Access Protocol) 쿼리를 실행하려면 Active Directory에 대한 인증이 필요합니다. 일반적으로 DNSLint는 명령을 실행한 사용자의 보안 컨텍스트에서 실행됩니다. 이 사용자의 자격 증명은 LDAP 바인드 작업 동안 Active Directory를 인증하는 데 사용됩니다. 자격 증명이 유효하고 사용자가 Active Directory의 이 정보에 대한 액세스 권한이 있는 경우 바인드가 성공하고 Active Directory가 GUID를 검색합니다. 바인드가 실패하면 검색이 수행되지 않고 전체 작업이 실패합니다. 이러한 경우 DNSLint는 사용자에게 오류를 반환합니다.
    지정된 도메인 컨트롤러로부터 GUID 목록이 반환되면 DNSLint는 /s 옵션을 사용하여 지정된 DNS 서버에 DNS 쿼리를 보냅니다. 이 단계 앞에서 제공된 예제의 경우 DNS 쿼리는 169.254.10.22로 보내집니다. 이 DNS 서버가 _msdcs.root of Active Directory forest에 대해 인증되지 않은 경우 이전에 발견된 GUID에 대한 DNS 레코드를 찾지 못하고 작업이 끝날 수 있습니다. /s 옵션은 _msdcs.root of Active Directory forest 하위 도메인에 대해 인증된 DNS 서버의 IP 주소를 지정해야 합니다.
    동적 업데이트를 허용하지 않는 DNS 서버가 루트 영역을 호스팅하는 경우와 같은 일부 환경에서는 _msdcs 영역이 Active Directory 포리스트의 루트에 대해 인증되지 않은 DNS 서버에 위임됩니다. DNSLint는 다음 DNS 쿼리로 진행하기 전에 이 위임을 검사합니다. 이 단계는 테스트하지 말아야 하는 DNS 서버에 DNS 쿼리를 보내지 않도록 합니다.
    DNSLint는 DNS 쿼리를 처리하는 과정 동안 Active Directory 포리스트의 루트에 대해 인증된 다른 DNS 서버를 검색하려고 합니다. Active Directory 포리스트의 루트에 대해 인증된 DNS 서버를 찾으면 DNSLint는 Active Directory에서 찾은 CNAME 레코드에 대해 하나 이상의 DNS 서버를 쿼리합니다. 각 CNAME 레코드를 별칭으로 확인하기 때문에 DNSLint는 각 별칭에 대한 연결(A) 레코드도 확인하려고 합니다. 본 문서 앞부분에서 설명했듯이 이러한 DNS 레코드가 Active Directory 복제에 필요합니다.
    그런 다음 DNSLint는 HTML 형식의 보고서와 선택적으로 텍스트 보고서를 만듭니다. 이 보고서에는 Active Directory에서 발견한 모든 GUID, Active Directory 포리스트에 대해 인증된 것으로 발견된 DNS 서버 및 이러한 서버에 대한 모든 CNAME과 연결(A) 레코드 쿼리 결과가 포함되어 있습니다. 보고서는 각 DNS 서버에 어느 CNAME 레코드와 연결(A) 레코드가 없는지 보고합니다. 이 보고서는 없거나 잘못된 DNS 레코드 등 Active Directory 복제 문제를 유발할 수 있는 DNS 문제를 수정하는 데 사용할 수 있습니다.

  2. 특정 Active Directory 도메인 컨트롤러가 Active Directory 포리스트의 도메인 컨트롤러 간에 파티션 복제를 성공적으로 동기화하는 데 필요한 모든 DNS 레코드를 확인할 수 있는지 결정하려면 테스트하는 도메인 컨트롤러에서 다음 명령을 실행하십시오.

    dnslint /ad /s localhost

    /ad 옵션 뒤에 IP 주소가 지정되어 있지 않기 때문에 127.0.0.1이 사용됩니다. 이것은 도메인 컨트롤러가 GUID 레코드 목록을 재귀적으로 쿼리함을 의미합니다. 원하는 경우 대체 도메인 컨트롤러 LDAP 서버를 지정할 수 있습니다. /s 옵션 뒤에 localhost를 지정하면 테스트하는 도메인 컨트롤러에 구성된 하나 이상의 DNS 서버를 사용하여 Active Directory 복제에 사용된 CNAME 및 연결(A) 레코드를 확인하도록 DNSLint에 지시합니다. 이 사양은 재귀적 DNS 쿼리를 도메인 컨트롤러의 로컬로 구성된 하나 이상의 DNS 서버로 보내 도메인 컨트롤러가 필요한 레코드를 확인할 수 있는지 결정합니다. 이것은 모든 로컬 도메인 컨트롤러의 DNS 서버에서 이러한 레코드를 검사하는 것을 의미하지는 않습니다. 도메인 컨트롤러의 DNS 서버 목록은 기본 동작에 따라 관리됩니다. 즉, 첫 번째 서버가 응답하지 않을 경우에만 목록에서 두 번째 DNS 서버가 사용된다는 의미합니다. 이 테스트는 도메인 컨트롤러가 Active Directory 복제에 사용된 DNS 레코드를 확인할 수 있는지만 결정합니다. 특정 DNS 서버는 테스트하지 않습니다.
    DNSLint가 생성하는 보고서는 없거나 잘못된 DNS 레코드 등 Active Directory 복제 문제를 유발할 수 있는 DNS 문제를 해결하는 데 사용할 수 있습니다