Archiv

Archiv für die Kategorie ‘Virtualisierung’

XEN Virtualisierung MAC Adressen generieren

24. August 2010 Keine Kommentare

Wer oft mit XEN Virtualisierung und bridged Interfaces arbeitet der braucht MAC Adressen, die man den virtuellen Systemen zuordnen kann. Es gutes Script, dass alle Funktionen beherbergt die man sich wünscht kann man unter folgendem Link herunterladen:
http://www.easyvmx.com/software/easymac.sh

Danach einfach ausführbar machen und aufrufen. Das Script zeigt einem anschließend alle zur Verfügung stehenden Optionen an.

OpenVZ “ps aux” und “top” Ausgabe filtern

10. Mai 2010 Keine Kommentare

Bei OpenVZ handelt es sich um eine Container basierte Virtualisierungslösung für und unter Linux. Also eine Art aufgepimte chroot Umgebung zum Betrieb von mehreren Linux Guests auf einem Hostsystem.

Im Gegensatz zu Xen handelt es sich nicht um eine völlig getrennte Paravirtualisierung, die es ermöglicht einen nur dem Guest zugewiesenen eigenen Kernel zu betreiben und dadurch mittels qemu sogar Windows zu betrieben.

Eines meiner ersten Probleme beim Betrieb von OpenVZ war die Ausgabe von “ps aux” oder “top” auf dem Hostsystem (also VEID 0). Es werden nämlich immer sämtliche Prozesse und laufende Programme angezeigt. Das heißt auch diejenigen, die auf den vServern betrieben werden. Dies ist vor allem dann nervig wenn man im Prinzip nur das Hostsystem kontrollieren möchte und nur dessen Prozesse angezeigt haben will.

Nach einiger Zeit der Recherche bin ich auf das dafür zuständige Tool gestoßen. vzps und vztop heißen die Programme, die in der Lage sind die Ausgabe auf einem OpenVZ Rechner nach VEIDs zu sortieren.

Der Debian Archive finden sich hier:
vzprocps .deb

Die rpm Archive findet man unter:
vzprocps .rpm

Die Installation unter Debian ist denkbar einfach:

cd /usr/src
 
# Für 64-bit Systeme:
wget http://download.openvz.org/debian-systs/pool/openvz/v/vzprocps/vzprocps_2.0.11-1dso2_amd64.deb
 
# Für 32-bit Systeme:
wget http://download.openvz.org/debian-systs/pool/openvz/v/vzprocps/vzprocps_2.0.11-1dso2_i386.deb
 
# Installation:
dpkg -i vzprocps*.deb

Danach ist es möglich vzps und vztop aufzurufen und zu verwenden.
Beispiel:

Wenn man nur die Prozesse für das Hostsystem ( immer VEID 0) sehen möchte:

vzps -E 0

Für vztop ergo:

vztop -E 0

Mittels vzlist ist es möglich eine Auflistung von allen laufenden vServern zu finden. Unter dem Feld CTID werden hier alle IDs ausgegeben die man für den Schalter -E unter vzps oder vztop verwenden kann.

Ich habe gleich unter /root/.bashrc ein Alias dafür angelegt, damit der Aufruf automatisch erfolgt:

alias ps='vzps'

Gebe ich nun ein ps aux erhalte ich die gewohnte Ausgabe. Mit ps -E 0 nur die des Hostsystems.

XEN Konfiguration mit mehreren bzw. zwei Netzwerkkarten

5. Mai 2010 Keine Kommentare

Szenario

Ein Server besitzt zwei (oder mehrere) Netzwerkkarten die an unterschiedliche Internet Service Provider (ISP) Uplinks angeschlossen sind. Auf dem Server ist XEN aus den Debian Etch Quellen installiert und die unterschiedlichen VServer sollen IP Adresse beider ISP beziehen und darüber erreichbar sein.

Netzwerk Konfiguration:

ISP Interface IP-Range default gateway
uplink1 – ISP1 eth0 192.168.0.0/24 ja
uplink2 – ISP2 eth1 172.16.0.0/24 nein

Domain-0 Konfiguration:

IP-Adresse Interface
192.168.0.10 eth0
172.16.0.10 eth1

V-Server Konfiguration:

Server Netzwerk Bridge IP-Adresse
vserver1 eth0 – ISP1 xenbr0 192.168.0.20
vserver2 eth1 – ISP2 xenbr1 172.16.0.40

Netzwerk Einstellungen am Hostsystem Domain-0

Damit das Hostsystem überhaupt in der Lage ist Traffic über den bisher nicht aktiven Uplink (eth1) und somit über beide ISPs zu versenden, bedarf es dem setzen von einigen Routingregeln. Das Script geht wie oben beschrieben davon aus, dass eth0 der default Gateway (IP: 192.168.0.1) sein soll.

Gateway Routing

/root/gateway_script.sh:

#!/bin/sh
 
# eth0
export IF1="eth0";
export IP1="192.168.0.10";
export P1="192.168.0.1";
export P1_NET="192.168.0.0";
 
# eth1
export IF2="eth1";
export IP2="172.16.0.10";
export P2="172.16.0.1";
export P2_NET="172.16.0.0";
 
# lo
export IF0="lo";
export P0_NET="127.0.0.0";
 
# script
ip route delete default;
ip route delete default;
ip route add $P1_NET dev $IF1 src $IP1 table 1;
ip route add default via $P1 table 1;
ip route add $P2_NET dev $IF2 src $IP2 table 2;
ip route add default via $P2 table 2;
ip route add $P1_NET dev $IF1 src $IP1;
ip route add $P2_NET dev $IF2 src $IP2;
ip rule add from $IP1 table 1;
ip rule add from $IP2 table 2;
ip route add $P0_NET dev $IF0 table 1;
ip route add $P2_NET dev $IF2 table 1;
ip route add 127.0.0.0/8 dev lo table 1;
ip route add $P0_NET dev $IF0 table 2;
ip route add $P1_NET dev $IF1 table 2;
ip route add 127.0.0.0/8 dev lo table 2;
/sbin/route add default gw 192.168.0.1;
echo "done.";
exit
chmod 700 /root/gateway_script.sh

Eintragen eines „reboot“ Cronjobs der das Script einmal nach einem reboot ausführt:

>crontab -e
@reboot /root/gateway_script.sh


Netzwerk Einstellungen

/etc/network/interfaces:

# The loopback network interface
auto lo
iface lo inet loopback
 
# The primary network interface
auto eth0
iface eth0 inet static
        address 192.168.0.10
        netmask 255.255.255.0
        network 192.168.0.0
        broadcast 192.168.0.255
        gateway 192.168.0.1
 
auto eth1
iface eth1 inet static
        address 172.16.0.10
        netmask 255.255.255.0
        network 172.16.0.0
        broadcast 172.16.0.255
        gateway 172.16.0.1

Danach ein Reboot oder ein neustarten der Netzwerkverbindung und Domain-0 sollte über beide Uplinks und die jweilige IP erreichbar sein. Des Weiteren wird der Traffic richtig von „innen nach außen“ versendet, also selektiert was über eth0 und was über eth1 versendet werden muss.

XEN Einstellungen

Um die VServer variabel je nach ISP einstellen zu können muss Bridged Routing mittels eines eigenen Scripts aktiviert werden:

/etc/xen/xend-config.sxp:

#(network-script network-bridge)
(network-script my-network-script)

## Für Debian Etch ##:

/etc/xen/scripts/my-network-script:

#!/bin/sh
dir=$(dirname "$0")
"$dir/network-bridge" "$@" vifnum=0 netdev=eth0 bridge=xenbr0
"$dir/network-bridge" "$@" vifnum=1 netdev=eth1 bridge=xenbr1

####

## Für Debian Lenny ##:

/etc/xen/scripts/my-network-script:

#!/bin/sh
dir=$(dirname "$0")
"$dir/network-bridge" "$@" netdev=eth0
"$dir/network-bridge" "$@" netdev=eth1

####

Weiter für beide Systeme

chmod 755 /etc/xen/scripts/my-network-script

Danach muss xend neugestartet werden. Die unter /etc/xen/ abgelegten VServer Konfigurationsdateien müssen im Netzwerkabschnitt angepasst werden:

...
# eth0 für ISP1
vif = ['ip=192.168.0.x,mac=00:17:de:ad:fa:ce,bridge=xenbr0']
...

oder

...
# eth1 für ISP2
vif = ['ip=172.16.0.x,mac=00:16:de:ad:be:ef,bridge=xenbr1']
...

Die VServer bzw. Xen müssen nach Änderungen an den Konfigurationsdateien immer neugestartet werden!

Erreichte Ziele

Das Debian Xen Hostsystem ist nun über beide Uplinks bzw. Gateways und jeweils einer IP des jeweiligen ISPs im Internet erreichbar. Die VServer können über Bridged Routing sowohl über ISP1 (eth0) als auch über ISP2 (eth1) angebunden werden. Es natürlich möglich mehr als nur zwei Netzwerkkarten und ISPs an einen Server anzuschließen. Vorallem das Routingscript wird jedoch so lange, dass ich an dieser Stelle darauf verzichte :)

– Dieses HowTo enstand als Ergänzung zu http://www.debian-administration.org/articles/470