Counter-Strike 2's dedicated server shares its app ID with the game itself, the install is bigger than most people expect, and a server that runs fine locally can sit invisible to every player until you get one NAT detail right.Der Dedicated-Server von Counter-Strike 2 teilt sich seine App-ID mit dem Spiel selbst, die Installation ist größer, als die meisten erwarten, und ein Server, der lokal einwandfrei läuft, kann für jeden Spieler unsichtbar bleiben, bis du ein NAT-Detail richtig hinbekommst.
Unlike Valheim or DayZ, Counter-Strike 2 does not ship a separate dedicated-server application. The Linux dedicated server is installed from the same app ID as the game:Anders als Valheim oder DayZ liefert Counter-Strike 2 keine eigene Dedicated-Server-Anwendung. Der Linux-Dedicated-Server wird aus derselben App-ID wie das Spiel installiert:
+login anonymousApp-ID 730, anonym installierbar mit SteamCMD über +login anonymousgame/bin/linuxsteamrt64/cs2 under wherever you told SteamCMD to installdie Start-Binary landet unter game/bin/linuxsteamrt64/cs2, innerhalb des Verzeichnisses, das du SteamCMD als Installationsziel angegeben hastBudget disk space generously. The install runs well past 30 GB before you add a single Workshop map, and that number grows with every Valve update — check df -h after your first app_update rather than trusting a figure from a guide. That size is the practical reason to start on a 120 GB disk rather than a smaller one: a 50 or 80 GB volume can fill up from the install alone before you have added a single map from the Workshop.Plane den Speicherplatz großzügig ein. Die Installation kommt auf deutlich über 30 GB, bevor du eine einzige Workshop-Map hinzufügst, und diese Zahl wächst mit jedem Valve-Update — prüfe df -h nach deinem ersten app_update, statt einer Zahl aus einer Anleitung zu vertrauen. Diese Größe ist der praktische Grund, mit einer 120-GB-Platte zu starten statt mit einer kleineren: Ein 50- oder 80-GB-Volume kann schon allein durch die Installation vollaufen, bevor du auch nur eine einzige Map aus dem Workshop hinzugefügt hast.
Everything in this guide is the self-managed route: your own SteamCMD install, your own configs, your own systemd unit. If you would rather have the server itself installed and updated for you, overnight.host also runs a managed Counter-Strike server on a Pterodactyl panel — see our managed Counter-Strike panel guide for that route instead.Alles in dieser Anleitung ist der selbstverwaltete Weg: deine eigene SteamCMD-Installation, deine eigenen Configs, deine eigene systemd-Unit. Wenn es dir lieber ist, dass der Server selbst für dich installiert und aktualisiert wird, betreibt overnight.host auch einen verwalteten Counter-Strike-Server auf einem Pterodactyl-Panel — sieh dir stattdessen unsere Anleitung zum verwalteten Counter-Strike-Panel an.
CS2's server process leans on one fast core far more than it leans on having many of them. A wide VPS with mediocre per-core clock speed will feel worse than a narrower one with a faster core, and adding vCPUs past what a handful of simultaneous players need does very little.Der Serverprozess von CS2 stützt sich weit mehr auf einen schnellen Kern als darauf, viele davon zu haben. Ein breiter VPS mit mittelmäßiger Taktrate pro Kern fühlt sich schlechter an als ein schmalerer mit einem schnelleren Kern, und zusätzliche vCPUs über das hinaus, was eine Handvoll gleichzeitiger Spieler braucht, bringen kaum etwas.
For memory, 8 GiB is comfortable for a normal competitive or casual server (CS2 uses sub-tick simulation rather than CS:GO's fixed tickrate, but the memory floor is comparable to a legacy 64-tick box) with a full lobby, config reloads and the odd workshop map cached in RAM. 4 GiB works for a small practice server with a handful of humans and a few bots, where the entity count and player count both stay low. Move up once you are running multiple maps in rotation, workshop content, or plugins on top of the vanilla server — none of those are covered in this guide, and each one adds its own memory floor.Beim Arbeitsspeicher sind 8 GiB komfortabel für einen normalen Competitive- oder Casual-Server (CS2 nutzt Sub-Tick-Simulation statt der festen Tickrate von CS:GO, aber die Speicheruntergrenze ist vergleichbar mit einer klassischen 64-Tick-Box) mit voller Lobby, Config-Reloads und der gelegentlichen im RAM gecachten Workshop-Map. 4 GiB reichen für einen kleinen Übungsserver mit einer Handvoll Menschen und ein paar Bots, bei dem sowohl Entity- als auch Spielerzahl niedrig bleiben. Geh höher, sobald du mehrere Maps in Rotation, Workshop-Content oder Plugins zusätzlich zum Vanilla-Server fährst — keines davon wird in dieser Anleitung behandelt, und jedes bringt seine eigene Speicheruntergrenze mit.
Deploy an Ubuntu LTS image, then do the security basics before anything is exposed: a non-root user, your SSH key on it, password login switched off, a firewall that defaults to deny. We wrote those up as connect to your VPS over SSH and secure your VPS.Setze ein Ubuntu-LTS-Image auf und erledige dann die Sicherheitsgrundlagen, bevor irgendetwas exponiert ist: ein Non-Root-Nutzer, dein SSH-Key darauf, Passwort-Login ausgeschaltet, eine Firewall, die standardmäßig blockiert. Wir haben das aufgeschrieben unter über SSH mit deinem VPS verbinden und deinen VPS absichern.
SteamCMD needs the 32-bit runtime even though the CS2 server binary itself is 64-bit:SteamCMD braucht die 32-Bit-Runtime, auch wenn die CS2-Server-Binary selbst 64-Bit ist:
sudo dpkg --add-architecture i386
sudo apt update
sudo apt install -y lib32gcc-s1 curl tar
sudo useradd -m -s /bin/bash cs2
Run the server as this dedicated cs2 account, never as root and never as your own login — a crashing or compromised game server should not have write access to anything beyond its own home directory.Betreibe den Server als diesen dedizierten Account cs2, niemals als root und niemals unter deinem eigenen Login — ein abstürzender oder kompromittierter Game-Server sollte über sein eigenes Home-Verzeichnis hinaus keinen Schreibzugriff haben.
Everything below runs as the cs2 user:Alles Folgende läuft als der Nutzer cs2:
sudo -u cs2 -i
mkdir -p ~/steamcmd && cd ~/steamcmd
curl -sSL https://media.steampowered.com/client/installer/steamcmd_linux.tar.gz | tar zxf -
./steamcmd.sh +force_install_dir /home/cs2/server \
+login anonymous \
+app_update 730 validate \
+quit
Run that exact command again after every Valve update. Clients on a newer build cannot join an older server at all — there is no partial compatibility — so a stale server just quietly stops accepting players until you re-run it.Führe genau diesen Befehl nach jedem Valve-Update erneut aus. Clients mit einem neueren Build können einem älteren Server überhaupt nicht beitreten — es gibt keine teilweise Kompatibilität —, sodass ein veralteter Server einfach stillschweigend aufhört, Spieler anzunehmen, bis du ihn erneut ausführst.
The server binary lives under the install directory you set above:Die Server-Binary liegt unter dem Installationsverzeichnis, das du oben festgelegt hast:
cd /home/cs2/server
./game/bin/linuxsteamrt64/cs2 -dedicated \
+map de_dust2 \
-port 27015 \
+game_type 0 +game_mode 1 \
+exec server.cfg
-dedicated — runs headless, no rendering-dedicated — läuft headless, kein Rendering+map de_dust2 — the starting map; the server switches maps at runtime through its own mapcycle or RCON, this just picks where it boots+map de_dust2 — die Startmap; der Server wechselt Maps zur Laufzeit über seinen eigenen Mapcycle oder RCON, das hier legt nur fest, womit er hochfährt-port 27015 — the game port; change it if you are running more than one server on the same box, and see the NAT section below before you do-port 27015 — der Spiel-Port; ändere ihn, wenn du mehr als einen Server auf derselben Maschine betreibst, und sieh dir vorher den NAT-Abschnitt weiter unten an+game_type 0 +game_mode 1 — competitive; use +game_type 0 +game_mode 0 for casual instead+game_type 0 +game_mode 1 — Competitive; nutze stattdessen +game_type 0 +game_mode 0 für Casual+exec server.cfg — loads the config file from Step 5 on startup; the engine also execs server.cfg on its own when a map loads, so this is cheap insurance rather than the only thing making it load+exec server.cfg — lädt beim Start die Konfigurationsdatei aus Schritt 5; die Engine führt server.cfg beim Laden einer Map ohnehin selbst aus, diese Zeile ist also günstige Absicherung und nicht das Einzige, was sie lädtTo load a specific community map instead of a stock one, host_workshop_map takes a map's numeric Workshop file ID in place of +map. The exact behaviour around caching and re-downloading has changed between Valve updates before, so check the map's own Workshop page for its ID and confirm current syntax against Valve's own documentation before you build a rotation around it — the first load of any new map takes noticeably longer while the server fetches it.Um statt einer Stock-Map eine bestimmte Community-Map zu laden, nimmt host_workshop_map anstelle von +map die numerische Workshop-Datei-ID einer Map entgegen. Das genaue Verhalten rund um Caching und erneutes Herunterladen hat sich zwischen Valve-Updates schon geändert, prüfe also die ID auf der eigenen Workshop-Seite der Map und gleiche die aktuelle Syntax mit Valves eigener Dokumentation ab, bevor du eine Rotation darauf aufbaust — der erste Load einer neuen Map dauert spürbar länger, während der Server sie holt.
A public CS2 server needs a Game Server Login Token from Steam, tied to app 730, or it will not show up as a verified server and can be rate-limited or refused. Generate one from your own Steam account against app ID 730, then pass it on the command line or in server.cfg:Ein öffentlicher CS2-Server braucht ein Game Server Login Token von Steam, gebunden an App 730, sonst taucht er nicht als verifizierter Server auf und kann ratenbegrenzt oder abgewiesen werden. Erzeuge eines über deinen eigenen Steam-Account gegen App-ID 730 und übergib es dann auf der Kommandozeile oder in server.cfg:
sv_setsteamaccount YOUR_GSLT_HERE
Treat the token like a credential: it identifies your server to Steam, and a token used by two servers at once will fight over the same identity.Behandle das Token wie ein Credential: Es identifiziert deinen Server gegenüber Steam, und ein Token, das gleichzeitig von zwei Servern verwendet wird, konkurriert um dieselbe Identität.
server.cfg lives at game/csgo/cfg/server.cfg inside your install — CS2 still uses the csgo folder name for its content directory. Create it yourself; nothing generates it for you:server.cfg liegt unter game/csgo/cfg/server.cfg innerhalb deiner Installation — CS2 verwendet für sein Content-Verzeichnis weiterhin den Ordnernamen csgo. Leg sie selbst an; nichts erzeugt sie für dich:
hostname "My CS2 Server"
sv_setsteamaccount YOUR_GSLT_HERE
rcon_password "correcthorse"
sv_lan 0
exec gamemode_competitive_server.cfg
Lock the file down the moment you save it. A text editor or heredoc run as the cs2 user writes this under the default Ubuntu umask, which means 644 — world-readable, with a live RCON password and Steam GSLT sitting in plain text on the box:Sperre die Datei in dem Moment, in dem du sie speicherst. Ein Texteditor oder ein Heredoc, ausgeführt als Nutzer cs2, schreibt sie unter der Standard-Ubuntu-umask, was 644 bedeutet — weltweit lesbar, mit einem aktiven RCON-Passwort und Steam-GSLT im Klartext auf der Maschine:
sudo chmod 600 /home/cs2/server/game/csgo/cfg/server.cfg
The file is already owned by cs2, so the chmod alone is enough; no chown needed.Die Datei gehört bereits cs2, daher reicht das chmod allein aus; kein chown nötig.
Valve ships gamemode_competitive_server.cfg (and a gamemode_casual_server.cfg counterpart) alongside server.cfg in the same cfg folder, and the engine normally auto-execs the one matching your current +game_type/+game_mode pair on its own. Adding the exec line in server.cfg is a harmless belt-and-suspenders way to guarantee it loads rather than the only thing making it load — confirm current behaviour against Valve's own dedicated-server documentation before you lean on either assumption.Valve liefert gamemode_competitive_server.cfg (und ein gamemode_casual_server.cfg-Gegenstück) zusammen mit server.cfg im selben cfg-Ordner aus, und die Engine führt normalerweise von selbst automatisch die Datei aus, die zu deinem aktuellen +game_type/+game_mode-Paar passt. Die exec-Zeile in server.cfg hinzuzufügen ist eine harmlose Gürtel-und-Hosenträger-Absicherung, die das Laden garantiert, statt das Einzige zu sein, was es überhaupt lädt — prüfe das aktuelle Verhalten anhand von Valves eigener Dedicated-Server-Dokumentation, bevor du dich auf eine der beiden Annahmen verlässt.
rcon_password is what authenticates remote console commands, and it travels over the same port as the game itself rather than a separate one. Leaving it blank disables RCON outright; setting it to something real without also restricting who can reach it hands remote control of your server to anyone who finds the port. Do not forward or expose RCON beyond a private interface: reach it over SSH from the box itself, from a VPN, or from a firewall rule that only accepts that traffic from your own IP. Never reuse the RCON password anywhere else, and remember that a credential is only as private as the file holding it — the chmod above is not optional.rcon_password authentifiziert Remote-Console-Befehle und läuft über denselben Port wie das Spiel selbst, nicht über einen separaten. Lässt du es leer, ist RCON komplett deaktiviert; setzt du es auf etwas Echtes, ohne zusätzlich einzuschränken, wer es erreichen kann, gibst du jedem, der den Port findet, die Fernsteuerung über deinen Server. Leite RCON nicht weiter und exponiere es nicht über eine private Schnittstelle hinaus: Erreiche es über SSH von der Maschine selbst, über ein VPN oder über eine Firewall-Regel, die diesen Traffic nur von deiner eigenen IP akzeptiert. Verwende das RCON-Passwort niemals anderswo wieder, und denk daran, dass ein Credential nur so privat ist wie die Datei, die es enthält — das chmod oben ist nicht optional.
Counter-Strike 2 needs 27015 reachable, and the practical detail that catches people: it needs to be forwarded as both UDP and TCP, not just one.Counter-Strike 2 braucht 27015 erreichbar, und das praktische Detail, das viele reinlegt: Der Port muss als sowohl UDP als auch TCP weitergeleitet werden, nicht nur als eines von beiden.
Confirm ufw is actually enforcing anything before you trust these rules: sudo ufw status. A fresh Ubuntu install ships with ufw inactive, and an allow rule against an inactive firewall is a silent no-op — it neither opens the port further nor closes it, it just does nothing until you run sudo ufw enable.Vergewissere dich, dass ufw überhaupt etwas durchsetzt, bevor du diesen Regeln vertraust: sudo ufw status. Eine frische Ubuntu-Installation kommt mit inaktivem ufw, und eine allow-Regel gegen eine inaktive Firewall ist ein stiller No-op — sie öffnet den Port nicht weiter und schließt ihn auch nicht, sie tut schlicht nichts, bis du sudo ufw enable ausführst.
sudo ufw allow 27015/tcp
sudo ufw allow 27015/udp
If your VPS gives you NAT IPv4 rather than an address of your own, you get a small, fixed set of forwarded ports rather than the ability to open anything you like, and whether 27015 happens to be among them depends on the plan. Confirm it before you build around this setup. If it is not forwarded, or you want it guaranteed, ask for a dedicated IPv4 (on our plans that is available on request by e-mail rather than as a self-service add-on). Background on the trade-off is in NAT IPv4 vs a dedicated IP.Gibt dir dein VPS NAT-IPv4 statt einer eigenen Adresse, bekommst du einen kleinen, festen Satz weitergeleiteter Ports statt der Möglichkeit, alles zu öffnen, was du willst, und ob 27015 darunter ist, hängt vom Tarif ab. Bestätige das, bevor du dein Setup darauf aufbaust. Ist der Port nicht weitergeleitet, oder willst du ihn garantiert haben, frag nach einer dedizierten IPv4 (bei unseren Tarifen auf Anfrage per E-Mail statt als Self-Service-Add-on erhältlich). Hintergrund zu diesem Trade-off findest du unter NAT IPv4 vs. dedizierte IP.
Once the port is reachable, players connect with the standard Source-engine syntax:Sobald der Port erreichbar ist, verbinden sich Spieler mit der Standard-Source-Engine-Syntax:
connect your.server.ip:27015
Save as /etc/systemd/system/cs2.service:Speichere als /etc/systemd/system/cs2.service:
[Unit]
Description=Counter-Strike 2 dedicated server
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
User=cs2
WorkingDirectory=/home/cs2/server
ExecStart=/home/cs2/server/game/bin/linuxsteamrt64/cs2 -dedicated +map de_dust2 -port 27015 +game_type 0 +game_mode 1 +exec server.cfg
Restart=on-failure
RestartSec=10
TimeoutStopSec=30
[Install]
WantedBy=multi-user.target
Restart=on-failure brings the process back after a crash without masking a config mistake that makes it exit immediately and loop forever. A plain systemctl stop sends the default termination signal, and the engine generally accepts that as a clean shutdown request — but if you see the process hang past a few seconds instead of exiting, add KillSignal=SIGINT to the unit to send an interrupt rather than a terminate. TimeoutStopSec=30 above is already the SIGKILL backstop either way, so a hung stop costs you at most half a minute. Enable and watch it:Restart=on-failure bringt den Prozess nach einem Absturz zurück, ohne einen Konfigurationsfehler zu verschleiern, der ihn sofort beenden und endlos in eine Schleife laufen lässt. Ein einfaches systemctl stop sendet das Standard-Terminierungssignal, und die Engine akzeptiert das im Allgemeinen als sauberen Shutdown-Wunsch — siehst du den Prozess aber länger als ein paar Sekunden hängen statt sauber zu beenden, füge der Unit KillSignal=SIGINT hinzu, um ein Interrupt statt eines Terminate zu senden. TimeoutStopSec=30 oben ist so oder so bereits die SIGKILL-Rückfallebene, ein hängender Stop kostet dich also höchstens eine halbe Minute. Aktivieren und beobachten:
sudo systemctl enable --now cs2
journalctl -u cs2 -f
Full disclosure: this is what we sell. The CS2 server install alone runs well past 30 GB and keeps growing with Valve updates, and the game wants a fast single core more than many of them, so Pro (4 vCPU, 8 GiB, 120 GB) is sized for the disk first and the RAM second — Standard (2 vCPU, 4 GiB, 80 GB) is fine for a small practice box with a few bots, but a public competitive server wants Pro's headroom on both fronts.Zur vollen Transparenz: Das ist, was wir verkaufen. Allein die CS2-Server-Installation kommt auf deutlich über 30 GB und wächst mit jedem Valve-Update weiter, und das Spiel will eher einen schnellen einzelnen Kern als viele davon, deshalb ist Pro (4 vCPU, 8 GiB, 120 GB) zuerst auf die Platte und erst danach auf den RAM ausgelegt — Standard (2 vCPU, 4 GiB, 80 GB) reicht für eine kleine Übungsbox mit ein paar Bots, aber ein öffentlicher Competitive-Server will den Spielraum von Pro auf beiden Fronten.
Linux KVM VPS — EUR 4.99 to EUR 59.99 a month, on our own single-tenant bare metal in Dallas, TX and Charlotte, NC. Full hardware virtualisation (KVM), your own kernel, full root. Six tiers, vps-starter to vps-ultra. Starter is 1 vCPU, 1 GiB RAM, 25 GB disk.Linux-KVM-VPS — 4,99 bis 59,99 EUR im Monat, auf unserer eigenen Single-Tenant-Bare-Metal-Hardware in Dallas, TX und Charlotte, NC. Vollständige Hardware-Virtualisierung (KVM), eigener Kernel, volles Root. Sechs Tarife, vps-starter bis vps-ultra. Starter hat 1 vCPU, 1 GiB RAM, 25 GB Speicher.
You order in the shop, pay by card (Stripe) or SEPA bank transfer, and your login details are e-mailed to you once the service is set up. Support is e-mail, run by one person, with no guaranteed response time. All prices are final totals under the German small-business rule (§19 UStG); no VAT is added or shown.Du bestellst im Shop, zahlst per Karte (Stripe) oder SEPA-Überweisung, und deine Zugangsdaten werden dir per E-Mail zugeschickt, sobald der Dienst eingerichtet ist. Support läuft per E-Mail, von einer einzelnen Person betrieben, ohne garantierte Reaktionszeit. Alle Preise sind Endpreise. Gemäß § 19 UStG wird keine Umsatzsteuer ausgewiesen.
Order vps-pro → · Linux KVM VPS overviewvps-pro bestellen → · Übersicht Linux-KVM-VPS
Written by the person who runs overnight.host: a small, honest hosting company on dedicated bare metal — Linux VPS, game servers, web hosting. Live status at up.overnight.host.Geschrieben von der Person, die overnight.host betreibt: ein kleines, ehrliches Hosting-Unternehmen auf dedizierter Bare-Metal-Hardware — Linux-VPS, Gameserver, Webhosting. Live-Status unter up.overnight.host.
Valve did not split CS2 into a separate client and dedicated-server application the way some other Source-family games are structured. Both install from app 730; SteamCMD's +login anonymous is what lets you fetch it without owning the game on that account.Valve hat CS2 nicht in eine separate Client- und Dedicated-Server-Anwendung aufgeteilt, wie es bei manchen anderen Spielen der Source-Familie der Fall ist. Beide installieren aus App 730; SteamCMDs +login anonymous ist das, was dir erlaubt, sie zu holen, ohne das Spiel auf diesem Account zu besitzen.
Plan for well over 30 GB for the base install, and check df -h after your first update rather than trusting a fixed number — Valve updates change it over time, and Workshop maps add more on top. It is the main reason to start on a larger disk tier instead of the smallest one.Plane mit deutlich über 30 GB für die Basisinstallation und prüfe df -h nach deinem ersten Update, statt einer festen Zahl zu vertrauen — Valve-Updates verändern sie mit der Zeit, und Workshop-Maps kommen noch obendrauf. Das ist der Hauptgrund, mit einem größeren Speicher-Tarif zu starten statt mit dem kleinsten.
For anything public, yes. A Game Server Login Token for app 730, passed with sv_setsteamaccount, is what lets Steam verify your server. Run it without one and expect it to be treated as unverified rather than listed normally.Für alles Öffentliche: ja. Ein Game Server Login Token für App 730, übergeben mit sv_setsteamaccount, ist das, was Steam erlaubt, deinen Server zu verifizieren. Betreibst du ihn ohne, wird er als unverifiziert behandelt, statt normal gelistet zu werden.
Check the port first. 27015 needs to be forwarded as both UDP and TCP, and on a NAT IPv4 plan that depends on which ports are in your forwarded set. If it is not one of them, either confirm what is forwarded or ask for a dedicated IPv4.Prüfe zuerst den Port. 27015 muss sowohl als UDP als auch als TCP weitergeleitet sein, und bei einem NAT-IPv4-Tarif hängt das davon ab, welche Ports in deinem weitergeleiteten Satz sind. Ist er nicht dabei, bestätige entweder, was weitergeleitet ist, oder frag nach einer dedizierten IPv4.
Change the +game_type/+game_mode pair on the launch line — 0 1 for competitive, 0 0 for casual — and keep server.cfg's exec line pointed at the matching gamemode config (gamemode_competitive_server.cfg or its casual counterpart). The engine normally auto-execs the right one on its own; the line in server.cfg is just cheap insurance that it happens.Ändere das +game_type/+game_mode-Paar in der Startzeile — 0 1 für Competitive, 0 0 für Casual — und halte die exec-Zeile in server.cfg auf die passende Gamemode-Config gerichtet (gamemode_competitive_server.cfg oder ihr Casual-Gegenstück). Die Engine führt normalerweise von selbst die richtige automatisch aus; die Zeile in server.cfg ist nur eine billige Versicherung, dass es passiert.
Prices are final totals; no VAT is shown (§19 UStG). Need something the shop does not list? Email us for a written offer.Alle Preise sind Endpreise ohne ausgewiesene USt. (§19 UStG). Du brauchst etwas, das nicht im Shop steht? Schreib uns für ein schriftliches Angebot.
Order now →Jetzt bestellen → Request a custom configIndividuelle Konfiguration anfragen