howto: Xen + Rootserver + Debian Etch

VirtualBox, VMWare, KVM, XEN, OpenVZ, Virtuozzo, etc.
Anonymous

howto: Xen + Rootserver + Debian Etch

Post by Anonymous » 2007-11-03 18:46

Ich möchte hier eine der wenigen Möglichkeiten aufzeigen um Xen auf einem Debian Etch System zu installieren. Dieses Howto richtet sich vor allem an diejenigen, die einen Root-Server mit nur einer öffentlichen IP Adresse haben, aber trotzdem ihr Gastsystem für das Internet zugänglich machen wollen. Ich werde jeweils angeben ob eine Konfiguration für den Host (dom0) oder für den Gast (domU) vorzunehmen ist.

Wir installieren folgende Programme (dom0):

Code: Select all

% apt-get install xen-hypervisor-3.0-i386 xen-utils-3.0 xen-tools


Sollten mehr als 4 GB Ram zur Verfügung stehen, bitte die PAE Version installieren.

Wir brauchen noch folgende Programme (dom0):

Code: Select all

% apt-get install iproute bridge-utils libc6-xen


Jetzt brauchen wir einen Kernel mit Xen Erweiterung (dom0):

Code: Select all

% apt-get install linux-image-2.6.18-5-xen-686


Der Kernel wird normalerweise automatisch eingerichtet bzw. in die /boot/grub/menu.lst eingetragen. Wir sollten aber zur Sicherheit mal nachsehen (dom0):

/boot/grub/menu.lst

Es sollte in etwa so aussehen (dom0):

Code: Select all

title           Xen 3.0.3-1-i386-pae / Debian GNU/Linux, kernel 2.6.18-5-xen-686
root            (hd0,0)
kernel          /xen-3.0.3-1-i386-pae.gz
module          /vmlinuz-2.6.18-5-xen-686 root=/dev/sda3 ro console=tty0
module          /initrd.img-2.6.18-5-xen-686
savedefault

title           Xen 3.0.3-1-i386 / Debian GNU/Linux, kernel 2.6.18-5-xen-686
root            (hd0,0)
kernel          /xen-3.0.3-1-i386.gz
module          /vmlinuz-2.6.18-5-xen-686 root=/dev/sda3 ro console=tty0
module          /initrd.img-2.6.18-5-xen-686
savedefault


Jetzt wird die Bridge Konfiguriert, damit unser Gast mit dem Host kommunizieren kann.
Wir fügen dazu der /etc/network/interfaces folgende zeilen hinzu (dom0):

Code: Select all

auto xen-intern
iface xen-intern inet static
  pre-up brctl addbr xen-intern
  address 192.168.0.1
  network 192.168.0.0
  netmask 255.255.255.0
  broadcast 192.168.0.255
  bridge_fd 0
  bridge_hello 0
  bridge_stp off


Wir brauchen noch ein paar Loop devices (dom0):

/etc/modprobe.d/xen

Code: Select all

options loop max_loop=50


/etc/modules

Code: Select all

modprobe loop


Jetzt folgt ein Reboot um unseren neuen Kernel und die Bridge nutzen zu können.

Jetzt geht es daran den ersten Gast (domU) zu erstellen. Wir haben hier 2 Möglichkeiten zur auswahl.

Für die Installation in eine Partition:

Code: Select all

% mkfs.ext3 /dev/hdX #(X steht für die Partition die du für domU nutzen willst)
% mkdir /mnt/xen
% mount /dev/hdX /mnt/xen


Swap, wenn benötigt:

Code: Select all

% mkswap /dev/hdX  #(X steht für die Partition die du als Swap für dein domU nutzen willst)


Für die Installation in ein Image/File anstelle von einer Partition. Der Name des Images kann natürlich beliebig geändert werden.

Code: Select all

% dd if=/dev/zero of=/srv/domU.img bs=1M count=<Grösse_in_MB>
% mkfs.ext3 /srv/domU.img
% nkdir /mnt/xen
% mount -o loop /srv/domU.img /mnt/xen


Und für unser swap Image:

Code: Select all

% dd if=/dev/zero of=/srv/domU-swap.img bs=1M count=<Grösse_in_MB>
% mkswap /srv/domU-swap.img


Jetzt wollen wir unser domU Konfigurieren:

Code: Select all

% debootstrap etch /mnt/xen http://ftp2.de.debian.org/debian/


Nun kopieren wir die Kernel module von dom0 nach domU

Code: Select all

% cp -R /lib/modules/2.6.18-5-xen-686 /mnt/xen/lib/modules


Anschließend begeben wir uns in das neu erstellte System (domU)

Code: Select all

% chroot /mnt/xen /bin/bash


Code: Select all

/etc/fstab editieren und anpassen (domU):

/dev/hda1       /               ext3    defaults,errors=remount-ro     0   1
/dev/hda2       none            swap    sw                              0   0


/etc/network/interfaces (domU):

Code: Select all

auto lo
iface lo inet loopback

# ethernet interface

auto eth0
iface eth0 inet static
  address 192.168.0.10
  netmask 255.255.255.0
  gateway 192.168.0.1


/etc/hosts (domU):

Code: Select all

127.0.0.1       localhost.localdomain   localhost
192.168.0.10    domU.domain.tld       domU    #Bitte entsprechend anpassen

::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts


Folgendes muss noch installiert werden (domU):

Code: Select all

% apt-get install libc6-xen


Wir ändern noch /etc/inittab (domU):

Code: Select all

1:2345:respawn:/sbin/getty 38400 tty1
#2:23:respawn:/sbin/getty 38400 tty2
#3:23:respawn:/sbin/getty 38400 tty3
#4:23:respawn:/sbin/getty 38400 tty4
#5:23:respawn:/sbin/getty 38400 tty5
#6:23:respawn:/sbin/getty 38400 tty6


Das gast System ist soweit fertig.

Code: Select all

% passwd
% exit
% umount /mnt/xen


Jetzt müssen wir noch die Konfiguration für unseren Gast erstellen (dom0):

/etc/xen/domU # Der Name kann frei gewählt werden. Wir fügen folgendes ein:

Code: Select all

# Kernel to use
kernel = "/boot/vmlinuz-2.6.18-5-xen-686"
ramdisk = "/boot/initrd.img-2.6.18-5-xen-686"
# Memory in megabytes
memory = 512
# Your domain's name
name = "domU"
# Root device
root = "/dev/hda1 ro"
disk = [ 'file:/ srv/domU.img,hda1,w', 'file:/ srv/domU-swap.img,hda2,w' ]

vif = ['bridge=xen-intern,mac=00:16:3E:11:D9:E7']
dhcp ="off"
ip="192.168.0.10"
netmask="255.255.255.0"
gateway="192.168.0.1"


Die Zeile "disk=" muss ensprechend geändert warden. Im Beispiel oben wurden Images genutzt. Werden Partitionen genutzt muss es so aussehen:

Code: Select all

disk = [ 'phy:/dev/hdX,hda1,w', 'phy:/dev/hdY,hda2,w' ]


Die Zeile "memory=" kann man natürlich auch anpassen. Dort wird angegeben wie viel MB Ram dem Gast (domU) zugeteilt werden sollen.

Das war es!

Wir testen nun das Gast System:

Code: Select all

 % xm create –c domU


Das –c steht hier für eine console.

Ist das Gast System erfolgreich hochgefahren, kannst du dich ganz normal als root anmelden.

Zum beenden:

Code: Select all

% xm shutdown –H domU


Soll das Gast System automatisch mit booten sobald der Host hochfährt:

Code: Select all

% ln -s /etc/xen/domU /etc/xen/auto/


Zum wechseln von Gast nach Host:

Code: Select all

% STRG + ]


Und unter Windows mit Putty:

Code: Select all

% STRG + 5


Ihr werdet jetzt sicher feststellen das der Gast keinen zugriff auf das Internet hat. Dazu müssen wir nun iptables zur Hilfe nehmen:

Folgende iptables Regel muss nun auf dem Host (dom0) eingerichtet werden:

Code: Select all

% echo 1 > /proc/sys/net/ipv4/ip_forward
% iptables -t nat -A POSTROUTING -s 192.168.0.10 -o eth0 -j SNAT --to *ip-des-hosts*


Jetzt werden alle anfragen vom Gast (domU) an den Host (dom0) weitergeleitet. Wir können nun zum testen folgendes machen:

Code: Select all

% ping google.de


Wollen wir z.b einen ftp Server im Gast System erreichbar machen, müssen wir die Ports 21/20 an den Gast weiterleiten:

Code: Select all

iptables -t nat -A PREROUTING -p tcp -d *ip-des-hosts* --dport 21 -j DNAT --to 192.168.0.10:21
iptables -t nat -A PREROUTING -p tcp -d *ip-des-hosts* --dport 20 -j DNAT --to 192.168.0.10:20


So einfach! Dieselben Regeln ( abgesehen vom Port ) können auch für Apache, Mysql, MTA, u.s.w angewendet werden.

Kritik und weitere anregungen sind erwünscht!

Viel Spass

P.s Dieses Howto ist zum teil durch eigene erfahrungen etnstanden, als auch durch andere Howto´s die sich nicht auf Debian Etch anwenden ließen.

thelaw
Posts: 53
Joined: 2002-07-30 18:53
Location: Salzgitter

Re: howto: Xen + Rootserver + Debian Etch

Post by thelaw » 2007-11-03 20:20

Welchen Sinn hat die Bridge denn an dieser Stelle? Welche Interfaces werden hier denn gebridgt?
Welche Interfaces werden durch Xen auf dem Host bereitgestellt?

Und die iptables-Regel mit SNAT erscheint mir hier ein wenig zu kompliziert. Ein einfaches MASQUERADE würde es hier wohl genauso tun. Sollte aber bei nur einer IP auch das gleiche rauskommen.

Btw.: Wie ist die Performance unter Xen? Nimmt sich das viel im Vergleich dazu, wenn die Software auf dem Host läuft? Wie steht Xen da im Vergleich mit anderen Lösungen wie z.B. qemu, kvm oder VMware.

oxygen
RSAC
Posts: 2179
Joined: 2002-12-15 00:10
Location: Bergheim

Re: howto: Xen + Rootserver + Debian Etch

Post by oxygen » 2007-11-03 21:31

Also so lange Hardwarevirtualisierung zur Verfügung steht, ist die Perfomance von xen und VMware vollkommen Ok.
Man merkt da keinen Unterschied zu einer normalen Umgebung.

User avatar
Joe User
Project Manager
Project Manager
Posts: 11580
Joined: 2003-02-27 01:00
Location: Hamburg

Re: howto: Xen + Rootserver + Debian Etch

Post by Joe User » 2007-11-03 21:47

Merken tut man bei XEN/VMWare/VirtualBox auch ohne HV keinen Unterschied, man kann ihn aber messen...

sledge0303
RSAC
Posts: 767
Joined: 2005-09-16 00:06
Location: Berlin-Reinickendorf

Re: howto: Xen + Rootserver + Debian Etch

Post by sledge0303 » 2007-11-04 09:25

Hallo,

bedenke bitte auch, wenn man XeN auf einem dedizierten Server installieren möchte/muss, dann ist i.d.R. das Netzwerk per NAT Auflösung zu erstellen.
Wer nur eine IP Adresse hat, sowieso.
Ich hat erst heute Nacht bei einem Kumpel XeN, allerdings aus den Sourcen statt deb, installiert. Man merkt bei kleineren Systemen schon einen kleinen Unterschied. Je mehr RAM die dom0 und domU zugewiesen bekommen, desto weniger ist die Virtualisierung 'bemerkbar'.
Ich hab testweise auf einem dedi 2k3 per XeN virtualisiert und war echt platt wie gering, um besser so zu sagen so gut wie gar nicht, der Unterschied zwischen 'normaler' und 'virtualisierter' Installation ist... :D