CentOS 6.0은 RHEL 6.0기반으로 만들어진 리눅스 배포판이다. RedHat은 전략적으로 KVM을 기본 하이퍼바이저로 채택하고 더 이상 Xen을 하이퍼바이저에 대한 도구를 제공하지 않는다. 그 말인즉 CentOS 6.0은 기본적으로 Xen의 dom0로 사용 될 수 없다. 아래에는 CentOS 6.0을 Xen dom0로 사용할 수 있는 방안을 살펴보고 설명하고자 한다.

 이제 그럼 설치를 시작 해보자.

설치 환경
운영체제: CentOS 6.0 x86_64
커널: 3.0


1. CentOS 6.0의 설치


이 문서에서는 독자들이 기본적으로 Linux 배포판을 다운로드 및 설치 할 수 있다는 가정하에 설명을 진행하고자 한다. 즉 설치 과정을 자세히 다루지 않고 꼭 설정하고 넘어가야 하는 부분만 언급 하고자 한다. 

데이터 파티션 나누기.

파티션을 다양한 방법으로 나눌 수 있지만 최소 아래 파티션들은 나누고 시작 하자.

Hard Drivers
sda1      /boot      ext4
sda2      vg00      physical volume (LVM)

LVM Volume Groups
lvroot      /              ext4
lvswap                  swap
Free 


여기서 눈여겨 볼 것은 LVM PV(물리 볼륨) 및 VG(가상 볼륨)을 하나씩 만들고 VG에는 루트 파티션, 스왑 파티션 및 가상 머신들에서 사용 할 Free 파티션을 만든다.

설치 할 서비 타입은 "Basic Server"이고, 설치할 패키지들은 다음과 같다.

"Development tools"
"Additional Development"
"Debugging Tools"
"System administration tools"
"Compatibility libraries"
"Console internet tools"
"Desktop Platform Development"


2. CentOS 6.0 설치 후 설정


/etc/sysconfig/network-scripts/ifcfg-ethx 파일을 수정한다. 만약 이더넷 인터페이스 카드가 하나이면 ifcfg-eth0파일을 수정 하면 되겠다.

# cat /etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE="eth0"

HWADDR="00:11:22:33:44:55"

NM_CONTROLLED="no"

ONBOOT="yes"

BOOTPROTO="dhcp"


여기서 NM_CONTROLLER = "no" 및 ONBOOT = "yes" 으로 설정이 되어있음을 눈여겨 보아야 한다. 네트워크 활성화는 ifup eth0로 해준다.

hosts 파일을 열고 hostname이 hosts파일에 포함 되어 있는지 확인 한다.

SElinux를 비활성화 시킨다. /etc/selinux/config 파일을 열고 SELINUX=disable로 설정한다.

3. Xen RPMS 컴파일을 위한 필수 패키지 설치


Xen RPM을 컴파일 하기 위하여 아래와 같은 필수 패키지 및 자주 사용할 패키지들을 설치한다.

# yum install screen vim wget tcpdump ntp ntpdate man smartmontools links lynx ethtool xorg-x11-xauth

# yum install transfig wget texi2html libaio-devel dev86 glibc-devel e2fsprogs-devel gitk mkinitrd iasl xz-devel bzip2-devel pciutils-libs pciutils-devel SDL-devel libX11-devel gtk2-devel bridge-utils PyXML qemu-common qemu-img mercurial texinfo libuuid-devel

# yum  glibc-devel.i686


4. Xen src RPM 설치 및 재빌드


Xen 설치를 위하여 먼저 RPM 소스를 빌드한다.

# mkdir /root/src && cd /root/src

# wget http://ftp.funet.fi/pub/mirrors/fedora.redhat.com/pub/fedora/linux/releases/14/Everything/source/SRPMS/xen-4.0.1-6.fc14.src.rpm 

# rpm -i xen-4.0.1-6.fc14.src.rpm

# cd /root/rpmbuild/SPECS

# rpmbuild -bb xen.spec


/usr/include/gnu/stubs-32.h is needed by xen


빌드 도중 이런 오류메시지가 뜨면 xen.spec을 vi로 열고
# so that x86_64 builds pick up glibc32 correctly 
부분을 찾은 후 코멘트 밑 stubs-32.h를 stubs-64.h 로 바꿔주고 다시 rpmbuild -bb xen.spec 해준다.

빌드가 끝나면 이제 빌드된 RPM들을 설치한다. 그런데 CentOS 6.0에는 qemu-common RPM이 존재하지 않는다. RepoForge에서 배포중인 RHEL6용 RPM을 다운로드하여 설치하거나 qemu src.rpm 를 Fedora버젼용으로 받아서 CentOS 6용으로 빌드한다. 아래는qemu rpm src를 빌드하여 하는 방법을 아래에 소개 할가 한다.

# cd /root/src

# wget http://ftp.funet.fi/pub/mirrors/fedora.redhat.com/pub/fedora/linux/updates/13/SRPMS/qemu-0.13.0-1.fc13.src.rpm

# rpm -i qemu-0.13.0-1.fc13.src.rpm

# cd /root/rpmbuild/SPECS

# rpmbuild -bb qemu.spec

# cd /root/rpmbuild/RPMS/x86_64

# rpm -Uvh qemu-common-0.12.5-1.el6.x86_64.rpm

Preparing...                ########################################### [100%]

   1:qemu-common            ###########################################[100%] 

이제 xen을 설치할 준비가 되었다. 전에 빌드한 xen rpm 디렉토리로 이동하여 rpm을 설치하자.
 

# cd /root/rpmbuild/RPMS/x86_64/

# rpm -Uvh xen*4.0.1-6*.rpm

Preparing...                ########################################### [100%]

   1:xen-licenses       ########################################### [ 13%]

   2:xen-libs                ########################################### [ 25%]

   3:xen-hypervisor    ########################################### [ 38%]

   4:xen-runtime         ########################################### [ 50%]

   5:xen                        ########################################### [ 63%]

   6:xen-devel             ########################################### [ 75%]

   7:xen-doc                ########################################### [ 88%]

   8:xen-debuginfo    ########################################### [100%]


이것으로 Xen 하이퍼바이저 사용을 위한 도구 및 라이브러리 설치를 끝냈다.
 

5. Xen dom0 및 domU를 지원하기 위한 커널 설치


7월 22일에 릴리즈된 리눅스 Kernel 3.0부터 Xen의 dom0및 domU를 지원한다. 2.6.x를 사용했던 시기에 별도 커널 패치를 해주어야 만 dom0및 domU등을 지원했었지만, 이제부터 3.0설치로만 모든 패치 작업은 줄일 수 있다. 그러면 먼저 최신 커널을 커널배포 공식 사이트인 kernel.org에 접속하여 다운로드 받자. 이 문서에서는 kernel 3.0을 설치하는 것을 예제로 들고 있다.

# cd /usr/local/src
# wget  http://www.kernel.org/pub/linux/kernel/v3.0/linux-3.0.tar.bz2
# tar xvfj linux-3.0.tar.bz2 -C /usr/src
# cd /usr/src
# ln -s ./linux-3.0 linux 


커널을 받은 후 설치하기 위하여 커널 소스 컴파일 과정을 거쳐야 한다. dom0머신은 가상화를 위한 최소 기능만 탑재하면 성능상 향상을 가져 올 수 있으므로 컴파일시 필요한 정보를 저장하는 샘플 config파일을 받아오고 그것을 기반으로 수정해 나가자. 커널 설정에 필요한 자세한 정보는 아래 사이트에서 확인 할 수 있다. http://wiki.xensource.com/xenwiki/XenParavirtOps

샘플 config파일은 아래 사이트에서 참조하도록 하자.
http://pastebin.com/NAV1iUG3

dom0를 사용하기 위한 예제 옵션들을 보이면 다음과 같다.

CONFIG_ACPI_PROCFS=y

CONFIG_XEN=y

CONFIG_XEN_MAX_DOMAIN_MEMORY=32

CONFIG_XEN_SAVE_RESTORE=y

CONFIG_XEN_DOM0=y

CONFIG_XEN_PRIVILEGED_GUEST=y

CONFIG_XEN_PCI=y

CONFIG_PCI_XEN=y

CONFIG_XEN_BLKDEV_FRONTEND=m

CONFIG_XEN_NETDEV_FRONTEND=m

CONFIG_XEN_KBDDEV_FRONTEND=m

CONFIG_HVC_XEN=y

CONFIG_XEN_FBDEV_FRONTEND=m

CONFIG_XEN_BALLOON=y

CONFIG_XEN_SCRUB_PAGES=y

CONFIG_XEN_DEV_EVTCHN=y

CONFIG_XEN_GNTDEV=y

CONFIG_XEN_BACKEND=y

CONFIG_XEN_BLKDEV_BACKEND=y

CONFIG_XEN_NETDEV_BACKEND=y

CONFIG_XENFS=y

CONFIG_XEN_COMPAT_XENFS=y

CONFIG_XEN_XENBUS_FRONTEND=y

CONFIG_XEN_PCIDEV_FRONTEND=m


만약 CentOS 5를 dom0로 사용하려면 아래와 같은 두 옵션을 꼭 확인 하자. 아니면 부팅이 실패한다.
 

CONFIG_SYSFS_DEPRECATED=y

CONFIG_SYSFS_DEPRECATED_V2=y


config설정이 정확히 이루어 졌다고 판단되면 커널 빌드 및 설치를 해보자. 주의할 것은 3.0과 같은 새로운 커널을 해당 커널 보다 버젼이 낮은 config파일을 사용하여 빌드하려면 make oldconfig를 사용하여 config파일을 새로 작성 하는 것을 잊지 말자.

# make oldconfig
# make -j4 bzImage
# make -j4 modules
# make modules_install 


커널 설치는 수동으로 진행하고 새로운 커널을 위한 initrd (initramfs) 이미지 파일을 생성한다.

# depmod -a 3.0.0

# cp -a arch/x86/boot/bzImage /boot/vmlinuz-3.0.0

# cp -a System.map /boot/System.map-3.0.0

# cp -a .config /boot/config-3.0.0

# cd /boot

# dracut initramfs-3.0.0.img 3.0.0


눈여겨 볼것은 CentOS 6부터 mkinitrd 명령어가 사라지고 대신 dracut 명령어가 생겼다. initramfs는 이제 dracut 툴로 생성해야만 한다.
/boot/grub/grub.conf 파일을 수정하여 Xen을 위한 커널 부팅 항목을 추가한다.
필자의 경우는 커널 3.0.0을 설치하고 root파티션이 /dev/mapper/vg_mcloud-LogVol00에로 LVM 논리 볼륨이 vg_mcloud/LogVol00 에로 매핑되어 있어 아래와 같이 부팅 항목을 추가하였다.

title Xen 4.0 with Linux 3.0.0 dom0

        root (hd0,0)

        kernel /xen.gz dom0_mem=1024M loglvl=all guest_loglvl=all

        module /vmlinuz-3.0.0 ro root=/dev/mapper/vg_mcloud-LogVol00 rd_LVM_LV=vg_mcloud/LogVol00 nomodeset

        module /initramfs-3.0.0.img


ntsysv 유틸리티를 실행하여 ksm 및 ksmtuned 서비스들을 끈다.

머신을 재부팅한다. 정상적으로 커널로 부팅 되기를 기도하자~ 

6. Xen 설치 유효성 검사


정상적으로 부팅 되었으면 Xen이 정상적으로 설치 되었는지 확인해보자.

# uname -a
 Linux mcloud 3.0.0 #1 SMP Mon Aug 1 21:09:53 KST 2011 x86_64 x86_64 x86_64 GNU/Linux


커널 3.0.0에로 정상적으로  부팅되었음을 확인 할 수 있다.

# xm list

Name                                        ID   Mem VCPUs      State   Time(s)

Domain-0                                     0  1024     4     r-----     22.0


# xm info
host                   : mcloud

release                : 3.0.0

version                : #1 SMP Mon Aug 1 21:09:53 KST 2011

machine                : x86_64

nr_cpus                : 4

nr_nodes               : 1

cores_per_socket       : 4

threads_per_core       : 1

cpu_mhz                : 2394

hw_caps                : bfebfbff:28100800:00000000:00001b40:0098e3fd:00000000:00000001:00000000

virt_caps              : hvm hvm_directio

total_memory           : 16374

free_memory            : 15134

node_to_cpu            : node0:0-3

node_to_memory         : node0:15134

node_to_dma32_mem      : node0:2995

max_node_id            : 0

xen_major              : 4

xen_minor              : 0

xen_extra              : .1

xen_caps               : xen-3.0-x86_64 xen-3.0-x86_32p hvm-3.0-x86_32 hvm-3.0-x86_32p hvm-3.0-x86_64 

xen_scheduler          : credit

xen_pagesize           : 4096

platform_params        : virt_start=0xffff800000000000

xen_changeset          : unavailable

xen_commandline        : dom0_mem=1024M loglvl=all guest_loglvl=all

cc_compiler            : gcc version 4.4.4 20100726 (Red Hat 4.4.4-13) (GCC) 

cc_compile_by          : root

cc_compile_domain      : 

cc_compile_date        : Mon Aug  1 20:47:52 KST 2011

xend_config_format     : 4


위와 같은 메시지가 뜬다면 xen이 정상적으로 설치 된 것이다. 

7. libvirt 및 virt-manager를 이용한 Xen관리


CentOS 6.0에 기본으로 설치된 libvirt는 Xen을 지원하지 않으므로 RPM 소스를 받아 빌드 한다. 그전에 최대한 머신에 설치된 libvirt와 버젼을 마추어야 하므로 머신에 설치된 libvirt의 버젼을 우선 확인해보자.

# rpm -qa | grep libvirt

# yum list | grep libvirt

fence-virtd-libvirt.x86_64             0.2.1-5.el6                      base    

fence-virtd-libvirt-qpid.x86_64        0.2.1-5.el6                      base    

libvirt.x86_64                         0.8.1-27.el6_0.6                 updates 

libvirt-cim.i686                       0.5.8-3.el6                      base    

libvirt-cim.x86_64                     0.5.8-3.el6                      base    

libvirt-client.i686                    0.8.1-27.el6_0.6                 updates 

libvirt-client.x86_64                  0.8.1-27.el6_0.6                 updates 

libvirt-devel.i686                     0.8.1-27.el6_0.6                 updates 

libvirt-devel.x86_64                   0.8.1-27.el6_0.6                 updates 

libvirt-java.noarch                    0.4.5-2.el6                      base    

libvirt-java-devel.noarch              0.4.5-2.el6                      base    

libvirt-java-javadoc.noarch            0.4.5-2.el6                      base    

libvirt-python.x86_64                  0.8.1-27.el6_0.6                 updates 

libvirt-qpid.x86_64                    0.2.22-3.el6                     base    

ocaml-libvirt.x86_64                   0.6.1.0-6.2.el6                  base    

ocaml-libvirt-devel.i686               0.6.1.0-6.2.el6                  base    

ocaml-libvirt-devel.x86_64             0.6.1.0-6.2.el6                  base  


보다싶이 0.8.1버젼이 설치되었거나 기본 레포지터리에 등록이 되어있다. RPM 소스를 받아 빌드 해보자. 먼저 RPM소스를 받고 spec파일에 xen 지원 패치를 해준다. libvirt와 의존적인 라이브러리도 미리 설치해주는 것을 잊지 말자.

# wget ftp://ftp.redhat.com/pub/redhat/linux/enterprise/6Server/en/os/SRPMS/libvirt-0.8.1-27.el6.src.rpm
# rpm -i libvirt-0.8.1-27.el6.src.rpm 
# wget http://pasik.reaktio.net/xen/patches/libvirt-spec-rhel6-enable-xen.patch 
 # cd /root/rpmbuild/SPECS

# cp -a libvirt.spec libvirt.spec.orig

# patch -p0 < /usr/local/src/libvirt-spec-rhel6-enable-xen.patch

patching file libvirt.spec
 # yum install libnl-devel xhtml1-dtds libudev-devel libpciaccess-devel yajl-devel libpcap-devel avahi-devel parted-devel device-mapper-devel numactl-devel netcf-devel iscsi-initiator-utils


급급히 libvirt를 빌드하려고 들지 말자. 현재 Xen용 커널로 부팅된 상태에서 절대로 libvirt 빌드가 잘 되지 않을 것이다. 아래와 같은 오류가 뜨면서 test에서 fail한다.

PASS: nodedevxml2xmltest

TEST: interfacexml2xmltest

      ...................                      19  OK

PASS: interfacexml2xmltest

====================

1 of 46 tests failed

====================

make[2]: *** [check-TESTS] Error 1

make[2]: Leaving directory `/root/rpmbuild/BUILD/libvirt-0.8.1/tests'

make[1]: *** [check-am] Error 2

make[1]: Leaving directory `/root/rpmbuild/BUILD/libvirt-0.8.1/tests'

make: *** [check-recursive] Error 1

error: Bad exit status from /var/tmp/rpm-tmp.GVVB5G (%check)



RPM build errors:

    Bad exit status from /var/tmp/rpm-tmp.GVVB5G (%check)


절대 당황하지 말자. grub.conf를 수정하여 Xen커널이 아닌 원래 커널로 복귀한다.
재부팅 후 다시 libvirt 빌드를 시도해보자.

/root/rpmbuild/RPMS 폴더에 libvirt RPM파일들이 정상적으로 생성됨을 확인한다.

# yum install ebtables lzop nc
# cd /root/rpmbuild/RPMS/x86_64/

# rpm -Uvh --force libvirt-*

# rpm -Uvh --force libvirt-*  

Preparing...                ########################################### [100%]

   1:libvirt-client         ########################################### [ 20%]

   2:libvirt                ########################################### [ 40%]

   3:libvirt-python         ########################################### [ 60%]

   4:libvirt-devel          ########################################### [ 80%]

   5:libvirt-debuginfo      ########################################### [100%] 

# chkconfig --list libvirtd

libvirtd        0:off   1:off   2:off   3:on    4:on    5:on    6:off 

마지막으로 chkconfig --list libvirtd 하여 libvirtd가 시스템 부팅시 자동으로 시동되는 레벨을 살펴본다. 345레벨로 정해져 있으면 정확한 것이다. 이제 Xen용 커널로 부팅하자.

# virsh list

 Id Name                 State

----------------------------------

  0 Domain-0             running


위에서와 같이 virsh list하였을 때 Domain-0 인스턴스가 보이면 libvirt와 xen이 정상적으로 연동되어 설치되었음을 확인 할 수 있다.

8. virt-manager를 사용하여 Xen을 관리하기


libvirt가 설치되었으니 이제 virt-manager를 설치 및 이를 이용하여 가상 머신을 생성해 보자.
virt-manager는 간단히 yum 으로 설치 가능하다.

# yum install virt-manager


아래는 virt-manager가 실행되고 있는 모습이다.



현재는 Dom0 VM만 활성화 되어 있음을 볼 수 있다. 
이제 Create New VM 메뉴를 이용하여 새로운 VM 인스턴스를 만들어 보자.
이 문서에서는 두 인스턴스를 만들고 각 인스턴스 마다 CentOS 6 및 Ubuntu 11.04를 설치하는 것을 예제로 보여주고자 한다. 실제 Guest OS 설치는 일반 baremetal 머신에 리눅스 설치와 같다. 단지 인스턴스 생성시 여러가지 설정 사항들이 많아 헛갈릴 수 있는데 아래에 그 과정을 스크린 샷으로 자세히 설명하고자 한다.



새로운 인스턴스를 만들고 리눅스 이미지는 로컬 디스크에서부터 가져와 설치한다. 



설치시 사용할 ISO의 위치를 지정하고 OS 타입 및 버젼을 명시한다.



VM 인스턴스의 메모리 사이즈 및 CPU 코어 개수를 지정한다.



가상 디스크를 LVM 매니저를 통하여 미리 만들어 놓는다. 여기서 필자는 CentOS6라는 LVM을 만들었다.



위에서 만든 LVM위치를 새 VM 인스턴스의 기본 디스크 공간으로 지정한다.



아래와 같이 가상화 방식은 paravirt를 선택하고 NAT방식으로 네트워크를 구성한다.



부팅하면 미리 지정해준 미디어로 시작하고 CentOS 6 설치화면이 뜬다.



필요한 소프트웨어 패키지들을 선택하고 설치를 시도한다.





CentOS 6 (Dom0)에서 CentOS 6(DomU)를 접근하고 있는 모습이다.



이번엔 Ubuntu 11.04 용 인스턴스 생성 및 OS 설치 과정을 스크린샷으로 보여 주고자 한다.



아래 이미지는 Xen 4.1에 Android X86을 설치한 모습이다.



작성 중...

참고문헌: 
http://wiki.xensource.com/xenwiki/RHEL6Xen4Tutorial
http://wiki.xensource.com/xenwiki/XenParavirtOps
저작자 표시 비영리 변경 금지
TRACKBACK 0 AND COMMENT 1
  1. ^^ 2012/01/04 12:42 address edit/delete reply

    설치다하고 커널까지 virt-manager 실행하려고
    # virt-manager 입력했는데
    file "/usr/share/virt-manager/virt-manager.py", line 383 , in<module> main()
    file ""/usr/share/virt-manager/virt-manager.py", line 286, in main raise gtk-error

    runtimeError: could not open display
    라고 되네요 검색을해도 잘 모르겠습니다.
    virt-manager 실행하려면 어떻게하죠? x-window 를 설치해야되는 문제인가요?




이 문서는 CentOS 6 배포판에서 poptop/xl2tp 오픈소스를 이용하여 VPN 서비스를 구축하는 것을 설명한다. 이 문서에서 CentOS 6.0 Basic Installation을 기반으로 하기 때문에 poptop/xl2tp 설치에 필요한 므든 의존 라이브러리에 대하여서는 언급 하지 않는다.

Point to Point Tunneling Protocol과 Layer 2 Tunneling Protocol은 VPN 프로토콜을 가장 전형적인 프로토콜이며 각기 PPTP 및 L2TP라는 짧은 약자를 가지고 있다. 이하 설명은 모두 약자를 사용하여 진행한다.
 
PPTP는 LAN 환경이 구축되기 이전의 모뎀 사용시에 많이 사용 되었던 Point to Point Protocol을 사용하여 구성 되었다. PPTP는 마이크로 소프트에 의하여 VPN을 구축하기 위하여 창안되었으며 현재 가장 널리 사용되는 VPN 프로토콜이기도 하다.

L2TP 역시 많이 사용하는 VPN 프로토콜이지만 IPSec와 연동하여 많이 사용되며 IPSec을 위한 키를 만들기에 여러가지 번거로움이 있다. 

PPTP는 PPP의 여러 인증 방식을 사용하는데 여기서 PAP와 MS-CHAP2가 가장 전형적이다.

A. PAP
Password Authentication Protocol (PAP)은 인증 프로토콜로 인증 파일의 암호부분을 지정하지 않으면 시스템 계정의 비밀번호를 이용하여 인증하므로 sniffing에 취약하다.

B. MS-CHAP v2
이 역시 암호화된 인증 프로토콜로 VPN 사용자 인증시 사용 된다.

PAP는 보안에 많이 취약하며 현재 많이 사용되지 않는다. 이 문서에서는 MS-CHAP v2 인증 방식을 이용하여 VPN 서비스를 구축하는것을 예를 들어 설명하고자 한다.

위에서 설명한 두가지 암호화의 의미는 인증단계에서의 비밀번호 암호화만 의미하며 PPTP는 패킷에 특정 헤더를 추가하여 패킷을 캡슐화하는 것이 아니기 때문에 이런 상태에서 전송되는 모든 데이터는 암호화 되어 있지 않다. 모든 전송 패킷을 암호화 하기 위하여 MPPE라는 암호화 프로토콜을 사용한다. MPPE는 전송 되는 모든 데이터를 암호화 시시켜주는 역할을 한다. MPPE는 PAP환경에서 사용 할 수 없다.

 이제 그럼 설치를 시작 해보자.

설치 환경
운영체제: CentOS 6.0 x86_64
커널: 3.0


1. pptpd의 설치


2011년 7월 현재 CentOS 공식 및 EPEL 레포지터리에는 아직 PPTPD 패키지가 등록되어 있지 않았다. 소스 컴파일로 PPTPD를 설치하기 귀찮으므로 RPM패키지를 모아 놓은 레포지터리를 찾아서 추가한다. poptop 오픈 소스 개발 팀에서 이미 PPTPD 패키지를 레포지터리에 올려 레포지터리 추가만으로 쉽게 PPTPD를 설치 할 수 있다.


 yum을 이용한 설치가 끝났다... 필자는 인터넷 상에 존재하는 수많은 문서들을 참고하면서 시도를 했는데 대부분 문서들에서 kernel_ppp_mppe를 설치하는 부분까지 있었다. 하지만 CentOS 5.0이상부터 커널에 기본 kernel_ppp_mppe 모듈이 포함이 되어 있으므로 이 부분은 건너뛸 수 있다. kernel_ppp_mppe 모듈 설치 여부를 알아 보는 방법은 다음과 같다.

# modprobe ppp-compress-18 && echo ok


 만약 OK를 반환하면 kernel_ppp_mppe 모듈이 설치되어있음을 의미한다.

2. pptpd의 설정


# vi /etc/pptpd.conf


맨 마지막 부분 

# localip 192.168.0.1
# remoteip 192.168.0.234-238,192.168.0.245

를 주석문 속에서 빼낸다.

위에서 처럼 설정하면 서버는 192.168.0.1 IP를 할당 받고 VPN 클라이언트는 자동으로 이 IP 게이트웨이로 할당 받아 모든 패킷은 이 IP로 전송 된다.
또한 remoteip가 234 - 245이므로 총 11개의 IP를 VPN 클라이언트가 할당 받게 되고, 다 시 말해서 최대 11개의 클라이언트의 동시 접속을 지원 할 수 있다. 만약 서버의 네트워크 throughput이 크고 사양도 좋다면 클라이언트에 할당 가능한 IP의 개수를 적절히 늘일 수 있다.

# vi /etc/ppp/options.pptpd


mppe-128를 주석문속에 넣는다. 이유는 이 설정을 주석처리 하지 않으면 특정 사이트에 접속이 되지 않는다. 주석처리하고 pptp 클라이언트 상에서도 해당 옵션을 사용치 않도록 한다.

ms-dns를 주속문속에서 빼고 DNS를 설정 해준다.

나머지는 기본 설정대로 사용 하면 된다.

# vi  /etc/ppp/chap-secrets


# Secrets for authentication using CHAP

# client        server  secret                  IP addresses
####### redhat-config-network will overwrite this part!!! (begin) ##########
aaa                *    password@                      *
bbb                *    password@                      *
####### redhat-config-network will overwrite this part!!! (end) ############

위에서 처럼 사용자명, 사용할 프로토콜, 비밀번호 및 접속허용할 아이피대역을 설정한다.
여기서 만약 비밀번호를 ""로 지정하면 (즉 공백) PAM을 이용하여 VPN 사용자를 인증할 수 있는데 이때 /etc/passwd에 사용자 인증정보를 사용한다.

이제 iptables 설정을 해보자. iptables 설정을 하지 않으면 VPN 서버에 연결되었다 할 지라도 패킷 포워딩을 하지 않아 인터넷에 연결되지 않는다.

# iptables --append INPUT --protocol 47 --jump ACCEPT
# iptables --append INPUT --protocol tcp --match tcp --destination-port 1723 --jump ACCEPT
 
다음 클라이언트에서 ipv4 패킷을 받으면 포워딩 하도록 설정 해준다.

# vi /etc/sysctl.conf 


# Controls IP packet forwarding

net.ipv4.ip_forward = 1

net.ipv4.ip_forward를 0에서 1로 바꾼다.

변경사항을 저장하고 빠져나와서

# sysctl -p


명령어를 날려 포워딩 설정을 곧바로 적용한다.

# service iptables save


지금 까지 설정한 iptables 설정들을 저장한다.

# vi /etc/sysconfig/iptables


# Generated by iptables-save v x.x.x on xxx

*nat
:PREROUTING ACCEPT [10:584]
:POSTROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A POSTROUTING -o eth0 -j MASQUERADE
COMMIT
# Completed on Wed Jan 10 15:17:43 2007
# Generated by iptables-save v1.2.11 on Wed Jan 10 15:17:43 2007
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [387:86918]
:RH-Firewall-1-INPUT - [0:0]
-A INPUT -j RH-Firewall-1-INPUT
-A INPUT -p gre -j ACCEPT  
-A INPUT -p tcp -m tcp --dport 1723 -j ACCEPT
-A FORWARD -j RH-Firewall-1-INPUT
-A RH-Firewall-1-INPUT -i lo -j ACCEPT
-A RH-Firewall-1-INPUT -p icmp -m icmp --icmp-type any -j ACCEPT
-A RH-Firewall-1-INPUT -p ipv6-crypt -j ACCEPT
-A RH-Firewall-1-INPUT -p ipv6-auth -j ACCEPT
-A RH-Firewall-1-INPUT -d 224.0.0.251 -p udp -m udp --dport 5353 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp -m udp --dport 631 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
#-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited
COMMIT
# Completed on xxx

위에서 처럼 설정이 저장되었는지 확인한다. 볼드체로 표시된 부분을 눈 여겨 보자.  
 
iptables 변경 사항들을 적용한다.

# service iptables restart


pptpd 서버를 시작 하거나 재시동 한다.

# service pptpd restart-kill
# service pptpd start 


3. L2TPD 설치


L2TPD VPN 오픈 소스는 많으며 이 문서에서는 그중 많이 사용되는 xl2tp 설치 과정을 예제로 보여준다.
L2TPD 설치에 앞서 IPSec 설치 및 설정을 해야 한다.

# yum install openswan


OpenSwan IPSec 서비스의 한 오픈소스이다.
openswan이 설치 되었으면 이제 설정을 할 차례이다.

# vi /etc/ipsec.conf


version 2.0


config setup
        virtual_private=%v4:10.0.0.0/8,%v4:192.168.0.0/16,%v4:172.16.0.0/12
        oe=off
        protostack=netkey
        nat_traversal=yes

conn L2TP-PSK-NAT
        rightsubnet=vhost:%priv
        also=L2TP-PSK-noNAT

conn L2TP-PSK-noNAT
        authby=secret
        pfs=no
        auto=add
        keyingtries=3
        rekey=no
        ikelifetime=8h
        keylife=1h
        type=transport
        left=서버아이피를 기입한다
        leftprotoport=17/1701
        right=%any
        rightprotoport=17/%any

IPSec에 쓰일 Shared Key를 설정하자.

# vi /etc/ipsec.secrets


서버아이피주소 %any: PSK "암호화키"


패킷 리다이렉션 설정을 한다.

# for each in /proc/sys/net/ipv4/conf/*
> do
> echo 0 > $each/accept_redirects
> echo 0 > $each/send_redirects
> done


IPSec 서비스를 재시동 한다.

# service ipsec restart


IPSec 서비스의 유효성 여부를 체크한다.

# ipsec verify


이제 L2TP를 구현한 오픈 소스 xl2tp를 설치한다.

# yum install libpcap-devel xl2tp ppp


4. L2TPD 설정


# vi /etc/xl2tpd/xl2tpd.conf


[global]

ipsec saref = yes

[lns default]
ip range = 10.1.2.2-10.1.2.254
local ip = 10.1.2.1
refuse chap = yes
refuse pap = yes
require authentication = yes
ppp debug = yes
pppoptfile = /etc/ppp/options.xl2tpd
length bit = yes

# vi /etc/ppp/options.xl2tpd


require-mschap-v2

ms-dns 8.8.8.8
ms-dns 8.8.4.4
asyncmap 0
auth
crtscts
lock
hide-password
modem
debug
name l2tpd
proxyarp
lcp-echo-interval 30
lcp-echo-failure 4

기타 설정은 PPTP 설정시 했으므로 여기서 skip한다.

마지막으로 xl2tp 데몬을 구동해보자

# service xl2tpd start


5. Windows 7 클라이언트 설정


바탕 화면에서 네트워크 아이콘에 오른쪽 마우스를 클릭하여 속성에 들어가거나 제어판에서 네트워크 및 공유 센터에 들어간다.


새 연결 또는 네트워크 설정을 클릭한다.


회사에 연결을 선택하여 VPN 연결을 새로 생성한다.
 


연결 방법에서 내 인터넷 연결 사용 (VPN) (I) 선택한다.
 


연결할 VPN 주소 및 그에 대한 설명을 기입한다.
 

 
사용자 이름 및 암호를 입력한다.
 

 
첫 연결 시 오류가 발생 할 것이다. 당황하지 말자. 연결 설정을 꾸욱 눌러 현재까지 생성한 VPN연결 설정을 저장한다.
 

 
다시 네트워크 및 공유 센터로 돌아온다. 이번엔 어댑터 설정 변경 항목을 선택한다.
 

 
생성한 xxx SERVER를 마우스 오른쪽 버튼으로 클릭한 속성으로 들어간다.
 

 
만약 PPTP 기반 VPN 서비스를 사용려면 보안 탭에서 VPN종류 및 데이터 암호화 방식을 아래 그림에서와 같이 설정한다.
 

 
PPTP가 아닌 L2TP 기반 VPN 서비스를 사용려면 보안 탭에서 VPN종류 및 데이터 암호화 방식을 아래 그림에서와 같이 설정한다.


네트워킹 탭에서 IPV4가 하이라이트 된걸 확인한 후 속성을 클릭한다.
 

 
IP및 DNS는 서버에서 자동으로 할당 받으므로 넘어가자. 고급을 클릭한다.
 

 
원격 네트워크에 기본 게이트웨이 사용(U) 항목이 선택되어 있음을 확인 한다.
 

 
확인을 쭉 클릭하여 창에서 빠져 나온 후, xxx SERVER에 연결한다.
  


연결 대화창이 뜨면 연결을 누른다. 이미 아이디와 비밀번호는 기본으로 입력이 되어있으므로 무시한다.

 
약 5초 정도 지나면 VPN연결이 되고 네트워크 및 공유 센터에서 xxx SERVER 엑세스 형식이 인터넷으로 되어 있음을 확인 할 수 있다.
 

 
VPN 서비스를 즐긴다~
저작자 표시 비영리 변경 금지
TRACKBACK 0 AND COMMENT 0



Ubuntu 10.10에 NS-2 설치기

1. NS2 2.34 다운로드와 설치하기

NS2를 성공적으로 설치 하기 위하여서는 NS2가 의존하고 있는 여러 패키지가 우분투상에 설치가 되어 있어야 한다. 로그인한 사용자 아이디가 abc라고 가정하고 NS2를 해당 사용자 홈 디렉토리에서 부터 설치한다고 하자.

$ cd /home/abc
$ wget http://nchc.dl.sourceforge.net/sourceforge/nsnam/ns-allinone-2.34.tar.gz
$ tar xvfz ns-allinone-2.34.tar.gz -C ./
$ cd ns-allinone-2.34
$ sudo apt-get install build-essential autoconf automake libxmu-dev gcc-4.3
$ export CC=gcc-4.3
$ sudo sh ./install

2. 환경변수 설정하기

$ gedit ~/.bashrc

아래 환경변수 설정관련 내용을 복사하여 .bashrc에 붙혀 넣는다.

# NS2 Version & Path
NS2_VER=2.34
OTCL_VER=1.13
TCL_VER=8.4.18
TK_VER=$TCL_VER
NAM_VER=1.14
NS2_PATH=$HOME/ns-allinone-$NS2_VER
# LIBRARY
OTCL_LIB=$NS2_PATH/otcl-$OTCL_VER
NS2_LIB=$NS2_PATH/lib
X11_LIB=/usr/X11R6/lib
USR_LOCAL_LIB=/usr/local/lib
export
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$OTCL_LIB:$NS2_LIB:$X11_LIB:$USR_LOCAL_LIB
TCL_LIB=$NS2_PATH/tcl$TCL_VER/library
USR_LIB=/usr/lib
export TCL_LIBRARY=$TCL_LIB:$USR_LIB

# PATH
XGRAPH=$NS2_PATH/bin:$NS2_PATH/tcl$TCL_VER/unix:$NS2_PATH/tk$TK_VER/unix
NS=$NS2_PATH/ns-$NS2_VER/
NAM=$NS2_PATH/nam-$NAM_VER/
PATH=$PATH:$XGRAPH:$NS:$NAM

설정에 보면 X11라이브러리가 /usr/X11R6를 참조 하고 있는데 정작 그 경로로 가보면 X116은 없다. 심볼릭 링크를 만들어 문제를 해결 할 수 있다.

ln -s /usr/X11R6/bin /usr/bin/X11
ln -s /usr/X11R6/lib/X11 /usr/lib/X11
ln -s /usr/X11R6/include/X11 /usr/include/X11 

설치가 끝나면 콘솔창에 nam이나 ns를 입력 해본다.

nam을 애니메이터로 기존에 만들어진 tcl파일을 읽어 구성한 토폴로지들에서 각 노드들의 인터렉션들을 보여 준다.

nam-버젼 폴더 밑에 tcl폴더에 보면 샘플 tcl파일들이 있는데 이 파일들을 읽어 정상적으로 애니메이션들이 플레이어 된다면 설치가 성공한 것이다.

TRACKBACK 0 AND COMMENT 0



서버 한대에 Apache와 Tomcat을 한포트로 돌릴려면 별도 설정이 필요하다. 기본적으로 Apache는 80포트를 이용하여 서비스 되며 Tomcat는 8080 포트를 이용하여 서비스 된다. 가령 Tomcat Webapps속 특정 어플리케이션을 80포트로 포워딩하여 서비스 하려면 Apache와 Tomcat이 연동이 필요한데 연동할 수 있는 방법들은 여러가지가 있을 수 있다. 그 중 mod_jk2를 이용한 방법도 현재 많이 사용되고 있는 방법이긴 하나 설정법이 복잡하고 성능도 그다지 좋은 편은 아니다. 구글링 하여 찾아본 별과 mod_proxy를 이용하면 깔끔하게 Tomcat의 특정 프로젝트를 8080포트가 아닌 80포트로도 서비스 가능할 수 있었다. 아래에 Apache및 Tomcat이 이미 서버에 설치가 되었고 정상적으로 작동하고 있다는 가정하에 mod_proxy의 설치 및 관련 설정법을 요약하여 설명하겠다.

필자의 경우, Apache는 80포트로 Tomcat은 8080 포트로 서비스 되고 있었다. 웹브라우저에 http://ip:80/ 및 http://ip:8080/ 을 입력하면 웹 서비스가 각각 잘 운영되고 있음을 확인 할 수 있다. http://ip:8080/jsp 라는 서비스가 가령 존재하고 해당 서비스를 http://ip:80/jsp 로도 접속이 가능하게끔 설정을 하는 것이 이글을 작성하는 목적이다.

mod_proxy의 설치

Apache 웹 서버를 기본 옵션을 이용하여 설치하였다면 mod_proxy 관련 모듈이 Apache 웹서버에 load 되지 않는다. 수동으로 mod_proxy 관련 모듈들을 컴파일 하고 Apahce에 등록 시켜 주어야 한다.

Apache 의 HOME Directory 경로가 /usr/local/apache2 이고 소스 파일이 /usr/local/src/httpd-x.xx.x에 존재 한다고 할 때

cd /usr/local/src/httpd-x.xx.x/modules/proxy
/usr/local/apache2/apxs -i -a -c mod_proxy.c proxy_util.c
/usr/local/apache2/apxs -i -a -c mod_proxy_http.c proxy_util.c
/usr/local/apache2/apxs -i -a -c mod_proxy_ftp.c proxy_util.c
/usr/local/apache2/apxs -i -a -c mod_proxy_connect.c proxy_util.c

위 명령어를 이용하여 proxy 모듈을 컴파일 하여 Apache 웹 서버에 추가 한다. 모듈을 자동으로 로드 된다.

확인 차원에서 /usr/local/apache2/conf/httpd.conf 을 vi으로 열어 보자.

LoadModule proxy_module       modules/mod_proxy.so
LoadModule proxy_http_module  modules/mod_proxy_http.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule proxy_ftp_module   modules/mod_proxy_ftp.so

위와 같은 내용들이 추가 되어있으면 mod_proxy가 성공적으로 설치 된 것이다.

다음으로 proxy를 이용한 호출 설정 부분을 추가해야 한다. 마찬가지로 httpd.conf 파일에 다음과 같이 추가 한다.

ProxyPass /jsp http://ip:8080/lab
ProxyPassReverse /jsp http://ip:8080/lab
ProxyVia On

Apache 가상 호스트 설정
TRACKBACK 0 AND COMMENT 0



AFS는 Andrew File System의 약자로 분산 파일 시스템의 일종이다. AFS는 Carnegie Mellon University에서 먼저 사용하였고 Transarc Corporation 의하여 개발 및 유지되고 있다. 아래에 Linux 환경에서 AFS를 설치하는 것을 예로 설명하련다. 이 예에서는 단지 AFS Client 설치만 한다.

AFS 배포 공식 사이트인 http://www.openafs.org 에 접속하여 자신이 설치한 시스템에 맞는 RPM 배포버젼을 다운로드 받는다. tar로 압축된 소스파일을 받아 자체로 빌드하여 설치 할 수도 있지만, 그 과정이 복잡하여 여기서 생략하고 RPM과 SRPM 배포버젼을 설치하는것만 설명할가 한다.

만약 설치한 시스템 커널을 바꾸지 않고 원래 설치된 그대로 사용하고 있다면 필요한 RPM 배포버젼을 받아 rpm -Uvh 명령어를 이용하여 설치하면 된다.
하지만 나의 경우는 필요에 따라 시스템 커널을 커스터마이징 하였다. 그로 인하여 afs 공식사이트에서 제공해주는 RPM파일을 직접 받아서 설치 할 수 없었다.

새롭게 커스터마이징한 커널에서 새로 SRPM파일을 받아 RPM들을 빌드 해낸다.

일단 OpenAFS사이트에서 SRPM을 받는다.

wget http://dl.openafs.org/dl/openafs/1.4.11/openafs-1.4.11-1.1.1.src.rpm

다음 SRPM을 설치한다. 단 주의할 것은 이때 우리가 설치하는건 SRPM이지 RPM이 아니다. 그러므로 설치되는건 RPM빌드를 하기 위한 Source 일 뿐인 것이다.

rpm -Uvh openafs-1.4.11-1.1.1.src.rpm

설치가 끝나면 /usr/src/redhat 디텍토리 밑으로 가보자.

cd /usr/src/redhat/SPECS

SPECS 폴더 밑에 openafs.spec 이라는 SPEC파일 생겼음을 알 수 있다.
이 SPEC 파일에 마춰 RPM들을 재빌드 해보자.

rpmbuild -ba openafs.spec

시간이 좀 걸리니 느긋하게 커피나 한잔 하면서 기둘리자.
빌드가 완성되면 /usr/src/redhat/RPMS/i386/ 폴더로 이동하여 새롭게 빌드된 RPM파일들을 확인 하자.
나의 경우에는 아래와 같은 파일들이 빌드 되었다.

dkms-openafs-1.4.11-1.1.1.i386.rpm
kmod-openafs-1.4.11-1.1.1.i386.rpm
openafs-compat-1.4.11-1.1.1.i386.rpm
openafs-kpasswd-1.4.11-1.1.1.i386.rpm
openafs-1.4.11-1.1.1.i386.rpm
openafs-debuginfo-1.4.11-1.1.1.i386.rpm
openafs-krb5-1.4.11-1.1.1.i386.rpm
openafs-authlibs-1.4.11-1.1.1.i386.rpm
openafs-devel-1.4.11-1.1.1.i386.rpm
openafs-server-1.4.11-1.1.1.i386.rpm
openafs-authlibs-devel-1.4.11-1.1.1.i386.rpm
openafs-docs-1.4.11-1.1.1.i386.rpm
openafs-client-1.4.11-1.1.1.i386.rpm
openafs-kernel-source-1.4.11-1.1.1.i386.rpm

필요로 하는 RPM들을 골라 설치 한다. 나의 경우는 client만 필요하므로 openafs와 openafs-client 및 기타 몇몇 의존하고 있는 RPM들을 설치했다. 하지만 여기서 끝이 아니다. 커널이 필요로 하는 모듈도 새로 빌드 해야 한다. 모듈을 새로 빌드하기 위하여 커널 소스가 필요한데, 별도로 얻을 필요는 없고 openafs-kernel-source-1.4.11-1.1.1.i386.rpm 이 RPM파일을 설치하면 되겠다.

rpm -Uvh openafs-1.4.11-1.1.1.i386.rpm openafs-krb5-1.4.11-1.1.1.i386.rpm openafs-kpasswd-1.4.11-1.1.1.i386.rpm openafs-authlibs-1.4.11-1.1.1.i386.rpm openafs-kernel-source-1.4.11-1.1.1.i386.rpm openafs-client-1.4.11-1.1.1.i386.rpm openafs-compat-1.4.11-1.1.1.i386.rpm kmod-openafs-1.4.11-1.1.1.i386.rpm

다음 /usr/src/ 로 가보면 이미 openafs-kernel 폴더가 만들어져 있음을 발견 할 수 있는데 src폴더로 이동하여 ./configure 및 make를 날리여 커널 모듈들을 재컴파일 한다.

컴파일이 끝나면 /usr/src/openafs-kernel-1.4.11/src/src/libafs/MODLOAD-2.6.32.7-MP/ 경로에 우리가 필요로 하는 openafs 커널 모듈들이 만들어 진다. 이것을 /lib/modules/커널버젼/extra/openafs/ 폴더로 복사해준다. 폴더가 존재 하지 않으니 미리 만들어 주는 센스를 발휘해야겠다.

mkdir -p /lib/modules/커널버젼/extra/openafs
cp -R /usr/src/openafs-kernel-1.4.11/src/src/libafs/MODLOAD-커널버젼-MP/* /lib/modules/커널버젼/extra/openafs/

다음 떠있는 커널에 모듈을 인식 시키고 적재 시켜준다.
모듈을 적재하는 방법으로는 insmod와 modprobe 두가지가 있는데 modprobe는 의존성 체크까지 하여 모듈 적재를 하므로 비교적 안전하므로 이 방식으로 나는 추가 했다.

먼저 depmod 명령어를 날려 모듈 의존성 리스트를 만든다.

depmod -ae 커널버젼

다음 modprobe를 날려 openafs의존 모듈만 추가한다.

modprobe -a openafs

추가가 잘 되었는지는 아래 명령어를 확인해볼 수 있다.

lsmod | grep openafs

마지막으로 설치된 afs client를 실행해주면 끝~

service openafs-client start
TRACKBACK 0 AND COMMENT 0




ARTICLE CATEGORY

분류 전체보기 (139)
Java Web App (49)
Zeroboard XE (2)
PSP Info (5)
PCSX 2 Info (3)
Cloud Computing (2)
English Study (5)
Linux Material (23)
Others (48)

CALENDAR

«   2012/01   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31        

ARCHIVE