Game servers by the hour. Pay only when you play.

How to host a CS:GO server your friends can join over the internet

Hosting a legacy CS:GO server that your friends can actually join over the internet is harder than it looks. Valve froze CS:GO when CS2 launched, then turned off official matchmaking and the in-game server browser. A server you spin up the normal way boots fine but every friend who tries to connect just sees "connect failed after 30 retries". This guide explains why, and the exact setup that works. Every step here was tested on a real public server.

Why direct connect fails

Two things block a legacy CS:GO server on the internet:

  • No GSLT. A public CS:GO server needs a Game Server Login Token. Without one, the console says "No Steam account token was specified. Connections will be restricted to LAN only."
  • The lobby reservation gate. Even with a token, CS:GO puts direct connects through its matchmaking reservation system. Valve turned that off for the frozen build, so the server creates a reservation that never completes. That is the "30 retries" you see.

What you need

  • A box with a real public IP (a VPS, not a home PC behind a router).
  • The CS:GO dedicated server files (steamcmd app 740).
  • A GSLT for the app your players use: 4465480 for the free standalone CS:GO app, 730 for the CS2 csgo_legacy branch. Create it at steamcommunity.com/dev/managegameservers.
  • MetaMod:Source, SourceMod, and the NoLobbyReservation plugin.

The working setup

  1. Install with steamcmd: +login anonymous +app_update 740 validate
  2. Remove the bundled bin/libgcc_s.so.1. The frozen build ships an old copy that breaks on modern Linux (the server crash-loops loading libtier0.so). Deleting it lets the system library load instead.
  3. Install MetaMod:Source and SourceMod into the csgo/ mod folder, then add NoLobbyReservation. NoLobbyReservation is what drops the reservation gate, without it clients cannot connect at all. It is the single most important piece.
  4. Set the app id to the client your players use, in two files: csgo/steam.inf (the appID= line, keep its Windows line endings) and steam_appid.txt next to srcds_run. Use 4465480 for the standalone app or 730 for the CS2 csgo_legacy branch. steamcmd validate puts steam.inf back to 730, so set it again before every start.
  5. Put your GSLT in server.cfg: sv_setsteamaccount YOUR_TOKEN
  6. Launch on the real port: -port 27015 +sv_lan 0. If the box has more than one network interface, also add -ip with your public address so the server listens on the right one.
  7. Friends connect from the in-game console: connect YOUR_IP:27015

Common traps

  • "STEAM validation rejected" means the client and the server app id do not match. One server accepts one client: 4465480 for the standalone app, 730 for the CS2 csgo_legacy branch. Check both app id files and that the GSLT was made for the same app.
  • A prebuilt NoLobbyReservation .smx from a random repo often will not load (it is compiled for a different SourceMod build). Compile it fresh against your SourceMod.
  • Testing from the same home network as the server will fail even when the setup is right, because the connection hairpins off your router. Test from a real outside connection.

Or skip all of it

This is a lot of moving parts to keep working on a game Valve no longer updates. On 2hours.gg a CS:GO server comes with the token, the plugins and the config already baked in. You deploy, pick a map, and your friends connect to the IP. No plugins to compile, no token to manage. Deploy a CS:GO server.

← Back to all guides