Windows Server 2012 Hyper-V, 보다 완벽한 멀티 테넌트를 위해, PVLAN(Private VLAN), ACL, 고급 보안 기술까지..
지난 4월 8일에 포스팅한 Windows Server 다음 버전에서 많이 언급되는 멀티 테넌트(Multi-Tenant)란?의 기술적인 이야기입니다.
요사이 가상화의 트렌드가 조금 더 세부적으로 요구되고 있는 실정입니다. 지금까지의 가상화가 운영 체제 레벨의 가상화를 요구하였습니다만, 하드웨어 스펙이 올라가고, 더 많은 시나리오에서 가상화를 활용하기 때문입니다. 운영 체제만을 분리하여, 물리적인 머신에 분리 탑재할 경우, 가장 먼저 나오는 질문중 하나가 바로 보안에 대한 부분입니다.
“A 가상 머신과 B 가상 머신이 완벽하게 분리되어져 있나요?”
이 질문은 보안에 대한 질문입니다. A 머신에서 네트워크 모니터를 열고, B 머신의 네트워크 패킷을 볼 수 있는 건 아닌지? A 머신에서 보안 사고가 발생하면, B 머신에 영향을 주는 것은 아닌지?
해당 분야의 걱정을 없애기 위해서, 지금까지 활용했던 시나리오는 가상 머신에 부여된 네트워크 카드(NIC)을 분리하는 것이었습니다. 이러한 이유로 가상화 서비스를 제공하는 물리적인 머신에 다수의 NIC을 설치하여, 가상 머신 별로 부여하는 것이죠. 또한 NIC에 대한 네트워크 설정, 대표적으로 VLAN을 부여하는 방법도 여기에 해당됩니다.
VLAN을 활용하는 네트워크 설정은 VLAN 최대 갯수의 제한도 제한이지만, 다양한 설정이 복잡하게 반영될수록, 실수의 확률도 높아지게 됩니다. 네트워크 팀과 운영 체제 팀이 분리되어져 있을 경우, 문제 발생시, 이를 찾아내는 과정도 복잡해질 수 있습니다.
이러한 연유로 트렌드가 서서히 움직이는 것이 바로 가상화 레벨에서도 네트워크 기술을 가져가는 분위기가 일어나고 있습니다. 이에 맞춰 Windows Server 2012 Hyper-V에도 네트워크 레벨 기술이 기본적으로 탑재되고 있습니다.
- 가상 머신간 PVLAN(Private VLAN)을 부여
- 가상 머신에 대한 Layer 2,3에 대한 입출입 제어
- ARP ND/DHCP 가드와 같은 기본 보안 기술 탑재
- IP Rewrite, GRE를 통한 네트워크 가상화(Network Virtualization)
오늘은 이중 하나의 포스팅에서 살펴볼 수 있는 상위 3가지를 살펴보려고 합니다.
VLAN이라는 이름은 Virtual LAN의 약자입니다. LAN은 하나의 네트워크인데, VLAN을 통해 그 하나의 네트워크를 가상으로 나눠주는 것입니다. VLAN 번호를 부여하여, 같은 VLAN 번호의 스위치 포트에 연결된 머신끼리만 교신을 시켜주는 것입니다. 이 VLAN보다 조금 더 세밀한 설정을 부여하는 형태가 바로 PVLAN입니다. VLAN ID를 Primary VLAN ID, Secondary VLAN ID로 두개를 부여하여, 더 많은 VLAN을 부여할 수 있게 합니다.
이 PVLAN에는 3가지 모드가 있습니다. 위의 그림에도 보여지는 바와 같이 ISOLATED, COMMUNITY, PROMISCUOUS 모드입니다.
- ISOLATE : Layer 2에서도 상호간 교신이 안되는 모드입니다. 같은 PVLAN ID를 가지더라도 상호 교신이 불가능합니다.
- COMMUNITY : 같은 COMMUNITY ID간에는 교신이 가능한 모드입니다.
- PROMISCUOUS : Primary VLAN ID가 일치한 경우엔 상호 교신이 가능합니다.
위의 그림을 참고하시면 이해가 빠르실 것으로 보입니다. 마지막에 적혀있는 Trunk Mode의 의미는 해당 PVLAN 정보가 하나의 물리적인 Hyper-V 호스트에서만 활용할 수 있는 것이 아니라, 여러 Hyper-V 호스트 머신간 정보가 공유되는 모드라고 보실 수 있죠. 바로 Switch VLAN의 Trunk Mode와 유사합니다.
PVLAN 설정은 PowerShell을 통해서 하실 수 있습니다. 기본적인 VLAN 정보는 Get-VMNetworkAdapterVlan이며, 설정은 Set-VMNetworkAdapterVlan입니다.
중간 항목에 있는 Isolated 부분이 Community, Promiscous로 대체 가능하며, Promiscuous를 선택했을 경우엔, Primary VLAN ID만 같으면 되는 모드이기에, Secondary VLAN ID는 목록 형태가 되어야 합니다.
더이상 PVLAN을 활용하지 않을 경우엔 -Untagged를 활용합니다.
가상 머신의 네트워크 입출입을 Layer 2(MAC), 3(IP Address)에서 제어 가능한 방법은 바로 NIC에 대한 ACL(Access Control List)입니다. 바로 특정 VM에서 특정 MAC, IP 주소로 네트워크 패킷이 전달되는 것을 제어하는 방법입니다.
Add-VMNetworkAdapterAcl을 활용하면 됩니다. RemoteIPAddress가 IP 주소로 제어하는 것이며, MAC 주소에 대해서는 RemoteMACAddress를 사용합니다. 들어오고 나가는 패킷에 대한 제어는 Direction 속성(Both, Inbound, Outbound), 어떻게 할지에 대해서는 Action 속성(Allow, Deny, Meter)가 있습니다.
부여한 ACL에 대해서는 Remove-VMNetworkAdapterACL을 사용합니다.
오늘 소개할 마지막 기능은 바로 2가지 보안 기능입니다. 바로 DHCP 가드(DHCP Guard)와 라우터 가드(Router Guard)입니다.
DHCP Guard는 VM 레벨에서 허가받지 않은 DHCP 서버를 운영하지 못하게 할 수 있습니다. 바로 VM 레벨에서 DHCP 요청에 대해서 응답하지 못하게 하는 것입니다. DHCP 가드 사용을 체크할 경우, 해당 VM에서는 DHCP IP 요청에 대해서 응답할 수 없습니다. 라우터 가드의 경우엔 ARP 스푸핑(Spoofing)을 하기 위해, 전달되는 ARP 업데이트 브로드캐스트를 VM 레벨로 전달할 수 없게 하는 것입니다. 이에 대한 설정은 GUI 레벨과 PowerShell 레벨을 모두 제공합니다.
$feature.SettingData.EnableDhcpGuard = $true를 한 후, 이를 Add-VMSwitchExtensionPortFeature Cmdlet을 이용하면 됩니다.
보다 자세한 예제는 TechNet 사이트에서, Set-VMNetworkAdapterVLAN, Add-VMNetworkAdapterACL, Add-VMSwitchExtensionPortFeature 를 살펴보세요~!
PowerShell 레벨의 명령어가 많기에, 조금 복잡해 보일 수 있지만, Layer 2,3에 대한 제어를 가상화 레벨에서 직접할 수 있게 된 것은 매우 환영할만한 일입니다. 가상화를 운영하는 입장에서는 네트워크 윗단의 부분만이 아닌, 실제 머신을 제어하듯이 네트워크까지 제어하는 방향으로 가고 있고, 이에 Hyper-V 역시, 이러한 요구 사항을 적절히 기술로 구현해 놓았습니다.
다음 시간엔 네트워크 가상화에 대한 부분을 살펴보겠습니다.
Comments
Anonymous
July 15, 2012
항상 느꼈던 부분이지만 VMware에 비해 약했던 부분이 vNetwork 관련 부분이었는데 드디어 필요한 기능들이 추가된 것 같습니다. 3년전 아직 관리적인 부분에서 부족한 부분이 많아 클라이언트 1곳의 서버 통합을 vSphere 4.1로 진행하여 마무리 하였습니다. vSphere 5.0의 당혹스러운 vTax 덕에 upgrade는 꿈도 못꾸는 상황이라 2012는 정말 많은 기대를 하고 있었고, Build Windows 사이트는 정말 즐거운 경험을 간접적으로 하게 하여 주었습니다. 반대 급부로 한꺼번에 많은 기능들이 추가되어 이제야 조금씩 추가된 부분과 개념에 대해 전체적으로 정리를 해 나가고 있으며, 차후 문제의 사이트는 Hyper-V 3.0 기반으로 마이그레이션 할 예정입니다. 개인적으로 Physical > vSphere > Hyper-V > vSphere > Hyper-V 라는 조금 황당한 일을 진행해 본 경험이 있었기에 V2V 자체는 그리 어렵지(어렵다기보다 손이 고됩니다..하하)않았지만 항상 관리적인 부분에서 많이 힘들었고, 근래들어 보안 관련 이슈가 대두되는 시기이기에 많은 기대를 하고 있습니다. 다음 포스팅도 기대하고 있겠습니다...^^Anonymous
April 26, 2014
정말 정말 좋은 내용 감사합니다~ ^^ 개인블로그에서도.. 살짜쿵.... 퍼갈께요~ ^^