RDS 드레인 모드(Drain Mode)를 사용하면 원격 데스크톱 서비스(Remote Desktop Services) 팜 내의 터미널 호스트를 효율적으로 관리할 수 있습니다. RDS 서버에 드레인 모드를 활성화하면 새로운 사용자의 RDP 연결은 차단되지만, 기존에 연결된 RD 세션은 사용자가 직접 로그오프하거나 RDS 세션 타임아웃에 의해 자동으로 종료될 때까지 유지됩니다. 이를 통해 RDS 팜 전체의 운영을 중단하지 않고도 Windows Server 호스트를 유지보수할 수 있습니다(Windows 업데이트 설치, 서버 또는 애플리케이션 설정 변경, 구성 파일 업데이트 등).
Windows Server 원격 데스크톱 서비스의 드레인 모드란?
드레인 모드는 Windows Server 2008(터미널 서비스 서버 드레인 모드)에서 처음 도입되었습니다. RDS 호스트를 드레인 모드로 전환하면 더 이상 새로운 사용자 연결을 수락하지 않습니다. 일반적으로 서버 관리자가 RDS 팜 전체의 가용성에 영향을 주지 않으면서 서버를 유지보수해야 할 때(Windows 업데이트 설치, 애플리케이션 구성 또는 업데이트 등) 이 모드를 사용합니다. RDS 호스트는 다음 세 가지 드레인 모드 유형 중 하나로 작동할 수 있습니다.
- 모든 연결 허용(Allow All Connections) (기본 모드) — RD 세션 호스트가 새로운 연결을 수락합니다.
- 재연결 허용, 새 로그온 차단(Allow Reconnections, but Prevent New Logons) — 사용자는 기존 세션에 재연결할 수 있지만 새 세션 생성은 허용되지 않습니다. 서버를 재시작하면 사용자가 해당 서버에 연결할 수 없게 됩니다.
- 서버 재시작까지 재연결 허용, 새 로그온 차단(Allow Reconnections, but Prevent New Logons until the Server Is Restarted) — 이전 모드와 유사하지만, 재시작 후에는 로그온 모드가 '모든 연결 허용'으로 초기화됩니다.
RD 세션 서버에 새 사용자 로그온을 거부하는 방법
RDS 호스트 서버에서는 RDS 컬렉션 설정을 통해 드레인 모드를 활성화할 수 있습니다.
- 서버 관리자(Server Manager)를 열고 모든 서버(All Servers)로 이동한 후 팜의 모든 RDS 서버를 추가합니다.
- 서버 관리자의 왼쪽 패널에서 원격 데스크톱 서비스(Remote Desktop Services)를 선택하고 RDS 컬렉션을 선택합니다.
HOST SERVERS섹션에서 드레인 모드를 활성화할 서버를 선택한 후, 컨텍스트 메뉴에서 새 연결 허용 안 함(Do not allow new connections)을 선택합니다.
활성 원격 데스크톱 세션이 있는 사용자는 계속 서버에 재연결할 수 있으며, 새로운 연결은 RD 연결 브로커(RD Connection Broker)에 의해 RDS 팜 내의 다른 호스트로 자동 전달됩니다.
또한 명령 프롬프트를 통해 RDS 호스트에 로컬로 드레인 모드를 설정할 수도 있습니다. 이때 change logon 명령을 사용합니다.
새로운 사용자 연결을 차단하려면 아래 명령을 실행합니다.
change logon /drain
New user logons are DISABLED, but reconnections to existing sessions are ENABLED
이제 새로운 사용자가 RD 연결 브로커를 거치지 않고 RDS 호스트에 직접 연결을 시도하면 다음과 같은 오류가 표시됩니다.
Remote logins are currently disabled.
동시에 RDS 호스트 로그에는 이벤트 ID 1070, 원본이 TerminalServices-RemoteConnectionManager인 이벤트가 기록됩니다.
A logon request was denied because the RD Session Host server is currently in drain mode and therefore not accepting new user logons. To configure the server to allow new user logons, use the Remote Desktop Services Configuration tool.
다음 명령은 호스트가 재시작될 때까지 드레인 모드를 유지합니다.
change logon /drainuntilrestart
활성 세션이 있는 사용자까지 포함하여 모든 사용자의 연결을 차단하려면 다음 명령을 실행합니다.
change logon /disable
Session logins are currently DISABLED
클라이언트 세션 모드로 원격 데스크톱 세션 호스트에 연결된 상태에서 위 명령으로 접근을 차단한 후 로그오프(logoff.exe)하면, 이후에는 콘솔 모드(mstsc /admin)로만 서버에 접속할 수 있습니다.
연결을 다시 허용하려면 다음 명령을 사용합니다.
change logon /enable
RDS 서버에서 드레인 모드가 활성화되어 있는지 확인하려면 아래 명령을 실행합니다.
change logon /query
Session logins are currently ENABLED
change logon 명령으로 드레인 모드를 설정하려고 할 때 다음과 같은 오류가 발생할 수 있습니다.
Connections are currently ENABLED by Group Policy for this machine, unable to change.
이는 드레인 모드가 GPO(그룹 정책)를 통해 구성되어 있다는 의미입니다. 해당 정책 설정의 이름은 사용자가 원격 데스크톱 서비스를 사용하여 원격으로 연결할 수 있도록 허용(Allow users to connect remotely using Remote Desktop Services)이며, 다음 GPO 경로에서 찾을 수 있습니다: 관리 템플릿(Administrative Templates) → Windows 구성 요소(Windows Components) → 원격 데스크톱 서비스(Remote Desktop Services) → 원격 데스크톱 세션 호스트(Remote Desktop Session Host) → 연결(Connections).
이 정책을 비활성화하거나 구성되지 않음(Not Configured)으로 설정하십시오.
PowerShell을 사용하여 Windows Server RDS 호스트의 드레인 모드 설정
PowerShell을 사용하여 RDS 호스트 컬렉션 또는 독립 실행형 RDS 서버의 드레인 모드를 관리할 수 있습니다.
Import-Module RemoteDesktop
# 원격 데스크톱 서비스 호스트에 대한 새 RDP 연결 차단
Set-RDSessionHost -SessionHost mun-saprdsh1.woshub.com -NewConnectionAllowed No -ConnectionBroker mun-saprdcb.woshub.com# 연결 허용
Set-RDSessionHost -SessionHost mun-saprdsh1.woshub.com -NewConnectionAllowed Yes -ConnectionBroker mun-saprdcb.woshub.com
드레인 모드를 활성화하거나 비활성화하면 다음 레지스트리 값이 변경됩니다.
- WinStationsDisabled — HKLM\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\
- TSServerDrainMode — HKLM\System\CurrentControlSet\Control\Terminal Server\
예를 들어, 드레인 모드가 활성화되면 레지스트리 값이 WinStationsDisabled = 0, TSServerDrainMode = 2로 설정됩니다.
아래 PowerShell 스크립트를 사용하여 호스트에서 드레인 모드가 활성화되어 있는지 확인할 수도 있습니다.
Get-WmiObject win32_terminalservicesetting -N "root\cimv2\terminalservices" | %{
if ($_.logons -eq 1){
"Disabled"}
Else {
switch ($_.sessionbrokerdrainmode)
{
0 {"Enabled"}
1 {"DrainUntilRestart"}
2 {"Drain"}
default {"error"}
}
}
}
PowerShell을 통해 드레인 모드를 활성화하려면(change logon /Drain과 동일):
$temp = (Get-WmiObject win32_terminalservicesetting -N "root\cimv2\terminalservices")
$temp.sessionbrokerdrainmode=2
$temp.put()
RDS 호스트를 일반 모드로 되돌리려면(change logon /enable과 동일) 다음 명령을 실행합니다.
$temp = (Get-WmiObject win32_terminalservicesetting -N "root\cimv2\terminalservices")
$temp.sessionbrokerdrainmode=0
$temp.logons=0
$temp.put()