[Exchange 2010]RPC Client Access
Overview
아직 정식버전이 Release 되진 않았지만 Exchange 2010의 CAS Role서버에서 기존 Exchange 서버들과 가장 크게 달라진 점 중 하나는 MAPI연결이 CAS를 통해 이루어진다는 점일 겁니다.
Exchange Server 2010에서 Outlook MAPI 연결은 RPC Client Access라 불리는 새로운(업데이트된) Middle tier 컴포넌트를 통해서 CAS서버로 연결됩니다.
기존에 MAPI Connection이 Store에 직접 Access하는 것과 달리 이렇게 디자인이 변경된 이유는 Exchange 2010 에서 Store 문제 및 고가용성(High Availability) 즉, Database Availability Group 환경에 더 적합하도록 설계되었기 때문입니다.
특히 Exchange 2010에서는 DAG(Database Availability Group)이라는 고 가용성 솔루션의 이점을 활용하기 위해서 Mailbox 서버에 있는 Active Manager의 도움을 받아 CAS는 각 사용자의 Mailbox가 위치하는 Active서버를 찾아서 연결하도록 합니다.
그러나 RPC Client Access 서비스를 통해 모든 Client Access 방법을 제공하는 것은 아닙니다.
RPC Client Access 서비스를 통해서 처리되지 않는 내용
1. 이 서비스는 OWA 또는 EWS와 같은 다른 Exchange 컴포넌트를 처리하지 않습니다. 오직 MAPI 클라이언트를 위해 존재합니다
2. Outlook Anywhere 연결을 처리하지 않습니다. (기존과 동일하게 Rpcproxy를 통해 처리 됨)
3. Public Folder Access는 CAS의 RPC Client Access를 통해 처리되지 않습니다.
Outlook은 Public Folder Access를 위해 직접 MBX서버와 통신합니다.
위의 그림은 Exchange 2007과 Exchange 2010에서의 변경된 컴포넌트를 도식화한 내용입니다.
기존 버전과 달리 WebDav 를 지원하지 않는 점과 Outlook/MAPI Clients가 더 이상 MBX의 RPC를 통해 연결되지 않는 부분을 보실 수 있습니다.
Implementation of RPC Access
CAS서버가 MBX서버와 통신할 때 CAS서버는 사용자의 Databaes가 위치하는 MBX서버와 통신하게 됩니다. 기본적으로 모든 Mailbox Database들은 1개의 Client Access Server와 연결됩니다.
하지만 CAS서버를 여러 대로 구성하여 Network Load Balance 를 구성 하였을 경우는 어떻게 될까요? 한대의 CAS와 Mailbox Database가 연결되어 있다면 의미가 없겠죠?
이때 구성해야 할 부분이 CAS Array라는 부분입니다.
CAS Array라는 부분은 그리 어려운 개념이 아닙니다. 아래 그림에서처럼 모든 Mailbox Database는 여러 대의 CAS와 연결되기 위해서 공통된 하나의 이름이 필요합니다. 이는 마치 외부 Client가 NLB된 CAS에 접근하기 위해서 Virtual Name이 필요한 것과 동일한 개념입니다.
위에서 언급했듯이, 처음 CAS 와 MBX서버가 구성될 때 CAS Array는 자동으로 구성되지 않습니다. 이를 구성하기 위해서는 Exchange Management Shell을 통해서 구성해야 하며 명령어는
New-ClientAccessArray 또는 Set-ClientAccessArray 명령 셋을 통하여 구성하실 수 있습니다.
물론, CAS Array는 여러 대의 CAS서버가 구성된 환경에서만 필요한 내용이겠죠. 그럼 Client Access array에 대해서 조금 자세히 살펴보겠습니다.
RPC Client Access array 사용시 사전확인 내용
1. RPC Client Access 서비스의 Full기능을 사용하기 위해서 Outlook은 2007 또는 그 이상 버전이어야 합니다. CAS 서버의 일부가 Down되는 문제 등에서 정상동작하기 위해서 Autodiscover 서비스를 사용합니다. (현재 Office 2010이 Beta 버전이며 곧 Release되겠죠?)
2. MBX서버와 CAS서버는 하나의 서버에 구성될 수 있지만 CAS와 MBX서버를 분리하길 권장하고 있습니다.
3. Windows 2008환경에서 서버이름 및 포트번호에 기반한 Custom NLB 장비를 사용하여 CAS Array 를 구성하는 환경에서는 반드시 아래 hotfix가 적용되어야 합니다.
https://support.microsoft.com/?kbid=958178
Encryption
기본적으로 Outlook 클라이언트와 RPC Access Service 사이의 모든 세션은 암호화됩니다. Outlook 2007 또는 그 이상버전의 클라이언트에서는 자동으로 서버의 설정이 암호화를 요구하는지 요구하지 않는지에 따라 유연하게 연결을 변경하기 때문에 문제가 되지 않습니다.
하지만 그 이전버전의 Outlook 클라이언트(Outlook 2003 이하) 에서는 자동으로 암호화를 요구하는지 요구하지 않는지 확인할 수 없기 때문에 이러한 클라이언트가 존재하는 환경에서는 Set-RpcClientAccess 명령셋을 통해서 암호화 요구를 Disable해야 합니다.
Set-RpcClientAccess –EncryptionRequired:$False
하지만, 클라이언트 세션을 암호화하여 통신하는 부분은 보안적으로도 가장 권장되는 옵션이므로 Outlook 2007이전버전이 존재하는 환경에서 클라이언트들에서 암호화 기능을 Enable하기 위해서 그룹정책(Group Policy)을 통하여 구성하실 시 있으며 아래 그림과 같습니다.
Non Domain환경인 Workgroup 클라이언트에 Old 버전 Outlook이라면??
할 수 없습니다. Set-RpcClientAccess 명령어로 암호화 기능을 서비스에서 False 로 설정해서 사용하셔야 합니다.
Service
Services.msc 도구를 통해서 서비스 목록을 확인해 보시면 Microsoft Exchange RPC Clinet Access 서비스가 존재합니다.
이 서비스는 Microsoft.Exchange.RpcClient Access Service.exe 로 동작합니다.
RPC Client Access Array 구성 방법
간단히 요약하자면 구성 절차는 아래와 같습니다.
1. DNS에 RPC Client Access Array 연결을 위한 호스트 추가
2. 여러 대의 CAS서버를 Network load balancing 구성
3. New-ClientAccessArray 명령셋을 통하여 Client Access server array 구성
4. Set-MailboxDatabase명령셋을 사용하여 CAS Array와 Mailbox Database 연결
1,2번은 생략하겠습니다. 1번은 DNS에 A레코드로 구성하시면 되고 2번은 윈도우의 NLB를 구성하시거나 또는 외부 L4등의 장비를 통해서 구성하시면 됩니다.
3. New-ClientAccessArray 명령셋을 통하여 Client Access server array
a. 아래 명령어로 구성된 Client Access server array가 존재하는지 확인합니다.
Get-ClientAccessArray
b. 새로운 CAS Array를 생성하기 위해서 아래처럼 설정합니다.
New-ClientAccessArray –fqdn <FQDN_of_array>
(-Name 파라미터와 –fqdn 파라미터를 혼동하지 마십시요. –Name 파라미터는 지정하지 않을 경우 입력한 FQDN의 NetBios 이름으로 설정됩니다)
New-ClientAccessArray 로 설정된 값은 AD상에 아래 CN=Arrays아래에 CN=<Array Name> 에 저장되며 FQDN은 NetworkAddress Attribute 로 저장됩니다.
(설치 당시에는 Array가 구성되어 있지 않기 때문에 이 Attribute가 없습니다)
4. Set-MailboxDatabase명령셋을 사용하여 CAS와 Mailbox Database 연결
위에서 잠깐 언급했듯이 Client access array를 구성하기 전에 모든 Mailbox Database는 1개의 CAS서버와 연결되어 있습니다.
때문에 CAS서버를 여러대 배포하여 모든 CAS서버와 연결되길 원하시면 Array를 구성하셔야 합니다.
먼저 어떤 서버가 데이터베이스와 연결되어 있는지 확인하시려면 아래 명령어로 확인하실 수 있습니다.
Get-MailboxDatabase | fl name, Rpc*
위에서 설정한 Client Access array와 연결하기 위해서는 다음과 같은 명령어를 사용합니다.
Set-MailboxDatabase <MailboxDatabaseName> – RpcClinetAccessServer <FQDN or FriendlyName>
위의 예를 든다면 Full 명령어는 아래와 같습니다. 두 명령어 모두 적용 가능합니다.
Set-MailboxDatabase <MailboxDatabaseName> –RpcClinetAccessServer casarray
Set-MailboxDatabase <MailboxDatabaseName> –RpcClinetAccessServer casarray.contoso.com
이 명령어는 실제로 AD상의 Database에 대한 LegacyExchaneDN값을 변경합니다.
여러 개의 MailboxDatabase가 존재한다면 아래처럼 명령어를 사용하시면 됩니다.
Get-MailboxDatabase | Set-MailboxDatabaes –RpcClientAccessServer casarray.contoso.com
설정된 결과를 보고 싶으시면 아래 명령어로 확인하실 수 있습니다.
Get-MailboxDatabase | fl name, Rpc*
그 외…
Set-RpcClientAccess 명령어에는 많은 Parameter가 존재하며 이 중 자주 사용할만한 Parameter 들을 언급하자면,
1. BlockedClientVersions : 하위버전 Outlook 연결을 Block 하실 수 있습니다.
2. EncryptionRequired : $true 또는 $False로 설정하여 연결시 암호화 기능 사용 여부(위에서 언급)
3. MaximumConnections : 현재 허용되는 동시 Connection 수 제한( 범위 : 1 ~ 65535)
Exchange 2010 공부하시는데 도움이 되시길 바랍니다.
Written by Dyjung