Active Directory: 복제가 error 1722(The RPC server is unavailable)로 실패
안녕하세요, BlueByte입니다. 어제까지 멀쩡히 복제되던 도메인 컨트롤러가 이제 모든 확인 명령에 The RPC server is unavailable.로 답하고, repadmin /replsummary에는 status 1722 실패가 쌓입니다. 무언가 죽은 것은 아닙니다 — RPC가 source DC로 연결을 열지 못했다고 보고하는 것이고, 실제 원인은 거의 항상 RPC보다 아래 계층에 있습니다. 오늘은 이 오류가 어디에 나타나는지, 실제로 무엇을 알려주는지, 원인을 가르는 확인 절차, 원인별 해결, 그리고 새 사이트가 같은 곳에 다시 빠지지 않게 하는 법까지 하나씩 짚어보겠습니다.
1722가 나타나는 자리와 도구별 표현
하나의 status, 네 가지 얼굴입니다. repadmin이 가장 명확합니다:
C:\> repadmin /showrepl
==== INBOUND NEIGHBORS ======================================
DC=contoso,DC=com
HQ-SITE\DC01 via RPC
Last attempt @ 2026-09-25 09:41:12 failed, result 1722 (0x6ba):
The RPC server is unavailable.
7 consecutive failure(s).
Last success @ 2026-09-24 22:10:03repadmin /replsum·/showreps·/syncall 모두 같은 1722 (0x6ba)를 인용하며, /syncall은 이를 network error로 표현합니다. dcdiag는 Replications 테스트를 실패로 처리하고 DsBindWithSpnEx() failed with error 1722를 덧붙입니다. Active Directory Sites and Services의 Replicate Now는 DNS 조회 문제를 가리키는 문구로 끝나는 대화 상자를 띄웁니다 — 실제로 상당수가 DNS이기 때문에 쓸모 있는 힌트입니다. 복제 DC를 승격할 때는 helper DC에 NTDS Settings 개체를 만들려는 시점에서 실패합니다. Directory Service 이벤트 로그에서는 같은 status가 NTDS KCC 1311·1865·1925, NTDS Replication 1960, ActiveDirectory_DomainService 1125 뒤에 숨어 있습니다.
원인은 아래 계층인데 RPC가 1722를 보고하는 이유
RPC는 네트워크 전송과 응용 프로토콜 사이의 중간 계층이고, 실패 자체를 들여다보는 능력은 없습니다 — 하위 계층의 프로토콜 실패를 RPC 계층의 오류로 매핑할 뿐입니다. 1722 / 0x6ba / RPC_S_SERVER_UNAVAILABLE는 하위 계층 프로토콜이 연결 실패를 보고했을 때 기록되며, 대표적인 경우는 TCP connect 자체가 실패한 것입니다. Microsoft가 제시하는 원인 목록은 link local failure, DHCP failure, DNS failure, WINS failure, 방화벽 차단 포트를 포함한 routing failure, IPSec·네트워크 인증 실패, 리소스 한계, 그리고 상위 계층 프로토콜 미기동입니다. 실무에서는 순서대로 검증할 수 있는 세 갈래로 좁혀집니다: 이름 해석, 차단된 포트, 두 DC 중 한쪽의 호스트 설정.
어느 파트너·어느 파티션이 실패하는지 먼저 특정하기
destination DC에서 시작합니다 — 실패하는 RPC 클라이언트가 있는 쪽이기 때문입니다:
repadmin /replsummary
repadmin /showrepl * /csv > C:\temp\showrepl.csv
nltest /dsgetdc:contoso.com /force/replsummary는 DC별 최대 지연을 보여주고, CSV는 한 파트너만 실패하는지 전부 실패하는지 드러냅니다. 이 구분이 다음 행동을 정합니다. 한 파트너만 실패하면 특정 두 DC 사이의 경로 문제이고, 모든 파트너가 실패하면 destination 자신 — NIC, DNS 설정, 자체 호스트 방화벽 — 을 봐야 합니다.
방화벽을 건드리기 전에 DNS부터 배제하기
이름 해석 실패는 1722 복제 오류에서 큰 비중을 차지하므로 먼저 확인합니다. 아무것도 바꾸지 않는 점검이니 겁먹지 않아도 됩니다:
dcdiag /test:dns /v /e /f:C:\temp\dns.log
ping -a 10.20.4.11dcdiag /test:dns는 authentication·basic·forwarders·delegation·dynamic update·record registration 그룹을 모든 DC에 대해 실행한 뒤 PASS/FAIL 표와 조치 안내를 출력합니다. ping -a는 전형적인 사례를 잡아냅니다 — 몇 달 전 폐기한 장비를 가리키는 낡은 host 레코드입니다. 복제는 source DC의 GUID 기반 CNAME(_msdcs 하위)으로 바인딩하므로, 그 별칭이 없거나 glue 레코드가 다른 곳을 가리키면 일반 클라이언트 트래픽은 멀쩡해 보이는데 바인딩만 전부 실패합니다.
endpoint mapper와 동적 포트 범위 전체를 확인하기
endpoint mapper는 TCP 135에서 대기하며 서비스가 어느 임의 포트에 있는지 클라이언트에 알려 줍니다. 그래서 135만 열어서는 결코 충분하지 않습니다. Windows Server 2008 이후 기본 동적 범위는 49152–65535이고, Windows Server 2003이나 Windows 2000 DC가 남아 있는 혼합 모드 도메인은 1025–5000을 씁니다 — 오래된 문서에서 복사한 방화벽 규칙이 걸려 넘어지는 지점입니다.
Test-NetConnection -ComputerName DC01.contoso.com -Port 135
netsh int ipv4 show dynamicport tcpComputerName : DC01.contoso.com
RemoteAddress : 10.20.4.11
RemotePort : 135
TcpTestSucceeded : True
Protocol tcp Dynamic Port Range
---------------------------------
Start Port : 49152
Number of Ports : 16384135는 응답하는데 복제는 계속 실패한다면, mapper는 허용하고 상위 포트는 버리는 방화벽의 전형적인 신호입니다. 포트 하나 확인으로 부족할 때는 Microsoft의 portqry가 범위 전체를 훑습니다 — portqry -n DC01 -r 49152-65535 — 다만 별도로 내려받아야 하는 도구입니다. 범위 전체 개방이 어렵다면, 동적 범위 자체를 좁히는 대신 문서화된 레지스트리 값으로 AD 복제를 특정 포트에 고정하는 방법이 지원됩니다.
네트워크 점검으로는 잡히지 않는 호스트 쪽 원인 두 가지
DNS가 해석되고 포트도 열려 있다면 DC 자체로 눈을 돌립니다. 첫째는 RPC 클라이언트 프로토콜입니다. HKEY_LOCAL_MACHINE\Software\Microsoft\Rpc 아래 ClientProtocols 키가 있어야 하고, ncacn_http·ncacn_ip_tcp·ncacn_np·ncacn_ip_udp 네 개의 REG_SZ 값이 각각 rpcrt4.dll을 가리켜야 합니다. 키나 값 중 하나라도 없으면 정상 서버에서 가져와 import합니다.
Get-ItemProperty "HKLM:\Software\Microsoft\Rpc\ClientProtocols"둘째, DC 간 SMB signing 불일치도 같은 증상을 만듭니다. 문서화된 해법은 장비마다 손으로 맞추는 대신 Default Domain Controllers Policy의 Computer Configuration\Windows Settings\Security Settings\Local Policies\Security Options에서 일관된 설정을 내려보내는 것입니다. 목록에 둘 더 있습니다. UDP fragmentation은 RPC 실패처럼 보이는 복제 오류로 드러나는데 LSASRV 40960·40961 이벤트가 단서이고, Kerberos를 TCP로 강제하는 것이 문서화된 대응입니다. 그리고 불량 NIC 드라이버 — 최근 드라이버 업데이트가 있었다면 변경 이력에 함께 올려 두세요.
사례: 오래된 방화벽 규칙 뒤에 놓인 새 지사 사이트
목요일에 새 사이트로 지사 DC를 승격합니다. 승격은 성공하는데 금요일이 되니 repadmin /replsummary가 허브 DC 두 대 모두에 대해 1722를 보여줍니다. 그러면서도 지사 DC는 사용자 인증을 정상으로 처리합니다. 모든 파트너가 실패하므로 destination을 의심하고 DNS부터 봅니다 — dcdiag /test:dns는 통과하고 ping -a도 허브 DC를 정확히 해석합니다. Test-NetConnection -Port 135도 성공합니다. 바로 이 지점이 이 사례를 헷갈리게 만듭니다. mapper가 응답하니 방화벽은 무고해 보이니까요. 이어서 netsh int ipv4 show dynamicport tcp가 양쪽 모두 시작 포트 49152를 보고하는데, 2012년 문서에서 복사한 사이트 간 규칙은 1025–5000만 허용하고 있었습니다. 규칙을 양방향 49152–65535로 넓히자 해결되고, 이어서 실행한 repadmin /syncall /AdeP가 1분 안에 수렴합니다.
복제가 수렴하는지 확인하고, 포트를 문서로 남기기
확인은 명령 하나와 후속 하나입니다:
repadmin /syncall /AdeP
repadmin /replsummary/syncall /AdeP는 모든 파티션에 변경을 밀어 넣고 파트너별 결과를 보고하며, /replsummary의 최대 지연은 다음 주기에 늘지 않고 0을 향해 줄어야 합니다. 독립적인 확인으로 dcdiag /test:replications를 한 번 더 돌려 보세요. 예방은 대부분 문서화입니다. DC가 실제로 쓰는 동적 범위를 기록하고, DC 간 방화벽 규칙은 옛 도메인에서 물려받은 범위 대신 49152–65535로 작성하고, repadmin /replsummary를 기존 모니터링에 넣습니다. 복제 장애는 본래 조용하고, 조용한 장애가 비싼 장애입니다.
KCC 토폴로지 이벤트·깨진 신뢰 관계와 무엇이 다른가
1722 없이 KCC 1311이나 1865만 찍힌다면 전송이 아니라 토폴로지 문제입니다 — site link나 subnet 구성이 잘못되어 KCC가 완전한 spanning tree를 만들지 못한 것이고, 방화벽을 아무리 손봐도 나아지지 않습니다. 반대로 멤버 서버가 도메인과의 신뢰 관계가 실패했다고 호소한다면, 그것은 컴퓨터 한 대의 machine account 암호 문제이지 DC 간 경로 문제가 아닙니다 — repadmin 출력에는 나타나지 않습니다.
다음에 복제가 1722에서 멈추면 이 순서를 거꾸로 따라가 보세요. repadmin이 지목한 파트너와 파티션, DNS가 source DC의 _msdcs 별칭을 올바른 호스트로 해석하는지, 135와 동적 범위가 양방향으로 열려 있는지, 그리고 그 다음에야 DC 자체를 살펴보는 순서입니다.
관련 질문
source DC에 RDP는 되는데 어떻게 RPC server가 unavailable일 수 있나요?
포트가 다르기 때문입니다. RDP는 잘 알려진 단일 포트를 쓰지만, AD 복제는 먼저 TCP 135의 endpoint mapper에 접속한 뒤 실제 바인딩을 위해 임의로 할당된 상위 포트로 유도됩니다. 3389와 135는 허용하고 49152–65535는 막는 방화벽이면 대화형 로그온은 되고 복제만 안 되는 상태가 됩니다. portqry -r로 상위 범위를 확인하거나, Test-NetConnection으로 135는 성공하는데 복제는 계속 실패하는지를 보면 구분됩니다.
49152–65535를 다 열지 않고 복제를 포트 하나에 고정할 수 있나요?
가능하고, Microsoft도 Active Directory RPC 트래픽을 특정 포트로 제한하는 방법으로 문서화하고 있습니다. 주의할 점은 둘입니다. 클라이언트가 포트를 알아내는 경로이므로 TCP 135의 endpoint mapper는 여전히 필요합니다. 그리고 서로 복제하는 모든 DC에 같은 설정이 들어가야 하며, 아니면 실패 지점을 옮긴 것일 뿐입니다. LSA·SAM·NetLogon·DFSR 같은 다른 RPC 서비스는 별도로 설정하므로 복제만 고정한다고 나머지 범위가 닫히지는 않습니다.
1722가 나면 디렉터리 데이터가 유실된 건가요?
아닙니다. 복제는 재시도되고 경로가 복구되면 파트너끼리 알아서 따라잡습니다. repadmin /syncall /AdeP는 그 과정을 앞당기는 명령입니다. 진짜 위험은 개별 실패가 아니라 시간입니다. 포리스트의 tombstone lifetime을 넘겨 연결이 끊겨 있던 DC는 안전하게 복제를 재개할 수 없어 다시 구축해야 합니다. 감사 때 발견하지 말고 repadmin /replsummary에 알림을 걸어야 하는 이유가 여기에 있습니다.
dcdiag /test:dns에서 Forwarders만 FAIL인데 복제는 됩니다. 고쳐야 하나요?
전체 결과 대신 표를 읽어 보세요. 이 테스트는 DC별로 Auth·Basc·Forw·Del·Dyn·RReg를 보고하고, Forw의 FAIL은 상위 도메인과 하위 도메인 사이의 forwarder나 root hint가 테스트가 기대하는 형태가 아니라는 뜻입니다. 실제 문제이긴 하지만 오늘의 복제 실패와 같은 문제라는 보장은 없습니다. 이 항목은 별도 일정으로 정리하고, record registration과 basic이 통과했다면 포트와 레지스트리 확인으로 1722를 계속 추적하세요.
모든 DC가 서로에 대해 1722를 보입니다. 어디부터 볼까요?
대칭적인 실패는 한 경로가 끊긴 것이 아니라 공통된 무언가가 바뀐 경우가 많습니다. 최근 호스트 방화벽 정책·IPSec 정책·보안 기준선이 배포되지 않았는지 먼저 확인하세요. 차단된 포트와 네트워크 인증 실패는 둘 다 문서화된 원인입니다. 그다음 DC 두어 대에서 ClientProtocols 키를 확인하고 SMB signing 설정이 일치하는지 보세요. 정책으로 내려간 signing 불일치는 모든 쌍을 같은 방식으로 한꺼번에 무너뜨립니다.
참고 자료
- Microsoft Learn — Troubleshoot replication error 1722: The RPC server is unavailable (KB 2102154; symptoms, causes, DNS and port checks, ClientProtocols, SMB signing)
- Microsoft Learn — Configure a firewall for Active Directory domains and trusts (KB 179442; RPC endpoint mapper 135 and the 49152–65535 dynamic range on Windows Server 2008 and later)
Haneul Seo
Infrastructure engineer · 10+ years running Linux fleets
같은 카테고리 다른 글
systemd: Start request repeated too quickly
systemd는 StartLimitIntervalSec(기본 10초) 안에 StartLimitBurst(기본 5회)보다 많이 시작된 유닛의 시작을 거부하며, Restart=도 이 제한에 포함됩니다. 기본 RestartSec 100ms로는 크래시하는 서비스가 1초도 안 되어 다섯 번을 소진합니다. 저널에서 진짜 크래시를 찾아 고치고, reset-failed를 실행한 뒤, RestartSec로 재시작에 여유를 주세요.
SSH: Received disconnect ... Too many authentication failures
agent가 서버가 허용하는 것보다 많은 키를 내밀고 있습니다. sshd가 들여다보는 공개키 하나하나가 MaxAuthTries 시도를 한 번씩 소모하고 — 기본 6회, 하드닝된 호스트에서는 3회인 경우가 많습니다 — 정작 맞는 키는 차례가 오기 전에 연결이 끊깁니다. IdentitiesOnly=yes와 명시적 IdentityFile로 키 하나를 고정하면 시도 횟수가 1로 떨어집니다.
Windows Server RDS: The remote session was disconnected because there are no Remote Desktop License Servers available to provide a license
120일 RD Licensing 유예 기간이 끝났는데 세션 호스트가 쓸 수 있는 라이선스 서버가 없어 세션을 거부하는 상황입니다. GetGracePeriodDays 의 DaysLeft 가 0 이고 SpecifiedLSList 가 비어 있으면 몇 초 만에 확인됩니다. 해결은 활성화된 라이선스 서버와, 호스트 버전을 감당할 만큼 새 CAL 입니다. 2019 CAL 은 2022 세션 호스트를 서비스하지 못합니다. 여기에 배포 또는 Licensing 정책 설정과 두 서버 사이의 RPC 포트 개방이 따라옵니다.
Windows 11: NAS 공유 폴더를 열 때 "조직의 보안 정책이 인증되지 않은 게스트 액세스를 차단" (0x80070035)
Windows 10 Enterprise/Education/Pro for Workstations, Windows 11 Pro, Windows Server 2019 이후의 SMB 클라이언트는 기본적으로 게스트 로그온을 거부하고, Windows 11 24H2 Enterprise/Pro/Education 은 게스트 세션이 할 수 없는 SMB 서명까지 요구합니다. 그래서 게스트 접근만 제공하는 NAS 공유는 'block unauthenticated guest access' 대화상자, Error code 0x80070035, 또는 System error 3227320323 으로 실패하고, SmbClient/Security 로그에 Event ID 31017 'Rejected an insecure guest logon' 이 남습니다. Microsoft 가 권하는 해결은 NAS 에 실제 계정을 만들고 펌웨어에서 서명을 지원하게 하는 것입니다. Set-SmbClientConfiguration -EnableInsecureGuestLogons $true(24H2 는 -RequireSecuritySignature $false 까지)는 비상구이며, 그 클라이언트의 서명과 암호화를 포기하는 대가가 있습니다.
Ubuntu/Debian: E: Could not get lock /var/lib/dpkg/lock-frontend — 누가 쥐고 있고 어떻게 기다리는지
다른 패키지 관리자, 대개 부팅 때 persistent systemd 타이머로 발화한 Ubuntu 의 unattended-upgrades 가 여러분의 apt-get 이 도는 동안 dpkg 프런트엔드 락을 쥐고 있는 것입니다. Ubuntu 는 apt 바이너리에만 binary::apt::DPkg::Lock::Timeout "120" 을 실어 두어서 apt-get 은 즉시 포기하고 apt 는 기다립니다. 메시지의 PID 를 읽고, 실행이 끝나게 두거나 apt-get 에 -o DPkg::Lock::Timeout=<초> 를 주고, dpkg --configure -a 는 실제로 중단된 실행 뒤에만 쓰고, 락 파일은 절대 지우지 마세요. 보유자가 종료하면 커널이 푸는 fcntl 락입니다.
macOS: xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools)
macOS의 /usr/bin에 있는 git·make·clang 같은 개발 명령은 활성 developer 디렉터리로 넘겨주는 shim이고, xcrun은 xcode-select가 가리키는 디렉터리에 도구가 없다고 보고하는 것입니다 — 대개 macOS 메이저 업그레이드가 /Library/Developer/CommandLineTools를 비워 두었거나, Xcode가 옮겨지거나 삭제된 경우입니다. xcode-select -p와 패키지 영수증을 확인한 뒤 xcode-select --install로 Command Line Tools를 다시 설치하거나, 실제로 있는 Xcode를 xcode-select로 가리키면 됩니다.