Tag Archives: CentOS

CentOS + XEN 가상화 기반 포트 포워딩 (Port Forwarding)

[CentOS LVM 기반 XEN 가상화 구축하기]에서 XEN 환경의 가상화 시스템을 구축하는 경우를 정리하였습니다. 하지만 실제 서비스 환경에서는 공인 IP가 넉넉하게 주어지지 않기 때문에 IP를 아껴써야 하는 경우가 있을 수 있습니다. 이번에는 이런 환경에서 호스트서버의 특정 포트로의 요청을 공인 IP가 없는 내부 내트워크의 특정 가상 게스트포트 포워딩 하는 방법에 대해서 정리해 보겠습니다.

Libvirt-iptables-problem-xenhost-2

구글링해서 얻은 이미지입니다만, 내부 아이피만을 가진 게스트 서버들의 경우 virbr0를 통해 내부끼리의 통신을 할 수 있게 됩니다. 이러한 내부 내트웍으로의 통신이 가능해 지려면 virt-install 명령을 사용할 때 잊지 말고 다음과 같이 default 네트워크 설정을 해주시면 됩니다.

작업에 앞서 /etc/sysctl.conf 파일의 내용을 수정해 줍니다. 사용하는 이더넷 포트가 eth0일 경우

이제 변경된 설정 정보를 다시 로드 하겠습니다.

설정되어있는 브릿지 설정을 확인해 보겠습니다. 여기에서는 virbr0가 존재하는것을 확인하는것이 목적입니다.

존재하는군요. eth0의 브릿지 이름이 xenbr0인것도 확인해 둡니다. virbr0의 아이피 대역을 확인해 보겠습니다. 위의 그림처럼 192.168.122.1 이기를 바랍니다.

다행이도 192.168.122.1인것을 확인했습니다. 여기서는 iptables의 NAT 설정을 통한 포트포워딩을 구현해 보겠습니다. 먼저 준비사항으로 /etc/sysconfig/iptables에 다음과 같은 내용이 추가되어야 합니다.

2014포트 이후의 모든 포트들에 대하여 외부의 연결이 내부로 라우팅이 가능하도록, 또 그 결과를 다시 반환할 수 있도록 설정하였습니다.

prerouting_postrouting

PREROUTING, FORWARD 정의를 통해 라우팅이 결정되기 전에 로컬의 다른 네트워크로 패킷을 전달할 수 있습니다. POSTROUTING 설정을 통해 내부의 패킷이 다시 외부로 전달될 수 있도록 합니다.

이제 호스트 서버의 8080포트로 접근하는 패킷을 내부 게스트인 192.168.122.100의 80번 포트에 포트포워딩 하는 설정을 진행해 보겠습니다. 다시한번 /etc/sysconfig/iptables의 내용에 다음을 추가합니다.

여기서 주의할 점은 지금 추가하는 PREROUTING, FORWARD 룰은 먼저 추가했던 룰보다 위에 존재해야 한다는 점입니다.

xen_port_forwarding_8080_test

외부에서 호스트 서버의 8080포트로 접속해 봤더니 내부의 192.168.122.100 서버의 80번 포트로 연결되는것을 확인할 수 있었습니다.

참고

  • http://serverfault.com/questions/332684/remote-access-to-internal-machine-ssh-port-forwarding
  • http://wiki.xen.org/wiki/Xen_FAQ_Networking

CentOS LVM 기반 XEN 가상화 구축하기

centos

가상화 머신을 하나 가지고 싶다고 생각하던 중 실제로 구축을 해보고자 서버를 구매하였습니다. 처음에는 싱글 노드를 가진 OpenStack 시스템을 구축하고 싶었지만 생각보다 과정이 만만치 않더군요. 일단은 간단하게 Xen 서버를 구축하여 구동하기로 하였고 몇주째 사용중에 있습니다. 생각 이상으로 안정적인것 같아 설치 과정을 기록해 두고자 정리합니다.

제가 개발에 사용한 서버는 DELL PowerEdge C1100 중고에 72G메모리와 1TB 하드디스크 3개를 RAID5로 묶었습니다. CentOS는 현재 최신버전인 6.5를 설치하였습니다. 부가적인 서비스 모두 필요없으므로 [링크]에서 CentOS Minimal 버전을 다운로드 합니다.

xen_virtualization_01

페이지에서 위와 같이 64비트용 ISO를 다운 받습니다. 시디로 굽거나 USB에 구워서 사용하시면 됩니다. 이후에 서버에 일반적인 방식으로 설치를 하시면 됩니다. 다만 파티션의 전체를 LVM Volume Group으로 묶어서 사용합니다. 저의 경우 전체 2T용량을 다음과 같이 설정하였습니다.

결과적으로 2T의 용량중 55기가정도만 사용하고 나머지는 FREE 영역으로 놔두고 리눅스 설치를 진행합니다. 설치가 완료된 후 콘솔에 접속하여 용량을 확인해 보면 다음과 같이 설정된것을 확인할 수 있습니다.

CentOS의 설치가 완료되었지만 Minimal 버전의 경우 자동으로 네트워크 설정이 진행되지 않습니다. 수동으로 네트워크 설정을 진행해 보겠습니다. 내부의 가상 서버들이 모두 외부의 네트워크와 통신을 할 수있도록 브릿지(Bridge) 설정을 할 것입니다.

위와 같이  네트워크 설정을 진행해 주시면 네트워크의 준비는 끝납니다. 기본적으로 eth0에 할 설정을 xenbr0에 설정했다는것이 중요한 부분입니다. 예시에는 DHCP를 사용하는 네트워크 환경의 예시를 적어놓았는데 만약 고정 아이피를 사용할 경우 다음과 같이 설정하시면 됩니다.

이제 다음의 명령을 사용하여 네트워크 서비스를 구동해 줍니다.

정상적으로 네트워크가 돌아왔다면 CentOS 배포본의 업데이트를 진행해 봅시다. 업데이트에 문제가 없다면 XEN을 설치합니다.

/boot/grub/grub.conf 의 내용을 확인하여 정상적으로 커널이 추가되어있는지 확인해 봅니다. defaults 값이 0이고 kernel /xen.gz 같은 내용이 첫번째 커널로 정의되어있으면 정상입니다.

이제 재부팅을 해야 하는데요, 기왕 재부팅 할꺼 SELinux도 꺼두겠습니다.

이제 재부팅을 합니다.

재부팅이 정상적으로 되었다면 다음과 같이 정상적으로 XEN이 구동중인지 확인해 볼 수 있습니다.

여기서 유심히 봐야 하는 부분은 virt_caps인데요 CPU가 전가상화를 지원하고 BIOS에서 Enabled되어있다면 hvm이 보여집니다. hvm이 없다면 전가상화는 불가능한것으로 이해하시면 됩니다. 개인적으로 설정파일을 이용하는 xm 또는 xl 커맨드로의 가상서버 생성은 조금 복잡한것 같아 libvirt를 설치하겠습니다.

이번에는 가상 서버에서 사용할 디스크를 생성해 보겠습니다. 가상화 이미지 파일을 사용할수도 있지만 개인적으로 LVM 파티션을 직접 마운트하는 방식을 선호합니다.

vg_cloudsystem Volume Group 밑에 새롭게 500G 용량의 Logical Volume을 생성하였습니다. 만약에 잘못 생성하여 삭제할 일이 있을 경우 다음의 명령을 사용하여 삭제할 수 있습니다.

이제 가상 서버를 생성하기에 앞선 모든 준비가 끝났습니다.

위의 옵션은 다음과 같은 의미를 가지고 있습니다.

  • xen 타입의 가상화 서버를 생성 (–virt-type)
  • 가상화 서버의 이름은 theeye로 지정 (-n)
  • 메모리는 8기가를 할당 (-r)
  • CPU는 2개를 할당 (–vcpus)
  • /dev/vg_cloudsystem/lv_theeye LVM 파일 시스템을 사용 (-f)
  • 다음에서 제공하는 CentOS 미러 저장소 활용 (-l)
  • 반가상화(Para-virtualization)로 설정 (-p)
  • 설치할 OS의 타입은 리눅스 (–os-type)
  • GUI지원없이 설치 (–nographics)
  • 이더넷은 2개를 설정, eth0은 브릿지를 사용하고 eth1은 내부 가상 네트워크를 사용 (–network)

전가상화로 설치할 경우 -p 대신에 –hvm옵션을 사용하시면 됩니다. 잠시후 다음과 같은 설치 화면을 콘솔에서 볼 수 있습니다.

xen_virtualization_02

설치를 진행하기에 앞서 eth0과 eth1의 네트워크 설정을 어떻게 해야 할지에 대해 알아봅시다. 호스트 머신에서 ifconfig 내용을 확인해 보면 다음과 같은 내용을 확인할 수 있습니다.

여기서 기존에 정의하지 않았던 virbr0를 확인할 수 있습니다. 여기의 네트워크 대역이 192.168.122.0인것을 확인할 수 있습니다.

xen-bridge-vif

기본적으로 물리적인 eth0은 xenbr0 브릿지를 통해 dom0라는 가장 기본이 되는 가상 도메인의 eth0에 연결됩니다. 이를 통해서 다른 게스트들이 외부로의 통신이 가능해 집니다. 여기서 보여지는 vif들은 192.168.122.x를 부여받게 됩니다. 즉 새로 설치한 게스트의 eth0(bridge:xenbr0)은 xenbr0를 직접 사용하여 공용 아이피를 설정할 것이고 eth1(network:default)은 dom0의 사설 아이피를 설정할 것입니다.

잊지 말고 네트워크 서비스를 재시작 해줍시다. 이제 이 서버는 외부 네트워크뿐만 아니라 다른 가상 서버들과도 통신이 가능한 가상 서버가 되었습니다. xm help를 통해 어떤 작업이 가능한지 확인해 보시기 바랍니다. (xm top을 통해 전체 게스트들의 상태를 확인할수도 있습니다) 네트워크 문제가 발생했을 경우 콘솔에 바로 접속하는 방법은 다음의 명령어를 사용하시면 됩니다.

virt-install을 이용하여 설치할 때에 사용할 수 있는 원격지 저장소중에 제 생각에 빠른곳 몇개를 정리해 보았습니다.

  • CentOS : http://ftp.daum.net/centos/6.5/os/x86_64
  • Debian : http://ftp.kr.debian.org/debian/dists/stable/main/installer-amd64
  • Ubuntu(13.10) : http://ftp.ubuntu.com/ubuntu/dists/saucy/main/installer-amd64

참고

  • http://hustcalm.me/blog/2013/10/14/playing-with-xen-under-centos6-dot-4-to-build-your-own-vps/
  • http://drewsymo.com/2013/11/install-xen-4-with-libvirt-xl-on-centos-6-2014/
  • http://www.cyberciti.biz/tips/rhel-centos-xen-virtualization-installation-howto.html