Dieser Artikel beschreibt wie man openVZ auf CentOS 5.x installiert (bei mir war es 5.4) sowie Container erstellt, einstellt und verwaltet und auch iptables konfiguriert damit private sowie externe IP Adressen funktionieren.
OpenVZ bietet die Möglichekeit auf einem Server mehrer virtuelle Contrainer aufzusetzten, die alle verschiedene Linux Distribution beinhalten können soch aber einen gemeinsamen Kernel teilen. Die Container sind völlig voneinder abgeschottet und erscheinen wie pysikalische Server.
Ich bin nach der Anleitung von PlanetAmon vorgegangen und werde diese hier um eineige Details erweitern. Aber auch der Quick Installation Guide von openVZ ist sehr hilfreich und detailiert.
Installieren von OpenVZ
Als ersters müssen wir die openVZ Repos zu zu unseren Quellen hinzufügen.
cd /etc/yum.repos.d wget http://download.openvz.org/openvz.repo rpm --import http://download.openvz.org/RPM-GPG-Key-OpenVZ
Es gibt verschiedene Arten von openVZ Kernel (dessen volle bedeutung mir nicht ganz klar ist), wichtig ist jedoch den richtigen Kernel für ein 32bit oder ein 64bit System auszuwählen.
yum install ovzkernel
Bei einem 64bit System werden beide Kernel angeboten deshalb hängen wir die genaue bezeichnung an unser Paket:
yum install ovzkernel.x86_64
Der Kernel ist nun installiert und kann gebootet werden. Dazu muss die Datei /boot/grub/grub.conf editiert werden. Falls nano nocht nicht installiert ist, hilft: yum install nano
nano /boot/grub/grub.confDer Kernel mit der Bezeichnung „CentOS (2.6.8-022stab029.1)“ oder einer anderen Versionsnummer ist der von openVZ (müsste als erster Eintrag stehen). Wir editieren nun die Konfig Datei um die openVZ Kernels gleich zu erkennen, ersetzen wir den Namen CentOS mit openVZ. Falls ein Fehler beim Booten auftritt (kernel Panic) soll der alte Kernel gebootet werden (hilfreich bei Servern auf die man keinen physikalischen Zugriff hat).
timeout 5 default saved # von 0 auf saved geändert fallback 1 # hinzugefügt title OpenVZ (2.6.18-164.10.1.el5.028stab067.4) # von CentOS auf OpenVZ geändert root (hd0,1) kernel /vmlinuz-2.6.18-164.10.1.el5.028stab067.4 ro root=/dev/md2 vga=0x317 panic=5 # panic=5 hinzugefügt initrd /initrd-2.6.18-164.10.1.el5.028stab067.4.img savedefault fallback # hinzugefügt title CentOS (2.6.18-164.11.1.el5) root (hd0,1) kernel /vmlinuz-2.6.18-164.11.1.el5 ro root=/dev/md2 vga=0x317 panic=5 initrd /initrd-2.6.18-164.11.1.el5.img savedefault # hinzugefügtHiermit wird der Eintrag 0 defaultmäßig gebootet und bei einer Kernelpanic wird auf den Eintrag 1 umgeschalten, damit das System automatisch wieder bootet. Das wird auch duch den Parameter panic=5 bewirkt der nach 5 Sekungen den Computer neustartet.
Damit das System nach einem erfolgreichen Boot wieder den Defaulteintrag 0 nimmt, wird in die Datei /etc/rc.local die Zeile „echo „savedefault –default=0 –once“ | /sbin/grub –batch“ hinzugefügt.
Konfiguration
Zuerst brauchen wir einige Admin Tools:
yum install vzctl vzquotaDamit das Netzwerk richtig funktioniert brauchen wir zusätzliche Zeilen in der Datei /etc/sysctl.conf
nano /etc/sysctl.conf net.ipv4.ip_forward = 1 net.ipv4.conf.default.proxy_arp = 0 net.ipv4.conf.all.rp_filter = 1 kernel.sysrq = 1 net.ipv4.conf.default.send_redirects = 1 net.ipv4.conf.all.send_redirects = 0 net.ipv4.icmp_echo_ignore_broadcasts=1 net.ipv4.conf.default.forwarding=1Nun starten wir unser System neu (mit reboot) und loggen uns wider ein. Um zu kontrollieren ob der richtige Kernel geladen wurde verwenen wir den Befehl:
uname -r 2.6.18-164.10.1.el5.028stab067.4Anlegen eines Containers
Zuerst brauchen wir ein Template für einseren Container, das ist ein fertiges System, dass anschließend im Container ausgeführt wird und mit dem wir artbeiten können.
OpenVZ stellt einige Templates auf ihrer Seite zur verfügung. Das CentOS 5 Template laden wir mit folgenden Befehlen herunter.
cd /vz/template/cache wget http://download.openvz.org/template/precreated/contrib/centos-5-i386-default.tar.gzUm unsreren Container nun mit diesem Template zu erszeugen geben wir folgenden Befehl ein:
vzctl create 101 --ostemplate centos-5-i386-default --config vps.basicDie Nummer 101 ist der Name unter der unser Container nun konfiguriert werden kann.
Um den Container nun zu konfiguriern wird das Programm vzctl benutzt:
vzctl set 101 --hostname webspace.die-lega.org --saveDamit wird der Hostname unseres Containers gesetzt
vzctl set 101 --diskspace $(( 1048576*50 )):$(( 1153434*50 )) --saveHiermit stellen wir unsere Festplattengröße auf 50GB (Soft,Hardlimit)
vzctl set 101 --ipadd 192.168.11.101 --saveDamit setzten wir die IP Adresse (entweder eine öffentliche oder eine Private (nur interne), die dann mit iptables und NAT auf die öffentliche vom Server umgesetzt werden muss
vzctl set 101 --onboot yes --saveSoll der Container beim start mitgestartet werden
vzctl set 101 --nameserver 213.133.99.99 --nameserver 213.133.100.100 --nameserver 213.133.98.98 --saveDie Nameserver setzen
vzctl exec 101 passwdDas root Passwort unseres Containers setzen
vzctl set 101 --vmguarpages $((256 * 512)) --saveDen Garantierten RAM setzen (mindestgröße)
vzctl set 101 --privvmpages $((256 * 2048)) --saveDen Maximalen RAM setzen (könnte bis auf mindesgröße verkleiner werden)
vzctl start 101Hiermit starten wir die Maschine
Betrieb & Überwachung eines Containers
Hier einiege Befehle die für den Betrieb eines Containers wichtig sind:
Öffnen eines Containers:
/usr/sbin/vzctl enter 101Verlassen eines Containers:
exitSpeicherverbrauch anzeigen:
vzcalc -v vpsidFestplattenverbeuacht:
vzquota stat vpsidEinschalten:
/usr/sbin/vzctl start 101Ausschalten:
/usr/sbin/vzctl stop 101Netzwerk konfiguration
Standardmäßig ist bei CentOS netfilter (iptables) aktiviert und lässt nur eingehende Verbindung auf bestimmten Ports zu (zB ssh).
Es wird auch empfohlen sich über iptables zu informieren, damit man weiß was man hier tut, sonst sperrt man sich sehr schnell aus seinem eigenen Server aus.
Um nun unseren Containern den Zugang zum Netz zu gewähren müssen einige Regeln hinzugefügt werden:
Wenn wir private IP auf unseren Container verwenden zB.: das Netz 192.168.11.0/24 also alle Adressen von 192.168.11.1 – 192.168.11.254 müssen wir NAT konfigurieren:
iptables -I POSTROUTING -s 192.168.11.0/255.255.255.0 -o eth0 -j SNAT --to-source X.X.X.XDamit werden alle Pakete vom Netz 192.168.11.0/24 auf die Adresse x.x.x.x (die öffentliche Adresse des Servers) umgesetzt. Sollte der Server keine fixe IP Adresse haben, dann sollte statt SNAT MASQUERATE verwendet werden.
iptables -I POSTROUTING -s 192.168.11.0/255.255.255.0 -o eth0 -j MASQUERATEZusätzlich müssen aber noch die Pakete erlaubt werden:
iptables -I FORWARD -s 192.168.11.0/255.255.255.0 -j ACCEPT iptables -I FORWARD -d 192.168.11.0/255.255.255.0 -j ACCEPTDamit werden alle Pakte von und zu unserem Netz die geroutet werden (nicht zu unserem Server gehen) erlaubt.
Hat der Container eine öffentliche IP Adresse müssen nur die Paket von und zu dieser Adresse erlaubt werden:
iptables -I FORWARD -s X.X.X.X -j ACCEPT iptables -I FORWARD -d X.X.X.X -j ACCEPTEs können so auch in einem Container eine öffentliche Adresse und in anderen private Adressen verwendet werden.
Um die Konfiguration von iptables dauerthauft zu speichern führen wir folgenden Befehl aus:
/sbin/iptables-save > /etc/sysconfig/iptablesDamit sollte alles funktionieren und es können eine beligebe Anzahl von weiteren Containern angelegt werden.