Author: sledge0303
Version 1.0.1
Stand: 07.11.2008
Ich werde in diesem Howto die Installation und Konfiguration eines Xen Systems erklären. Es wird zu 90% ein reines Copy'n'Paste Howto werden, allerdings sind im gewissen Rahmen erweiterte Grundkenntnisse in Sachen Linux und Administration von Servern erforderlich.
Meine Empfehlung, schaut Euch jeden Schritt genau an der getätigt werden muss und vergesst eines nicht:
LESEN - DENKEN - LOSLEGEN
getestet wurde es auf einem OVH Server der Kimsufi 2008 Serie.
Wichtig: die meisten Hoster wie OVH lassen nur ein Routing per Network-NAT oder Network-Route zu. Standardkonfiguration in XeN ist Network-Bridge. Eine XeN Konfiguration per Bridge würde die kurzfristige Sperrung deines Servers durch den Switch des Anbieters zur Folge haben. Des weiteren werde ich nicht erklären, wo der Unterschied - sowie Vorteile- beim Routing per NAT oder Route liegt. So viel Grundlagenwissen setze ich voraus, ggf. musst du dich bei google.de durchlesen.
Wir versetzen unseren Server in den Rescue Modus und nach Erhalt des Passworts partitionieren wir die Festplatte.
cfdisk
Ich schlage folgendes Schema vor:
Device | Mountpoints | Bootflag | Filesystem | Größe |
---|---|---|---|---|
sda1 | / | ja | ext3 | 10GB |
sda2 | swap | swap | 1GB | |
sda3 | /home | ext3 | 7GB | |
sda5 | /var | ext3 | 15GB | |
sda6 | /usr | ext3 | 5GB | |
sda7 | LVM | Rest |
Bootflag nicht vergessen!
Nachdem die Partitionierung abgeschlossen wurde, erstellen wir die Dateisysteme und mounten die Partitionen
mkfs.ext3 /dev/sda1 mkfs.ext3 /dev/sda3 mkfs.ext3 /dev/sda5 mkfs.ext3 /dev/sda6 mkswap /dev/sda2 swapon /dev/sda2 mkdir -p /mnt/gentoo mount -t ext3 -o noatime /dev/sda1 /mnt/gentoo mkdir -p /mnt/gentoo/home mount -t ext3 -o noatime /dev/sda3 /mnt/gentoo/home mkdir -p /mnt/gentoo/var mount -t ext3 -o noatime /dev/sda5 /mnt/gentoo/var mkdir -p /mnt/gentoo/usr mount -t ext3 -o noatime /dev/sda6 /mnt/gentoo/usr
wget -q -O - http://gentoo.osuosl.org/releases/x86/2008.0/stages/stage3-i686-2008.0.tar.bz2 | tar xpjvf - -C /mnt/gentoo/ cp -L /etc/resolv.conf /mnt/gentoo/etc/resolv.conf mount -t proc none /mnt/gentoo/proc mount -o bind /dev /mnt/gentoo/dev mount -t tmpfs none /mnt/gentoo/tmp chroot /mnt/gentoo /bin/bash
Im Chroot führen wir ein paar Befehle aus und erstellen das Rootpasswort sowie einen User
env-update source /etc/profile cp /usr/share/zoneinfo/Europe/Berlin /etc/localtime grep -v rootfs /proc/mounts > /etc/mtab passwd adduser $username
Wir laden uns den Portage-Tree herunter und aktualisieren diesen anschließend
wget -q -O - http://gentoo.osuosl.org/snapshots/portage-latest.tar.bz2 | tar xvjpf - -C /usr/
Die Datei make.conf ist für ein 386 Betriebssystem ausgelegt ohne Virtualisierung von Windows.
←- Anpassung von Windows kommt später, wenn es mit der neusten Version getestet wurde
cat > /etc/make.conf << "EOF" CFLAGS="-O2 -march=i686 -pipe -mno-tls-direct-seg-refs" CHOST="i686-pc-linux-gnu" CXXFLAGS="${CFLAGS}" USE="-X -gtk -gtk2 -qt3 -qt4 -gnome -kde -ipv6 nptonly" FEATURES="${FEATURES} buildpkg" EOF
Die Option „-mno-tls-direct-seg-refs“ ist wichtig, da XeN kein TLS unterstützt. Aus diesem Grund müssen wir später das komplette System neu kompilieren.
/etc/fstab
cat > /etc/fstab << "EOF" /dev/sda1 / ext3 noatime 0 1 /dev/sda2 none swap sw 0 0 /dev/sda3 /home ext3 noatime,nodev,noexec,nosuid 1 2 /dev/sda5 /var ext3 noatime 1 2 /dev/sda6 /usr ext3 noatime 1 2 tempfs /tmp tmpfs nodev,noexec,nosuid,mode=1777 0 0 devshm /dev/shm tmpfs nodev,noexec,nosuid 0 0 EOF
Host und Hostname bitte anpassen
cat > /etc/hosts << "EOF" 127.0.0.1 localhost.localdomain localhost 123.123.123.123 meinedomain.tld EOF cat > /etc/hostname << "EOF" meinedomain.tld EOF sed 's@^CLOCK=.*@CLOCK="local"@' -i /etc/conf.d/clock sed 's@^#TIMEZONE=.*@TIMEZONE="Europe/Berlin"@' -i /etc/conf.d/clock cat > /etc/locale.gen << "EOF" de_DE@euro ISO-8859-15 en_GB ISO-8859-1 EOF cat > /etc/env.d/02locale << "EOF" LANG=de_DE@euro EOF locale-gen -c /etc/locale.gen
Damit SSHd allgemein nach dem ersten Reboot zur Verfügung steht:
rc-update add sshd default
Wer möchte, kann seinen SSHd Dienst anpassen, Port ändern etc pp…
nano /etc/ssh/sshd_config
Zuerst aber aktualisieren wir den Portage-Tree
emerge --sync
Damit XeN funktioniert, darf nichts in Sachen TLS zurückbleiben und wir kompilieren das System neu mit den Angaben aus der make.conf
Der Vorgang kann je nach Prozessor und verfügbaren RAM einige Stunden dauern, beim Kimsufi 2008 waren es etwa 4 Stunden.
emerge -C mktemp com_err ss e2fsprogs emerge -1 portage e2fsprogs emerge -De system
Man kann natürlich auch unbeobachtet den Vorgang über Nacht laufen lassen, indem wir den Parameter „nohub“ davor setzen (empfohlen)
emerge -C mktemp com_err ss e2fsprogs emerge -1 portage e2fsprogs nohup emerge -De system
Nachdem das System kompiliert wurde
emerge syslog-ng logrotate vixie-cron iproute2 dhcpcd gentoolkit traceroute whois screen grub
Runlevel für die Logger erstellen
rc-update add syslog-ng default rc-update add vixie-cron default source /etc/profile
cat > /boot/grub/device.map << "EOF" (hd0) /dev/sda EOF grub --no-floppy root (hd0,0) setup (hd0) quit cat > /boot/grub/grub.conf << "EOF" timeout 5 default 0 title=Gentoo Linux root (hd0,0) kernel /boot/xen.gz dom0_mem=128M module /boot/vmlinuz-2.6.18-xen0 root=/dev/sda1 max_loop=255 EOF
cat > /etc/portage/package.keywords << "EOF" app-emulation/xen app-emulation/xen-tools sys-kernel/xen-sources EOF emerge xen xen-tools usermode-utilities rc-update add xend default rc-update add xendomains default
cd /usr/src/linux-2.6.18-xen-r12 alias make0="mkdir -p _dom0 && make O=_dom0" make0 menuconfig
Die dom0 ist das Wirtsystem, d.h. es macht nichts anderes als den Server zu starten und die VServer verwalten.
Für den Wirt gibt es keine weiteren Funktionen und daher kann man im Kernel auf den Modulsupport verzichten. Die folgenden Einstellungen sind notwendig. Deine verwendete Hardware muss sinngemäß in den Kernelsourcen aktiviert und später einkompiliert werden. Für diesen Schritt gibt es kein gesondertes Tutorial.
Loadable Module support ---> [ ] Enable loadable module support Block Layer ---> [*] Support for Large Block Devices Processor type and features ---> Subarchitecture Type (Xen-compatible) <--- auswählen! Device Drivers ---> Network device support ---> <*> Dummy net driver support ---> [*] Universal TUN/TAP device driver support Networking ---> Networking options ---> [*] Network packet filtering (replaces ipchains) ---> Core Netfilter Configuration ---> <*> Netfilter Xtables support (required for ip_tables) ---> alles darunter aktivieren Networking ---> Networking options ---> [*] Network packet filtering (replaces ipchains) ---> IP: Netfilter Configuration ---> <*> IP tables support (required for filtering/masq/NAT) ---> alles darunter aktivieren File systems ---> [*] Second extended fs support [*] Ext2 extended attributes [*] Ext3 journalling file system support [*] Ext3 extended attributes ... wer Reiser usw aktivieren möchte, kann es gerne tun ... [*] Quota support <*> Old quota format support <*> Quota format v2 support [*] Kernel automounter support [*] Kernel automounter version 4 support (also supports v3) XEN ---> [*] Privileged Guest (domain 0)
Wenn du die komplette Hardware eingebaut, die genannten Funktionen implementiert, hast, können wir zur Tat schreiten und den Kernel kompilieren. Es kann je nach Prozessor eine Weile dauern.
make0 all
Wir kompilieren den Kernel für das Gastsystem. Hier sind nicht ganz so viele Einstellungen vorgeschrieben, allerdings kann man je nach Verwendung Funktionen implementieren. Die Einbindung von GRSEC ist leider noch nicht möglich.
alias makeU="mkdir -p _domU && make O=_domU" makeU menuconfig
Hier sind die vorgeschriebenen Einstellungen
Processor type and features ---> Subarchitecture Type (Xen-compatible) <--- auswählen! Networking ---> Networking options ---> [*] Network packet filtering (replaces ipchains) ---> Core Netfilter Configuration ---> <*> Netfilter Xtables support (required for ip_tables) Networking ---> Networking options ---> [*] Network packet filtering (replaces ipchains) ---> IP: Netfilter Configuration ---> <*> IP tables support (required for filtering/masq/NAT) File systems ---> [*] Ext3 journalling file system support [*] Ext3 extended attributes [*] Quota support <*> Old quota format support <*> Quota format v2 support [*] Kernel automounter support [*] Kernel automounter version 4 support (also supports v3) XEN ---> [ ] Privileged Guest (domain 0) <--- WICHTIG!!!
Anschließend kompilieren wir den Kernel
makeU Falls Modulsupprt aktiviert: makeU modules_install
Wir kopieren die Kernel nach /boot
cp _domU/vmlinux /boot/vmlinuz-2.6.18-xenU cp _dom0/vmlinux /boot/vmlinuz-2.6.18-xen0
Wir installieren erstmal ein paar Pakete, incl. IP-Tables
emerge gamin gnupg libaio re2c expect bind-tools ed pciutils xfsprogs libutempter lsof lynx iptables rc-update add iptables default sed 's@^#net.ipv4@net.ipv4@' -i /etc/sysctl.conf cat >> /etc/conf.d/rc << "EOF" RC_PLUG_SERVICES="!net.*" EOF
Ich empfehle schon alleine aus Gründen der Sicherheit NAT.
mv /etc/xen/xend-config.sxp /etc/xen/xend-config.OLD cat > /etc/xen/xend-config.sxp << "EOF" # -*- sh -*- (xend-relocation-server yes) (xend-relocation-hosts-allow '^localhost$ ^localhost\\.localdomain$') (network-script network-nat) (vif-script vif-nat) (dom0-min-mem 128) (enable-dom0-ballooning yes) (dom0-cpus 0) (vncpasswd '') EOF
Wer statt NAT die „Netzwerk Route“ benutzen möchte:
Diese Form des Routings macht allerdings nur dann Sinn, wenn man mindestens 2 FailoverIPs besitzt. Der Vorteil vom Routing ist halt, man kann die domU so händeln wie einen „normalen“ Server ohne manuella Freigabe von Ports usw.
mv /etc/xen/xend-config.sxp /etc/xen/xend-config.OLD cat > /etc/xen/xend-config.sxp << "EOF" # -*- sh -*- (xend-unix-server yes) (xend-relocation-server no) (xend-relocation-hosts-allow '^localhost$ ^localhost\\.localdomain$') (network-script 'network-route netdev=eth0') (vif-script vif-route) (dom0-min-mem 128) (enable-dom0-ballooning yes) (dom0-cpus 0) (vncpasswd '') EOF
Wir erreichen den fast wichtigsten Abschnitt der Konfiguration des Hostsystem: der Netzwerkkonfiguration. Mit ihr steht oder fällt der komplette Server. Wenn du dich für NAT entschlossen hast, dann ist Punkt 6.1 für dich zutreffend. Es müssen alle verfügbaren FoIP Adressen in die /etc/conf.d/net eingetragen werden, sonst können diese per NAT nicht genutzt werden
Anders sieht es bei der Network-Route aus. In der /etc/conf.d/net darf nur die IP Adresse der dom0 eingetragen sein und keine FoIP.
123 entspricht der IP des Servers, bitte entsprechend anpassen.
124 steht sinngemäß für deine FailoverIP(s)
Wichtig: default gw entspricht immer dem der Server-/dom0 IP.
cat > /etc/conf.d/net << "EOF" modules=( "iproute2" ) config_eth0=( "123.123.123.123 netmask 255.255.255.0 brd 123.123.123.255" "124.124.124.124 netmask 255.255.255.255 brd 124.124.124.255" ) routes_eth0=( "default gw 123.123.123.254" ) EOF
Damit die Schnittstelle eth0 bei Systemstart aktiviert wird, müssen wir diese im Runlevel aktivieren.
rc-update add net.eth0 boot
123 entspricht der IP des Servers, bitte entsprechend anpassen.
cat > /etc/conf.d/net << "EOF" modules=( "iproute2" ) config_eth0=( "123.123.123.123 netmask 255.255.255.0 brd 123.123.123.255" ) routes_eth0=( "default gw 123.123.123.254" ) EOF
Damit die Schnittstelle eth0 bei Systemstart aktiviert wird, müssen wir diese im Runlevel aktivieren.
rc-update add net.eth0 boot
Bei OVH beachte bitte die Einstellungen im Manager, d.h. es muss unter Netboot HD/SDA1 eingestellt sein.
exit reboot
Jetzt ist beten und hoffen in deine Fähigkeiten angesagt… gehen wir mal von aus, der Kasten kommt ohne Probleme wieder hoch.
Wir können jetzt mit der Installation unserer Gastsysteme beginnen. Ich stelle hier Gentoo sowie Debian als Gast vor. Als erstes installieren wir LVM und Debootstrap
emerge lvm2 debootstrap rc-update add lvm boot
Benennen wir das LVM Device „lvmxen“.
pvcreate /dev/sda7 vgcreate lvmxen /dev/sda7
Wir erstellen ein LVM Device für Debian und eines für dessen Auslagerungsspeicher SWAP. Die zugeordnete Größe beträgt 30GB bzw 512MB.
lvcreate -L30G -n test lvmxen lvcreate -L512M -n test-swap lvmxen
Erstellen das ext3 Dateisystem und mounten es anschließend nach /mnt
mkfs.ext3 /dev/lvmxen/test mkswap /dev/lvmxen/test-swap mount /dev/lvmxen/test /mnt
Per Debootstrap installieren wir nun Debian Etch
debootstrap --arch i386 etch /mnt/ http://ftp2.de.debian.org/debian
Das nimmt einen kleinen Moment in Anspruch bevor wir uns in das frische Debian einloggen können
chroot /mnt /bin/bash
Als erstes vergeben wir das Rootpasswort und erstellen einen User
passwd adduser $username
cat > /etc/network/interfaces << "EOF" auto lo iface lo inet loopback address 127.0.0.1 netmask 255.0.0.0 auto eth0 iface eth0 inet static address 10.0.0.1 netmask 255.0.0.0 broadcast 10.0.0.255 network 10.0.0.0 gateway 10.0.0.254 EOF cat > /etc/hosts << "EOF" 127.0.0.1 localhost.localdomain localhost 10.0.0.1 $deinedomain EOF
cat > /etc/network/interfaces << "EOF" auto lo iface lo inet loopback address 127.0.0.1 netmask 255.0.0.0 auto eth0 iface eth0 inet static address hier.deine.foip.rein netmask 255.255.255.255 post-up /sbin/ip route add default dev eth0 EOF cat > /etc/hosts << "EOF" 127.0.0.1 localhost.localdomain localhost 123.123.123.123 $deinedomain EOF
Wir konfigurieren nun das Betriebssystem
echo 'deb http://ftp2.de.debian.org/debian etch main contrib non-free' > /etc/apt/sources.list && echo 'deb-src http://ftp2.de.debian.org/debian etch main contrib non-free' >> /etc/apt/sources.list && echo 'deb http://ftp2.de.debian.org/debian-security etch/updates main contrib non-free' >> /etc/apt/sources.list && apt-get update apt-get install -y locales ssh make bzip2 automake && dpkg-reconfigure locales libc6-xen echo '$hostname' > /etc/hostname cat > /etc/fstab << "EOF" /dev/sda1 / ext3 defaults 1 2 /dev/sda2 swap swap sw 0 0 none /dev/shm tmpfs defaults 0 0 EOF
In der inittab muss noch eine Änderung vorgenommen werden
nano /etc/inittab ... ... 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
Jetzt bitte den Port anpassen bzw. SSHd konfigurieren. Als Beispiel für das Routing nehmen wir Port 50000
nano /etc/ssh/sshd_config Port 50000
Damit die Uhrzeit stündlich abgeglichen wird:
apt-get install ntpdate && ntpdate ptbtime1.ptb.de crontab -e 0 1 * * * /usr/sbin/ntpdate-debian
Wir können jetzt das chroot verlassen, aber vorher bereinigen wir noch den Speicher von aptitude
apt-get clean exit
Die nächsten Schritte sind wichtig, damit die domU korrekt gestartet werden kann. TLS deaktivieren:
mv /mnt/lib/tls /mnt/lib/tls.disabled
Falls du Modulsupport für den domU Kernel aktiviert hast:
cp -dpR /lib/modules/2.6.18-xen-r12 /mnt/lib/modules/
Auch hier ist wieder die Version zu beachten.
Bevor wir das Device aushängen können, muss der User korrekt ausgeloggt werden
fuser -k /mnt umount /mnt
Die domU erhält folgende Informationen:
lokale IP Adresse: 10.0.0.1 / 255.0.0.0 / 10.0.0.254
zugewiesenen RAM Speicher: 256 MB
cat > /etc/xen/test.sxp << "EOF" name="test" kernel="/boot/vmlinuz-2.6.18-xenU" root="/dev/sda1" memory=256 disk = ['phy:/dev/lvmxen/test,sda1,w','phy:/dev/lvmxen/test-swap,sda2,w'] vif=[ 'ip=10.0.0.1' ] hostname="test" ip="10.0.0.1" netmask="255.0.0.0" gateway="10.0.0.254" extra="console=xvc0 xencons=tty" EOF xm create -c /etc/xen/test.sxp
name="test" kernel="/boot/vmlinuz-2.6.18-xenU" root="/dev/sda1" memory=256 disk = ['phy:/dev/lvmxen/test,sda1,w','phy:/dev/lvmxen/test-swap,sda2,w'] vif = [ 'ip=XYZ' ] #deine FoIP hier eintragen netmask = "255.255.255.0" gateway = "XYZ" #den Gateway von der Server/dom0 IP hier eintragen extra="console=xvc0 xencons=tty"
gestartet wird die Domain mit
xm create -c /etc/xen/test.sxp
Damit diese domU nach einem reboot der dom0 automatisch gestartet wird, verlinken wir dieses Skript
ln -s /etc/xen/test.sxp /etc/xen/auto/
Wir erstellen ein LVM Device für Gentoo und eines für dessen Auslagerungsspeicher SWAP. Die zugeordnete Größe beträgt 30GB bzw 512MB.
lvcreate -L30G -n test lvmxen lvcreate -L512M -n test-swap lvmxen
Erstellen das ext3 Dateisystem und mounten es anschließend nach /mnt
mkfs.ext3 /dev/lvmxen/test mkswap /dev/lvmxen/test-swap mount /dev/lvmxen/test /mnt
Installieren Gentoo 2008 Stage3 Tarball in das Chroot und kopieren anschließend den Portage Tree, die make.conf und resolv.conf in das Chroot und loggen uns danach dort ein.
wget -q -O - http://gentoo.osuosl.org/releases/x86/2008.0/stages/stage3-i686-2008.0.tar.bz2 | tar xpjvf - -C /mnt/ cp -dpR /usr/portage/ /mnt/usr/ cp /etc/make.conf /mnt/etc/ cp /etc/resolv.conf /mnt/etc/
Loggen und anschließend in das Chroot ein
chroot /mnt /bin/bash passwd adduser $username cp /usr/share/zoneinfo/Europe/Berlin /etc/localtime env-update source /etc/profile
Konfigurieren die Umgebung und re-kompilieren anschließend alle Pakete neu.
cat > /etc/fstab << "EOF" /dev/sda1 / ext3 defaults 1 2 /dev/sda2 swap swap sw 0 0 none /dev/shm tmpfs defaults 0 0 EOF cat > /etc/make.conf << "EOF" CFLAGS="-O2 -march=i686 -pipe -mno-tls-direct-seg-refs" CHOST="i686-pc-linux-gnu" CXXFLAGS="${CFLAGS}" USE="-X -gtk -gtk2 -qt3 -qt4 -gnome -kde -ipv6 nptonly" EOF cat > /etc/locale.gen << "EOF" de_DE@euro ISO-8859-15 EOF cat > /etc/env.d/02locale << "EOF" LANG=de_DE@euro EOF locale-gen -c /etc/locale.gen cat > /etc/conf.d/hostname << "EOF" HOSTNAME="meinedomain.tld" EOF cat > /etc/conf.d/domainname << "EOF" DNSDOMAIN="meinedomain.tld" EOF rc-update add sshd default
Konfiguration des SSHd Dienst nicht vergessen
nano /etc/ssh/sshd_config
Weil TLS nicht in XEN aktiviert sein darf, müssen wir die domU re-kompilieren. Wie bereits oben beschrieben empfehle ich dies mit dem Paramter „nohup“ zu tun. Der Vorgang nimmt je nach Prozessor eine gewisse Zeit in Anspruch. Ich empfehle nach Abschluss der Arbeiten die geschaffene Gentoo domU als Image abzulegen, dann braucht man diesen Prozess nicht so oft durchmachen…
Da es in der Vergangenheit ein Problem mit den Paketen e2fsprogs und mktemp, sowie dessen Abhängigen, gab, werden wir dieses vorher deinstallieren und mit einem anderen Parameter erneut installieren.
emerge -C mktemp com_err ss e2fsprogs emerge -1 portage baselayout e2fsprogs
Wer den Kompiler bei seiner Arbeit beobachten möchte, muss „nohup“ entfernen.
nohup emerge -De system
Wir installieren und konfigurieren noch das Grundsystem
emerge logrotate vixie-cron iproute2 gamin gnupg libaio re2c expect bind-tools ntp ed lsof lynx gentoolkit rc-update add syslog-ng default rc-update add vixie-cron default sed 's@^CLOCK=.*@CLOCK="local"@' -i /etc/conf.d/clock sed 's@^#TIMEZONE=.*@TIMEZONE="Europe/Berlin"@' -i /etc/conf.d/clock cat > /etc/cron.hourly/ntpdate << "EOF" #!/bin/sh /usr/sbin/ntpdate -b -s -p 4 -t 0.1 ptbtime1.ptb.de EOF chmod 755 /etc/cron.hourly/ntpdate rc-update add ntp-client default
cat > /etc/conf.d/net << "EOF" config_eth0=( "10.0.0.1 netmask 255.0.0.0 broadcast 10.0.0.255" ) routes_eth0=( "default gw 10.0.0.254" ) EOF rc-update add eth0 default
cat > /etc/conf.d/net << "EOF" config_eth0=( "123.123.123.123 netmask 255.255.255.255 broadcast 123.123.123.255" ) postup() { route add default dev eth0 } EOF rc-update add eth0 default
Anschließend können wir uns aus dem chroot ausloggen, umount und anschließend die Gentoo domU hochfahren
Ausführliche Dokumentation zum Thema Network-NAT findest du hier.
Der Syntax für NAT auf Gentoo ist sehr einfach. Wir nehmen wieder unsere Demo-IP 123.123.123.123 und die IP Adresse für die domU „test“ mit der IP Adresse 10.0.0.1
Wenn wir jetzt den V-Server hochfahren, ist dieser zwar funktionsfähig, kann aber noch nicht mit dem Rest der Welt kommunizieren. Installiert haben wir den Dienst SSHd, dieser lauscht wie im Howto beschrieben auf Port 50000. Wir müssen jetzt dem Xen-Server (dom0)erklären, in welche domU er die entsprechende Anfrage routen soll. Dafür sind 2 Schritte notwendig:
iptables -t nat -A POSTROUTING -s 10.0.0.1 -o eth0 -j SNAT --to 123.123.123.123
Dieser Befehl besagt, die IP Adresse des lokalen Netzwerks 10.0.0.1 versendet alle ausgehenden Datenpakete über die IP Adresse 123.123.123.123
iptables -t nat -A PREROUTING -p tcp -d 123.123.123.123 --dport 50000 -i eth0 -j DNAT --to-destination 10.0.0.1:50000
Dieser Befehl besagt, Anfragen die entweder auf die IP Adresse 123.123.123.123:50000 eingehen, werden in die lokale domU mit der IP Adresse 10.0.0.1 geroutet.
Gesetzt den Fall, der DNS der Domain „www.schlagmichtot.com“ löst sich auf dies IP 123.123.123.123 auf, wird ebenfalls in die domU mit der IP 10.0.0.1 geroutet.
Möchtest du HTTPd Anfragen in die domU routen, wäre statt 50000 die 80 der passende Eintrag… usw usw usw…
Wenn man die ganze Geschichte versucht logisch zu betrachten, dürfte an dieser Stelle jedes weitere Wort zum Network-NAT überflüssig sein
Einen Hinweis habe ich noch, richtig wichtig und kann nicht oft genug wiederholt werden: alle IP Adressen müssen bei NAT durch die dom0 initialisiert werden (Eintrag in der /etc/conf.d/net).
/etc/init.d/iptables save
Damit speicherst du die aktuellen Einträge ab, damit diese nach einem reboot des Systems wieder zur Verfügung stehen.
Zurück zum Index