Recommanded Free YOUTUBE Lecture: <% selectedImage[1] %>

Contents

소개

클라우드분야를 하다보니 개인적으로 VDI에 관심을 가지게 됐다. VDI를 하려면, 원격에서 실행되는 인스턴스의 그래픽 출력(모니터 화면)을 그대로 가져올 수 있어야 한다. 그냥 가져오는게 아니고 "지연없이, 빠르게" 로컬 모니터로 출력할 수 있어야 한다. 문서작성은 물론이고, 동영상 가능하면 게임화면까지도 표현할 수 있어야 한다. 이를 위해 몇 가지 원격 데스크탑 솔류션 - 엄격히 말하자면 원격데스크탑 솔류션이 아닌 그래픽 카드 가상화 솔류션이라고 해야 겠다. - 을 찾아서 테스트 해보기로 했다.

VNC를 이용한 Qemu 접근

데스크탑에서 KVM으로 가상 머신을 실행하면, 데스크탑에 가상머신 화면이 출력된다. 단순히 데스크탑 수준에서 가상화를 할 거라면 이 정도로 충분하지만, 서버가상화를 목적으로 한다면 원격에서 가상머신 화면에 접근할 수 있어야 한다. Qemu는 원격에서 가상머신에 접근할 수 있도록 VNC를 지원한다. -vnc 옵션을 이용해서 간단하게 vnc 서버 환경을 만들 수 있다.

# qemu-system-x86_64 -m 1024 -hda winxp.raw -vnc localhost:1 
이제 vnc 클라이어트를 이용해서 localhost의 :1 영역으로 접근하면 가상머신의 화면에 접근할 수 있다. 위 설정은 localhost 에서의 접근을 허용하고 있는데, 만약 인터넷을 통한 원격 접근을 허용하길 원한다면 0.0.0.0:1 과 같이 bind할 인터넷 주소를 설정하면 된다. 만약 여러 개의 가상머신에 대해서 vnc 접근을 원한다면 :2, :3, :4와 같이 다른 디스플레이 번호를 사용하면 된다.

vnc client를 이용해서 가상머신 화면에 연결해 보았다. client 프로그램으로 KDRC를 사용했다.
보낸 사람 Linux

vnc를 이용한 연결은 가상머신과 상관없이 작동하기 때문에, 특히 가상화 환경이나 클라우드 환경에서 가상머신을 관리하기 위한 목적으로 편리하게 사용할 수 있다.

spice

Spice는 QEMU에 맞물려서 돌아가는 원격 컴퓨팅 솔류션이다. 기본적으로 VNC나 FreeNX와 같은 종류의 소프트웨어라고 볼 수 있다. QEMU와 맞물려 돌아가기 때문에 게스트 VM에 별도의 Spice 프로그램을 설치할 필요 없이, 원격 컴퓨팅 서비스를 이용할 수있다. Qemu + vnc 조합과 동일한데, 성능은 훨씬 좋다. 게스트 VM을 위한 QXL 드라이버가 설치돼서, QEMU가 직접 화면을 컨트롤 할 수 있기 때문이다. (네트워크 환경을 예외로 한다면) 이론적으로는 로컬에서 화면을 제어하는 것과 차이가 없지 싶다.

아무 생각 없이 qemu에 spice 옵션을 주고 실행했더니 다음과 같은 에러메시지를 출력하며, 가상머신이 만들어지지 않는다.
$ qemu-system-x86_64 winxp.raw -spice port=5900,disable-ticketing -m 2048 -net nic -net user  
qemu-system-x86_64: -spice port=5900,disable-ticketing: there is no option group "spice"                    
spice is not supported by this qemu build.

그냥 spice가 빌드된 qemu를 설치하면 된다.
# apt-get install qemu-kvm-spice

이제 spice 빌드된 qemu로 VM을 실행하면 된다.
$ kvm-spice -enable-kvm -hda winxp.raw -spice port=5900,disable-ticketing -m 2048 -net nic -net user

spice 클라이언트를 이용해서 접속한다. 다양한 종류의 클라이언트 프로그램이 있는데, 텍스트 기반의 간단한 spice-client를 설치했다.
# apt-get install spice-client

이제 spice 서버로 접속하면 된다.
$ spicec -h localhost -p 5900

접근 해서 테스트를 해보면 vnc에 비해서 원격 데스크탑 환경이 매우 쾌적함을 느낄 수 있을 것이다. RDP를 이용해서 윈도우에 접속한 것과 차이를 느낄 수 없다. 왜 성능이 좋은지를 이유를 찾아봤다.

위 그림은 spice의 구조다.
  1. QXL Virtual GPU Driver : Qemu에 그래픽 디바이스가 올라간다.
  2. Guest OS는 QXL 드라이버를 이용해서, 그래픽 자원을 처리한다.
  3. 논리적으로 spice client는 Qemu의 QXL 디바이스와 직접 통신을 한다.
해서 spice를 이용하면 논리적으로 local에서와 동일한 수준의 데스크탑 환경을 원격에서 경험할 수 있다. 물론 어디까지나 논리적으로 그렇다는 의미다. 네트워크 지연, 그리고 물리적인 장치를 애뮬레이션 하는데 따른 지연을 감안해야 할 것이다.

spice의 특징은 다음과 같다.
  1. LGPL 기반의 Open Remote Computing 및 Virtual Desktop Interface Protocol
  2. Sound & Inputs (keyboard and mouse) 지원
  3. CAC Smart card
  4. USB Redirection
  5. Client side rendering
  6. Multiful sockets
  7. Para-virtual device
Natural API를 이용하기 때문에 screen scraping 작업이 없음 장치를 애뮬레이션 하기 때문에, 고급 기능을 기대하지는 않기 바란다. Direct-X 같은 거 지원하지 않는다. 하지만 사무환경을 위한 VDI 구축용도라면, 고려해볼 만 하다.

RDP를 이용한 접근

Qeumu의 포트리다이렉트 기능을 이용해서 RDP 접근도 가능하다. 다음은 RDP 접근을 위한 qemu 명령이다.
# qemu-system-x86_64 -m 1024 -hda winxp.raw -redir tcp:3389::3389 -k en-us
리눅스에서 rdesktop으로 테스트 해봤다.
# rdesktop localhost:3389 -g 800x600
확실히 vnc를 이용한 접근 보다 훨씬 빠르긴하다. RDP를 사용하다가 vnc를 사용하려면 그 답답함에 짜증이 날 정도다. 하지만 vnc나 spice를 대체하기에는 문제가 있다. 클라우드나 가상화 환경에서는 원격에서 운영체제 설치까지를 관리할 수 있어야 하는데, RDP는 Qemu에서 지원하지 않기 때문에 운영체제가 먼저 설치가 돼 있어야 한다는 문제가 있다.

ssh 보안 연결

호스트에서의 가상머신간 보안을 강화하고 싶다면 ssh를 이용해서 보안 터널을 만드는 방법도 있다. 참고로 vnc가 사용하는 표준 포트 번호는 5901이다.
ssh -L 5901:127.0.0.1:5901 xxx.xxx.xxx.xxx
xxx.xxx.xxx.xxx는 SSL 터널을 만들 가상머신의 IP 주소다.

앞으로 할 일

  1. FreeNX를 이용한 리눅스 데스크탑 연결

히스토리

  1. 2012년 6월 8일 작성