howto: Xen + Rootserver + Debian Etch
Posted: 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):
Sollten mehr als 4 GB Ram zur Verfügung stehen, bitte die PAE Version installieren.
Wir brauchen noch folgende Programme (dom0):
Jetzt brauchen wir einen Kernel mit Xen Erweiterung (dom0):
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):
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):
Wir brauchen noch ein paar Loop devices (dom0):
/etc/modprobe.d/xen
/etc/modules
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:
Swap, wenn benötigt:
Für die Installation in ein Image/File anstelle von einer Partition. Der Name des Images kann natürlich beliebig geändert werden.
Und für unser swap Image:
Jetzt wollen wir unser domU Konfigurieren:
Nun kopieren wir die Kernel module von dom0 nach domU
Anschließend begeben wir uns in das neu erstellte System (domU)
/etc/network/interfaces (domU):
/etc/hosts (domU):
Folgendes muss noch installiert werden (domU):
Wir ändern noch /etc/inittab (domU):
Das gast System ist soweit fertig.
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:
Die Zeile "disk=" muss ensprechend geändert warden. Im Beispiel oben wurden Images genutzt. Werden Partitionen genutzt muss es so aussehen:
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:
Das –c steht hier für eine console.
Ist das Gast System erfolgreich hochgefahren, kannst du dich ganz normal als root anmelden.
Zum beenden:
Soll das Gast System automatisch mit booten sobald der Host hochfährt:
Zum wechseln von Gast nach Host:
Und unter Windows mit Putty:
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:
Jetzt werden alle anfragen vom Gast (domU) an den Host (dom0) weitergeleitet. Wir können nun zum testen folgendes machen:
Wollen wir z.b einen ftp Server im Gast System erreichbar machen, müssen wir die Ports 21/20 an den Gast weiterleiten:
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.
Wir installieren folgende Programme (dom0):
Code: Select all
% apt-get install xen-hypervisor-3.0-i386 xen-utils-3.0 xen-toolsWir brauchen noch folgende Programme (dom0):
Code: Select all
% apt-get install iproute bridge-utils libc6-xenCode: Select all
% apt-get install linux-image-2.6.18-5-xen-686/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
savedefaultWir 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/etc/modprobe.d/xen
Code: Select all
options loop max_loop=50Code: Select all
modprobe loopJetzt 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/xenCode: Select all
% mkswap /dev/hdX #(X steht für die Partition die du als Swap für dein domU nutzen willst)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/xenCode: Select all
% dd if=/dev/zero of=/srv/domU-swap.img bs=1M count=<Grösse_in_MB>
% mkswap /srv/domU-swap.imgCode: Select all
% debootstrap etch /mnt/xen http://ftp2.de.debian.org/debian/Code: Select all
% cp -R /lib/modules/2.6.18-5-xen-686 /mnt/xen/lib/modulesCode: Select all
% chroot /mnt/xen /bin/bashCode: Select all
/etc/fstab editieren und anpassen (domU):
/dev/hda1 / ext3 defaults,errors=remount-ro 0 1
/dev/hda2 none swap sw 0 0Code: 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.1Code: 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-allhostsCode: Select all
% apt-get install libc6-xenCode: 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 tty6Code: Select all
% passwd
% exit
% umount /mnt/xen/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"Code: Select all
disk = [ 'phy:/dev/hdX,hda1,w', 'phy:/dev/hdY,hda2,w' ]Das war es!
Wir testen nun das Gast System:
Code: Select all
% xm create –c domUIst das Gast System erfolgreich hochgefahren, kannst du dich ganz normal als root anmelden.
Zum beenden:
Code: Select all
% xm shutdown –H domUCode: Select all
% ln -s /etc/xen/domU /etc/xen/auto/Code: Select all
% STRG + ]Code: Select all
% STRG + 5Folgende 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*Code: Select all
% ping google.deCode: 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:20So 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.