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 app 730, from steamcommunity.com/dev/managegameservers.
- MetaMod:Source, SourceMod, and the NoLobbyReservation plugin.
The working setup
- Install with steamcmd:
+login anonymous +app_update 740 validate - 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.
- 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.
- Put your GSLT in server.cfg:
sv_setsteamaccount YOUR_TOKEN - Launch bound to all interfaces on the real port:
-ip 0.0.0.0 -port 27015 +sv_lan 0. Without -ip 0.0.0.0 the server can bind localhost and nobody reaches it. - Friends connect from the in-game console:
connect YOUR_IP:27015
Common traps
- "STEAM validation rejected" means your client version and the server app id do not match. If you play the 2026 standalone re-release, that is a separate app; keep the server on 730 and use the CS2 csgo_legacy beta-branch client.
- 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.