ONTAP CIFS 도메인 조인이 “LDAP Error”로 실패할 때 — 진짜 원인은 역방향 DNS

ONTAP CIFS 도메인 조인 실패 — CIFS 서버를 만들어 Active Directory 도메인에 조인하려는데, 마지막 줄이 이렇게 끝납니다.

Error: command failed: Failed to create the Active Directory machine
account "NAS1". Reason: LDAP Error: Local error occurred.

“LDAP Error”. 그래서 LDAP 설정을 뒤지기 시작합니다. 그런데 아무리 봐도 이상한 게 없습니다.

결론부터 말하면 LDAP 문제가 아닙니다. 역방향 DNS 조회가 실패해서 생긴 일입니다. 이 글은 로그를 위에서부터 읽어 진짜 실패 지점을 찾아가는 과정입니다.

이 글의 실습 환경

이 글은 ONTAP Simulator 9.17.1 기반 가상 랩에서 직접 명령을 실행하고 그 출력을 근거로 작성했습니다. VMware Workstation Pro 25H2 위에 2노드 클러스터를 구성하고, Windows Server 2025로 AD 도메인 컨트롤러를 세운 환경입니다.

실제 장비(FAS/AFF)와는 다음과 같은 차이가 있을 수 있습니다.

  • 시뮬레이터가 지원하지 않는 기능이 있습니다. 예를 들어 HA(스토리지 페일오버)는 2노드 클러스터를 구성해도 동작하지 않습니다.
  • 성능 수치는 의미가 없습니다. 가상 디스크 기반이라 실제 처리량·지연시간과 무관합니다.
  • 하드웨어에 의존하는 동작(디스크 물리 장애, 셸프 인식, FC 포트 등)은 재현되지 않거나 다르게 동작합니다.
  • ONTAP 버전에 따라 명령과 출력이 달라집니다. 이 글은 9.17.1 기준입니다.

운영 환경에 적용하기 전에는 반드시 해당 버전의 NetApp 공식 문서와 자사 환경에서 검증하시기 바랍니다.

1. 환경

구성
스토리지ONTAP Simulator 9.17.1, 2노드
SVMCIFS_SVM
CIFS 데이터 LIF192.168.126.21
볼륨window_vol1, junction /window_vol1, security-style ntfs
도메인 컨트롤러Windows Server 2025, lab-dc01.lab.example.com (192.168.126.40)
도메인lab.example.com / NetBIOS LAB

CIFS용 볼륨은 security-style을 ntfs 로 만듭니다. NFS와 같이 쓸 계획이면 mixed 또는 unified 를 검토해야 하는데, 이건 별도로 다룰 주제입니다.

2. 조인 전 준비 — 공식 문서 기준

NetApp이 요구하는 사전 조건입니다.

SVM·LIF — 데이터 LIF가 SMB 프로토콜을 허용해야 하고, LIF에서 SVM에 설정된 DNS 서버AD 도메인 컨트롤러에 연결 가능해야 합니다.

AD 계정 권한 — 조인에 사용할 계정은 대상 OU에 대해 아래 권한이 필요합니다.

Create computer objects
Delete computer objects
Reset password
Read and write account restrictions
Validated write to DNS host name
Validated write to service principal names
Read / Write msDS-SupportedEncryptedTypes
  • 도메인은 FQDN으로 지정해야 합니다
  • 기본값은 머신 계정을 CN=Computers 에 만듭니다 (-ou 로 변경 가능)
  • SMB 라이선스 확인: system license show -package cifs
  • ONTAP 9.7부터는 비밀번호 대신 keytab 파일 URI를 쓸 수 있습니다 (-keytab-uri)

출처: Create SMB servers in an ONTAP Active Directory domain

DNS 설정

vserver services name-service dns create -vserver <svm> -domains <domain> -name-servers <ip1>,<ip2> -state enabled

문서는 DNS 서버를 2개 이상 설정하라고 권고합니다. 하나만 넣으면 경고가 뜹니다. 이 명령은 자동으로 구성 검증을 수행하고, 네임서버에 닿지 못하면 오류를 보고합니다. (Enable DNS for ONTAP SMB host-name resolution)

3. 조인 시도 — 그리고 실패

cluster1::> cifs create -vserver CIFS_SVM -cifs-server NAS1 -domain lab.example.com

In order to create an Active Directory machine account for the CIFS server,
you must supply the name and password of a Windows account with sufficient
privileges to add computers to the "CN=Computers" container within the
"LAB.EXAMPLE.COM" domain.

Enter the user name: administrator
Enter the password:

Error: Machine account creation procedure failed
  [   118] Loaded the preliminary configuration.
  [   153] Successfully connected to ip 192.168.126.40, port 88 using TCP
  [   185] Successfully connected to ip 192.168.126.40, port 389 using TCP
  [   187] Successfully connected to ip 192.168.126.40, port 88 using TCP
  [   199] Entry for host-address: 192.168.126.40 not found in the
           current source: FILES. Ignoring and trying next available source
  [  2201] Failed to connect to 192.168.126.40 for DNS via Source
           Address 192.168.126.21: Operation timed out
  [  2205] Source: DNS unavailable. Entry for
           host-address:192.168.126.40 not found in any of the
           available sources
  [  2208] Successfully connected to ip 192.168.126.40, port 88 using TCP
**[  2213] FAILURE: Unable to SASL bind to LDAP server using GSSAPI:
**         Local error
  [  2215] Unable to connect to LDAP (Active Directory) service on
           lab-dc01.lab.example.com (Error: Local error)
  [  2215] Unable to make a connection (LDAP (Active
           Directory):LAB.EXAMPLE.COM), Result:
           RESULT_ERROR_LDAPSERVER_LOCAL_ERROR

Error: command failed: Failed to create the Active Directory machine
account "NAS1". Reason: LDAP Error: Local error occurred.

마지막 줄만 보면 LDAP 문제로 읽힙니다. 그래서 LDAP 설정을 뒤지기 시작하면 시간을 버립니다.

ONTAP의 vserver services name-service ldap 설정은 UNIX 사용자 정보를 LDAP에서 가져올 때 쓰는 것입니다. CIFS 도메인 조인과는 무관합니다. 조인하려고 이 설정을 만들 필요는 없습니다.

4. 로그를 위에서부터 읽는다

이 에러 로그는 친절한 편입니다. 실패 지점까지 가는 과정을 다 보여줍니다.

연결은 전부 성공한다

[153] Successfully connected to ip 192.168.126.40, port 88  using TCP   <- Kerberos
[185] Successfully connected to ip 192.168.126.40, port 389 using TCP   <- LDAP

포트 88(Kerberos)과 389(LDAP)에 모두 붙습니다. 방화벽·라우팅 문제가 아닙니다.

그런데 중간에 이상한 줄이 있다

[ 199] Entry for host-address: 192.168.126.40 not found in the current source: FILES
[2201] Failed to connect to 192.168.126.40 for DNS via Source Address
       192.168.126.21: Operation timed out
[2205] Source: DNS unavailable. Entry for host-address:192.168.126.40
       not found in any of the available sources

host-address 를 찾고 있습니다. IP를 호스트명으로 되돌리는 역방향 조회입니다. 그리고 타임아웃이 납니다.

그다음 바로 죽는다

[2213] FAILURE: Unable to SASL bind to LDAP server using GSSAPI: Local error

GSSAPI — 즉 Kerberos 인증입니다. Kerberos는 서비스에 붙을 때 SPN(서비스 주체 이름) 이 필요하고, SPN을 만들려면 상대의 호스트명을 알아야 합니다.

역방향 조회가 실패하면 호스트명을 못 얻고, SPN을 못 만들고, GSSAPI가 실패합니다. 그 실패가 “LDAP Error” 로 보고되는 것입니다.

5. 원인 확인

5-1. 시각부터 배제한다

Kerberos는 시각 오차 5분을 넘으면 실패합니다. 흔한 원인이므로 먼저 지웁니다.

cluster1::> cluster date show
cluster1-01   8/27/2026 08:42:26 +09:00   ROK

PS> (Get-Date).ToUniversalTime().ToString('o')
2026-08-26T23:42:42Z

ONTAP 08:42:26 +09:00 = 23:42:26 UTC, DC는 23:42:42 UTC. 차이 16초. 시각은 원인이 아닙니다.

Kerberos는 UTC 절대 시각으로 비교합니다. 양쪽 타임존 표시가 달라도 절대 시각이 같으면 오차는 0입니다. “타임존이 다르니 이것 때문 아닐까”는 오답입니다.

5-2. 정방향 DNS는 정상이다

cluster1::> network ping -vserver CIFS_SVM -destination lab-dc01.lab.example.com -count 2
lab-dc01.lab.example.com is alive

cluster1::> vserver services name-service dns check -vserver CIFS_SVM
CIFS_SVM   192.168.126.40   up   Response time (msec): 0

이름 → IP는 됩니다. 그래서 더 헷갈립니다.

5-3. DNS 영역 목록에서 드러난다

PS> Get-DnsServerZone | Select ZoneName,ZoneType,IsReverseLookupZone

ZoneName                 ZoneType  IsReverseLookupZone
_msdcs.lab.example.com   Primary   False
lab.example.com          Primary   False
0.in-addr.arpa           Primary   True     <- 자동생성 기본값
127.in-addr.arpa         Primary   True     <- 자동생성 기본값
255.in-addr.arpa         Primary   True     <- 자동생성 기본값

126.168.192.in-addr.arpa 가 없습니다.

AD DS 승격 시 역방향 조회 영역은 기본으로 생성되지 않습니다. 정방향 영역만 만들어집니다. 이걸 모르면 찾기 어렵습니다.

5-4. PTR 조회를 직접 확인한다

PS> nslookup 192.168.126.40 127.0.0.1
DNS request timed out.
*** Request to localhost timed-out                       <- 실패

PS> nslookup lab-dc01.lab.example.com 127.0.0.1
Name:    lab-dc01.lab.example.com
Address: 192.168.126.40                                  <- 정방향은 정상

5-5. 그런데 공식 문서에는 역방향 DNS가 요건으로 없다

여기서 정직하게 짚고 갈 것이 있습니다. NetApp의 AD 조인 사전 요건 문서를 확인해보면 역방향 조회(PTR)에 대한 언급이 없습니다. 요구하는 것은 정방향 연결뿐입니다.

The LIFs must be able to connect to the DNS servers that are configured on the SVM and to an AD domain controller of the domain to which you want to join the SMB server.

Create SMB servers in an ONTAP Active Directory domain

그런데 이 랩에서는 역방향 영역을 만든 직후 조인이 통과했습니다. 사실과 해석을 구분해두겠습니다.

구분내용
실측 사실조인 로그에 host-address ... not found / Operation timed out 이 찍혔고, 역방향 영역 생성 후 조인 성공
해석 (문서 미확인)Kerberos가 SPN을 만들 때 IP를 호스트명으로 되돌려야 해서 실패했다 — 문서로 확인하지 못한 추론

덧붙이면, 운영 중인 AD 환경에서는 역방향 영역이 이미 만들어져 있는 경우가 대부분이라 이 문제를 만날 일이 드뭅니다. 새로 세운 랩이나 신규 도메인에서 주로 걸립니다.

5-6. 왜 NXDOMAIN이 아니라 타임아웃인가

PS> Get-DnsServerForwarder
UseRootHint : True
IPAddress   :            <- 포워더 없음

역방향 영역이 없으니 DNS 서버는 루트 힌트로 재귀를 시도합니다. 그런데 조회 대상이 사설 IP(192.168.126.40) 입니다. 인터넷에 물어봐야 답이 있을 리 없고, 결국 타임아웃이 납니다.

이것이 로그의 [2201] Operation timed out 입니다.

실패 연쇄 정리

ONTAP이 192.168.126.40 의 PTR 조회
  -> DC에 역방향 영역 없음
  -> 포워더도 없어 루트 힌트로 재귀 (사설 IP를 인터넷에 조회)
  -> 답 없음 -> 타임아웃
  -> Kerberos가 SPN을 만들지 못함
  -> GSSAPI SASL 바인드 실패
  -> "LDAP Error: Local error" 로 보고

6. 해결

DC에서 역방향 조회 영역을 만들고 PTR을 등록합니다.

Add-DnsServerPrimaryZone -NetworkId 192.168.126.0/24 `
    -ReplicationScope Domain -DynamicUpdate Secure

ipconfig /registerdns

확인:

PS> nslookup 192.168.126.40 127.0.0.1
Name:    lab-dc01.lab.example.com
Address: 192.168.126.40                    <- 즉시 응답으로 바뀜
Windows Server DNS 관리자에서 126.168.192.in-addr.arpa 역방향 영역에 192.168.126.40의 PTR 레코드가 lab-dc01.lab.example.com으로 등록된 화면
역방향 영역이 생기고 192.168.126.40 의 PTR이 lab-dc01.lab.example.com 으로 등록됐다. 조인 실패의 원인이던 그 조회다.

이 상태에서 조인을 재시도하면 통과합니다.

cluster1::> vserver cifs show
Vserver     Server Name   Status Admin   Domain/Workgroup   Authentication Style
CIFS_SVM    NAS1          up              LAB                domain

cluster1::> vserver cifs check -vserver CIFS_SVM
                    Cifs NetBIOS Name : NAS1
                          Cifs Status : Running
                                 Site : Default-First-Site-Name
Node Name       DC Server Name     DC Server IP     Status  Status Details
cluster1-01     LAB.EXAMPLE.COM    192.168.126.40   up      Response time (msec): 10
cluster1-02     LAB.EXAMPLE.COM    192.168.126.40   up      Response time (msec): 258

양 노드 모두 DC에 연결되고 사이트도 인식했습니다. AD 쪽에서도 컴퓨터 계정이 실제로 만들어졌는지 확인합니다.

Active Directory 사용자 및 컴퓨터에서 lab.example.com Computers 컨테이너에 NAS1 컴퓨터 계정이 생성된 화면
lab.example.comComputers 컨테이너에 NAS1 이 생성됐다. -ou 를 주지 않으면 여기가 기본값이다.

7. 공유 생성과 권한 두 겹

cluster1::> vserver cifs share create -vserver CIFS_SVM -share-name window_vol1 -path /window_vol1

CIFS 접근은 권한 2항목입니다. 한쪽만 열려 있으면 거부됩니다.

cluster1::> vserver cifs share access-control show
Vserver     Share Name    User/Group          Type      Permission
CIFS_SVM    window_vol1   Everyone            windows   Full_Control     <- 공유 권한
cluster1::> vserver security file-directory show -vserver CIFS_SVM -path /window_vol1
                Security Style: ntfs
                          ACLs: NTFS Security Descriptor
                                Owner:BUILTIN\Administrators
                                DACL - ACEs
                                  ALLOW-Everyone-0x1f01ff              <- 파일 권한

이 랩에서는 둘 다 열려 있어 문제가 없었습니다. 접근이 거부되면 두 곳을 모두 확인하십시오.

실무에서는 공유 권한 쪽에서 막는다

Windows ACL은 폴더와 파일 개체가 많아지면 권한 승계에 시간이 많이 걸립니다. 장애가 나면 아예 접근 불가 상태가 되는 경우도 많습니다.

그래서 위 예시에서는 공유 권한이 Everyone 이지만, 실무에서는 Everyone 을 빼고 특정 계정만 넣어 접근을 허용하는 편이 낫습니다. 그렇게 하면 Windows ACL을 손댈 필요 없이 공유 단계에서 걸러집니다 — 애초에 공유에 붙지 못하기 때문입니다.

도메인 서버 정보가 꼬였을 때

cluster1::> cifs domain discovered-servers reset-servers -vserver CIFS_SVM

이 명령으로 가입된 서버 목록을 리셋해 다시 갱신시킵니다.

8. 접근 테스트

Windows 탐색기 →  \\192.168.126.21\window_vol1
Windows 탐색기에서 192.168.126.21의 window_vol1 공유에 접속해 파일 목록이 보이는 화면
IP로는 공유가 정상적으로 열린다. 이름(\\NAS1)으로는 아직 안 되는데, 그 이유는 아래에서 다룬다.

읽기·쓰기 정상 동작합니다. 협상된 프로토콜은 SMB 3.1.1 이고 인증은 Kerberos로 이뤄집니다.

ServerName : 192.168.126.21
ShareName  : window_vol1
Dialect    : 3.1.1

그런데 이름으로는 붙지 않는다

> net use \\NAS1\window_vol1
System error 67 has occurred.
The network name cannot be found.

DNS를 보면 이유가 보입니다.

PS> Get-DnsServerResourceRecord -ZoneName lab.example.com -RRType A | Select HostName
HostName
--------
lab-dc01
...                      <- nas1 이 없다

ONTAP은 CIFS 조인 후 DNS A 레코드를 자동으로 등록하지 않습니다. AD 컴퓨터 계정은 만들어지지만 A 레코드는 별개입니다. IP로는 붙고 이름으로는 안 되는 상태가 여기서 나옵니다.

방법은 두 가지입니다. DNS에 A 레코드를 수동으로 추가하거나, ONTAP의 동적 DNS 업데이트를 켜서 SVM이 직접 등록하게 하는 것입니다.

cluster1::> vserver services name-service dns dynamic-update show -vserver CIFS_SVM

서버가 몇 대 안 되면 수동 등록이 빠르고, 대수가 늘어나면 동적 업데이트 쪽이 관리가 편합니다.

9. 정리 — 어디를 봐야 하는가

증상확인할 곳
LDAP Error: Local error역방향 DNS 영역 (Get-DnsServerZone)
조인 로그에 host-address ... not found같음
Operation timed out (DNS)역방향 영역 없음 + 포워더 없음
Kerberos 관련 실패시각 오차 — 단 UTC 기준으로 비교할 것
공유 접근 거부share ACL NTFS ACL 양쪽
이름으로 접근 불가DNS A 레코드 (ONTAP이 자동 등록하지 않음)

에러 메시지가 가리키는 계층과 실제 원인의 계층이 다릅니다. LDAP 이라고 적혀 있어도 LDAP을 보면 안 됩니다. 로그를 위에서부터 읽어야 [2201] 을 발견할 수 있습니다.

같은 구조의 사례를 하나 더 보시려면 ONTAP NFS 마운트가 “access denied by server”로 거부될 때를 읽어보십시오. 그쪽도 에러 메시지가 원인을 잘못 가리키는 경우입니다.

댓글 남기기