SchlagwortServer

OpenVZ unter CentOS 5.4 installieren und konfigurieren

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.conf

Der 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ügt

Hiermit 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 vzquota

Damit 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=1

Nun 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.4

Anlegen 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.gz

Um unsreren Container nun mit diesem Template zu erszeugen geben wir folgenden Befehl ein:

vzctl create 101 --ostemplate centos-5-i386-default --config vps.basic

Die 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 --save

Damit wird der Hostname unseres Containers gesetzt

vzctl set 101 --diskspace $(( 1048576*50 )):$(( 1153434*50 )) --save

Hiermit stellen wir unsere Festplattengröße auf 50GB (Soft,Hardlimit)

vzctl set 101 --ipadd 192.168.11.101 --save

Damit 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 --save

Soll der Container beim start mitgestartet werden

vzctl set 101 --nameserver 213.133.99.99 --nameserver 213.133.100.100 --nameserver 213.133.98.98 --save

Die Nameserver setzen

vzctl exec 101 passwd

Das root Passwort unseres Containers setzen

vzctl set 101 --vmguarpages $((256 * 512)) --save

Den Garantierten RAM setzen (mindestgröße)

vzctl set 101 --privvmpages $((256 * 2048)) --save

Den Maximalen RAM setzen (könnte bis auf mindesgröße verkleiner werden)

vzctl start 101

Hiermit 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 101

Verlassen eines Containers:

exit

Speicherverbrauch anzeigen:

vzcalc -v vpsid

Festplattenverbeuacht:

vzquota stat vpsid

Einschalten:

/usr/sbin/vzctl start 101

Ausschalten:

/usr/sbin/vzctl stop 101

Netzwerk 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.X

Damit 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 MASQUERATE

Zusä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 ACCEPT

Damit 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 ACCEPT

Es 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/iptables

Damit sollte alles funktionieren und es können eine beligebe Anzahl von weiteren Containern angelegt werden.

Left 4 Dead dedicated noSteam LAN/Hamachi/Internet Linux Server

Worum gehts:

  • Wie setzte ich einen Left 4 Dead Server für LAN / Hamachi / Internet auf?
  • Wie können Clients am besten auf den/die Server connecten?
  • Wie Administriere ich meinen Server?

Bemerkungen:

Mit den nötigen Patches können alle Clients (Steam / No-Steam) connecten
Die aktuelle Left 4 Dead Version ist 1.009

Aufsetzen des Servers

  1. Anlegen eines Ordners für den Server
    mkdir hlds
    cd hlds
  2. Download des Server über Steam
    wget http://storefront.steampowered.com/download/hldsupdatetool.bin
  3. Updaten und Installieren des Tools
    chmod +x hldsupdatetool.bin
    ./hldsupdatetool.bin chmod +x steam
    ./steam -command update -verify_all
  4. Downloaden der neuesten eSTEAMATiON Version eSTEAMATiON (V1.8) und VUP (V2.11)
  5. Downloaden der neuesten ViTYAN’s GameServers Universal Patch(VUP) Version eSTEAMATiON (V1.8) und VUP (V2.11)
  6. Patchen des Server auf die No-Steam Version
    Folgt der Anleitung auf eSTEAMATiON (V1.8) und VUP (V2.11) des Videos oder der Readme im eSTEAMATiON Archiv.
    Kommt der Punkt mit „Patchen mittels VUP“ entpackt die Dateien von VUP in das aktuelle Verzeichniss und

    chmod +x vup_i686 ./vup_i686 - esteamation-prep -esteamation-allow-dublicate-ids l4d/bin/engine_i486.so

    Damit ist der Server gepatched.

  7. Sollte man beim connecten eines No-Steam Clients einen Neustart beim Server haben.
    So liegt dies an einem Fehler in der steamclient_linux.so und man muss diese durch eine gepachte version ersetzen. Downloaden der Version von: REVOLUTiON Emulator und folgt der Linux Version (V1.5). Die Datei entpacken und über l4d/bin/steamclient_linux.so spielen. Nun sollte es zu keinen Problemen mehr kommen.
  8. Konfigurieren des Server

  9. Anlegen einer server.cfg
    nano l4d/left4dead/cfg/server.cfg
    -------------------------------------------------------------------------------------------
    hostname "xxxxxxxxxxxxxx"
    rcon_password "xxxxxxxxxx"
    
    // sv_password "" // password to server, leave commented out for public server
    sv_lan 1 // 1 - LAN , 0 - Internet
    //sv_steamgroup 40346 // Steam group # to assign to server
    //sv_steamgroup_exclusive 0 // <1> Do not connect to the Match Making Service
    sv_allow_lobby_connect_only 0 // Allow connections without creating lobby
    sv_region 255 // East Coast
    sv_visiblemaxplayers 8 // Visible Player Slots
    mp_disable_autokick 1 // Keeps from automatically kicking players
    
    // Server Gameplay Settings
    sv_cheats 0 // 0 - Off, 1 - On
    
    // Voice Options
    sv_alltalk 0 // 0 - Off, 1 - On
    
    sv_pausable 1 // is the server pausable
    
    sv_downloadurl "http://myserver.com"
    sv_filetransfercompression 0
    
    --------------------------------------------------------------------------------------------
  10. Versus-Only Server
    Auf der Seite Instructions to Set Up Perfect Versus Only Serverfindet man eine immer aktualisierte Anleitung wie man einen Versus-Only / Normalen Server aufsetzt.
    Bei der aktuellen Version vom l4dmapchangeforcer Plugib muss die config Datei angepasst werden (Standardeinstellung ist coop)
    Das Plugin L4D Director Enforcer sollte man glaub ich nicht installieren (mit hat es bei mir nicht funktioniert)
  11. Coop-Only Server
    Einfach als Startmap eine CoopMap einstellen, diese wird mit der neuen Version des Force mapchanger (V1.03)
    gewechselt
  12. Zusätzliche Maps
    Hinzufügen der fehlenden VS Maps aus dem Mappack von diesem Howto und eintragen in maplist.txt, mapcycle.txt, missioncycle.txt.
    Anpassen der left4dead/addons/sourcemod/data/sm_l4dvs_mapchanger.
    Sollen die Maps von den Clients downgeloaded werden können, muss in der server.cfg die sv_downloadurl eingestellt werden.
  13. Starten des Servers
    ./srcds_run l4d -console +ip 192.168.1.141 +hostport 27015 -nomaster +exec server.cfg +map l4d_farm01_hilltop
  14. Client Patchen und Verbinden

  15. Patchen des Clients
    Hat man einen Client der nicht auf der aktuellen Version 1.0.0.9 ist kann man sich von hier: Left 4 Dead (Update 23.01.2009) den Aktuellen Patch mit allen nötigen No-Steam Dateien Downloaden
  16. Starten aus der Console
    Man erstellt einen Link auf die left4dead.exe und hängt hinter dern pfad …left4dead.exe“ -console an, dannach startet das Spiel mit der offenenen Console. Man gibt nun

    connect 00.00.00.00 (Die aktuelle IP des Server statt 00..).

    Damit sollte man auf den laufenden Server connecten und spielen können.

  17. Starten mittels ogerlauncher
    Auf der Seite http://ogerlauncher.com/ gibt es alle nötigen Informationen, auch wie man über Hamachi oder im LAN spielen kann. Einfach ein bisschen im Forum herumschauen.
  18. Startscript Client
    Mit einem kleinen Batch Skript lassen sich Clients einfach auf verschiedene Server verbinden. Das ist besonders hilfreich auf LAN-Partys. Dazu kann der Client einfach mit dem Skript gepackt werden und kann von den Gästen direkt entpackt und gespielt werden

    --------------------------------------------------------------------------------------------------
    ECHO OFF
    ECHO.
    ECHO ----------------------------------------
    ECHO LEGA LEFT 4 DEAD SERVER CONNECTOR
    ECHO ----------------------------------------
    ECHO.
    SET SERVERIP1=192.168.131.14
    sET SERVERIP2=192.168.131.11
    SET GAMEPATH=
    SET GAMEEXE=left4dead.exe
    ECHO.
    ECHO Der Name kann in der Datei rev.ini (in diesem Verzeichniss) geändert werden
    ECHO Den Namen hinter dem Befehl "PlayerName=" ändern
    ECHO.
    :choosserver
    ECHO.
    ECHO WAEHLE DEN SERVER
    ECHO.
    ECHO 1 - LEGA VERSUS SERVER 1
    ECHO 2 - LEGA VERSUS SERVER 2
    ECHO 3 - LEGA COOP SERVER 1
    ECHO 4 - LEGA COOP SERVER 2
    ECHO 5 - LEGA TURNIER SERVER 1
    ECHO 6 - LEGA TURNIER SERVER 2
    ECHO 7 - LEGA TURNIER SERVER 3
    ECHO 8 - LEGA TURNIER SERVER 4
    SET /P SERVER=Gib 1,2,3,4,5 oder 6 ein und drücke ENTER:
    IF %SERVER%==1 (
    SET PORT=27015
    SET SERVERIP=%SERVERIP1%
    )
    IF %SERVER%==2 (
    SET PORT=27016
    SET SERVERIP=%SERVERIP2%
    )
    IF %SERVER%==3 (
    SET PORT=27017
    SET SERVERIP=%SERVERIP1%
    )
    IF %SERVER%==4 (
    SET PORT=27018
    SET SERVERIP=%SERVERIP2%
    )
    IF %SERVER%==5 (
    SET PORT=27019
    SET SERVERIP=%SERVERIP1%
    )
    IF %SERVER%==6 (
    SET PORT=27020
    SET SERVERIP=%SERVERIP2%
    )
    IF %SERVER%==7 (
    SET PORT=27021
    SET SERVERIP=%SERVERIP1%
    )
    IF %SERVER%==8 (
    SET PORT=27022
    SET SERVERIP=%SERVERIP2%
    )
    %GAMEPATH%%GAMEEXE% -console -novid -game left4dead +connect %SERVERIP%:%PORT%
    ------------------------------------------------------------------------------------

    Für ein zentrales Connection Script: Einfach die Datei über eine Netzlaufwerk mit deiner Bat Datei aufrufen. Damit können auch nachträglich noch Änderungen für alle Clients durchgeführt werden.

    -------------------------------------------------------------------------------------
    call \\server\Pfad\command.bat
    -------------------------------------------------------------------------------------
  19. Administration des Servers

  20. Wichtige Server Befehle
    maps * ... anzeigen der maps
    map l4d_xxxxx ... wechseln auf die angezeigte Map (alle Player werden disconnected)
    changelevel l4d_xxx ... wechseln des Level ohne das die Player disconnected werden
    say xxxxxxxx ... Etwas über die Console ausgeben
  21. Probleme
    Auf manchen Levels werden beim befehl changelevel die Teams verwürfelt
    Will man im Versusmodus eine ganze Mission spielen werden die Spieler immer wieder durchgewürfelt

Fragen / Anregungen / Beschwerden könnt ihr gerne in die Comments posten!

~~~ theAlmega