Everything needed to host a dedicated game server on Windows 11, Windows 10, or Windows Server — SteamCMD, firewall rules, per-game launch commands, making it auto-start as a service, and opening your ports correctly. Written for first-timers but thorough enough for anyone moving a server off Linux. No other guide needed.
Most dedicated game servers perform 10-20% worse on Windows than on Linux and Windows chews through RAM on idle. Windows is the right choice if (a) you already know Windows and refuse to learn Linux, (b) the game only ships a Windows binary, or (c) you are hosting on your own home PC. If you are renting a VPS and want max performance per euro, use Linux instead.
01 // What you will need
- Windows version — Windows 10/11 (Home or Pro both work) or Windows Server 2019/2022/2026.
- Administrator rights — required to open firewall ports and install services.
- RAM — Windows idles around 2-3 GB. Add your game server requirement on top. For Rust that means 16 GB total minimum.
- Disk space — 20 GB free (SteamCMD + one modern game server). An SSD is strongly recommended; HDD causes noticeable tick-rate drops on Rust/ARK.
- Network — wired Ethernet preferred. Wi-Fi works but adds jitter and is the #1 cause of “my server feels laggy” complaints.
- A public IP or port-forwarding access — covered in section 08.
- A Steam account — only required for paid servers like ARK. Anonymous login works for Rust, CS2, TF2, Valheim.
Hostinger KVM 4 — 4 vCPU, 16 GB RAM, 200 GB NVMe
Hostinger offers a Windows Server template so you can install straight from the control panel. KVM 4 handles any single Windows game server comfortably and leaves headroom for the OS itself. €12.99/mo.
Get Hostinger KVM 4 →Nitrado — One-Click Game Servers
If you want to skip SteamCMD, firewall rules, and port forwarding entirely, Nitrado provisions a server in about 2 minutes with a web panel. No Windows or Linux knowledge required.
Get Nitrado →02 // Prepare your Windows machine
A few one-time tweaks that prevent 90% of the headaches people run into later.
Disable sleep and hibernation
A sleeping PC is not a server. Open an elevated PowerShell (right-click Start → Terminal (Admin)) and run:
powercfg /change standby-timeout-ac 0
powercfg /change hibernate-timeout-ac 0
powercfg /change monitor-timeout-ac 0
powercfg /hibernate off
This sets standby, hibernation, and monitor-off to “never” while on AC power.
Enable automatic login (home hosting only)
If the PC restarts after a power cut, you want it to boot back into Windows and your server without manual login. Run netplwiz, uncheck Users must enter a username and password, and confirm with your password. For Windows 11 you may need to enable the legacy setting first:
reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v DevicePasswordLessBuildVersion /t REG_DWORD /d 0 /f
Skip this step on a rented VPS — RDP needs manual login anyway.
Create a folder structure
Keep everything in one place so backups are simple. Open PowerShell (admin not required) and run:
mkdir C:\gameservers
mkdir C:\gameservers\steamcmd
mkdir C:\gameservers\servers
Disable Windows Defender real-time scanning on the server folder (optional)
Defender scanning every read/write to the save folder can drop Rust/ARK tick rate. Add an exclusion:
Add-MpPreference -ExclusionPath "C:\gameservers"
Only do this on a dedicated server machine, not your daily-driver PC.
03 // Install SteamCMD
SteamCMD is Valve's command-line version of Steam. It downloads dedicated server files for most games. Only one SteamCMD install is needed — it can manage every game server on the machine.
- Download the official Windows build: steamcmd.zip (direct link from Valve's CDN).
- Extract the ZIP into
C:\gameservers\steamcmd. You should seesteamcmd.exeinside. - Open PowerShell, cd into the folder, and run SteamCMD once to let it self-update:
cd C:\gameservers\steamcmd
.\steamcmd.exe
First run downloads several small updates and drops you at a Steam> prompt. Type quit to exit. SteamCMD is now installed.
Never extract SteamCMD into C:\Program Files — the UAC virtual-store redirection breaks auto-updates. Stick with C:\gameservers\steamcmd or another path outside Program Files.
04 // Install a game server
Pattern is the same for every Steam game: SteamCMD logs in (usually anonymously), sets an install directory, and runs app_update AppID validate. Only the AppID and launch command change per game.
Universal install command
From inside C:\gameservers\steamcmd, replace APPID and the install folder:
.\steamcmd.exe +force_install_dir C:\gameservers\servers\GAMENAME +login anonymous +app_update APPID validate +quit
Per-game AppIDs and launch commands
Rust — AppID 258550
Install:
.\steamcmd.exe +force_install_dir C:\gameservers\servers\rust +login anonymous +app_update 258550 validate +quit
Create a launch file C:\gameservers\servers\rust\start.bat:
@echo off
cd /d C:\gameservers\servers\rust
RustDedicated.exe -batchmode ^
+server.ip 0.0.0.0 +server.port 28015 ^
+server.queryport 28017 ^
+rcon.ip 0.0.0.0 +rcon.port 28016 ^
+rcon.password CHANGE_ME_LONG_PASSWORD ^
+server.maxplayers 50 ^
+server.hostname "My Rust Server" ^
+server.description "Hosted with HostingBuff guide" ^
+server.identity "server1" ^
+server.worldsize 3500 ^
+server.seed 12345 ^
+server.saveinterval 300
pause
The ^ is Windows batch line-continuation. Save and double-click to run.
Minecraft Java (no SteamCMD needed)
Download the server JAR directly from minecraft.net or use PaperMC (recommended — 5x better performance). You also need a Java 21 runtime: Adoptium Temurin 21. Place paper.jar into C:\gameservers\servers\minecraft and create start.bat:
@echo off
cd /d C:\gameservers\servers\minecraft
java -Xms4G -Xmx4G -XX:+UseG1GC -XX:+ParallelRefProcEnabled ^
-XX:MaxGCPauseMillis=200 -XX:+UnlockExperimentalVMOptions ^
-XX:+DisableExplicitGC -XX:+AlwaysPreTouch ^
-XX:G1NewSizePercent=30 -XX:G1MaxNewSizePercent=40 ^
-XX:G1HeapRegionSize=8M -XX:G1ReservePercent=20 ^
-XX:G1HeapWastePercent=5 -XX:G1MixedGCCountTarget=4 ^
-XX:InitiatingHeapOccupancyPercent=15 ^
-XX:G1MixedGCLiveThresholdPercent=90 ^
-jar paper.jar nogui
pause
First run creates eula.txt — open it, change eula=false to eula=true, then run again.
ARK Survival Evolved — AppID 376030
.\steamcmd.exe +force_install_dir C:\gameservers\servers\ark +login anonymous +app_update 376030 validate +quit
Launch:
@echo off
cd /d C:\gameservers\servers\ark\ShooterGame\Binaries\Win64
ShooterGameServer.exe TheIsland?listen?SessionName="MyARK"?MaxPlayers=30?ServerPassword=?ServerAdminPassword=CHANGE_ME?Port=7777?QueryPort=27015?RCONEnabled=True?RCONPort=32330 -server -log
pause
Counter-Strike 2 — AppID 730
.\steamcmd.exe +force_install_dir C:\gameservers\servers\cs2 +login anonymous +app_update 730 validate +quit
Launch:
@echo off
cd /d C:\gameservers\servers\cs2\game\bin\win64
cs2.exe -dedicated +map de_dust2 -maxplayers_override 16 +sv_lan 0 +game_type 0 +game_mode 1 -port 27015
pause
CS2 also needs a Game Server Login Token (GSLT) from steamcommunity.com/dev/managegameservers to be visible on the public server browser. Add +sv_setsteamaccount YOUR_GSLT to the launch line.
Team Fortress 2 — AppID 232250
.\steamcmd.exe +force_install_dir C:\gameservers\servers\tf2 +login anonymous +app_update 232250 validate +quit
Launch:
@echo off
cd /d C:\gameservers\servers\tf2
srcds.exe -console -game tf +map ctf_2fort +maxplayers 24 -port 27015
pause
Valheim — AppID 896660
.\steamcmd.exe +force_install_dir C:\gameservers\servers\valheim +login anonymous +app_update 896660 validate +quit
Launch:
@echo off
cd /d C:\gameservers\servers\valheim
valheim_server.exe -nographics -batchmode -name "MyValheim" -port 2456 -world "Dedicated" -password "secret12" -public 1
pause
Every dedicated server on Steam has an AppID listed at steamdb.info/tag/1677 (the “Dedicated Server” tag). Copy the number and drop it into the SteamCMD command above — that's the whole pattern.
05 // Open Windows Firewall ports
Windows blocks incoming connections by default. Every game needs its ports explicitly allowed. Run these from an elevated PowerShell — replace the port numbers with your game's values (see the port reference on the Tools page for all games).
Rust example (TCP + UDP)
New-NetFirewallRule -DisplayName "Rust Game UDP" -Direction Inbound -LocalPort 28015 -Protocol UDP -Action Allow
New-NetFirewallRule -DisplayName "Rust Query UDP" -Direction Inbound -LocalPort 28017 -Protocol UDP -Action Allow
New-NetFirewallRule -DisplayName "Rust RCON TCP" -Direction Inbound -LocalPort 28016 -Protocol TCP -Action Allow
Minecraft Java
New-NetFirewallRule -DisplayName "Minecraft Java TCP" -Direction Inbound -LocalPort 25565 -Protocol TCP -Action Allow
ARK Survival Evolved
New-NetFirewallRule -DisplayName "ARK Game UDP" -Direction Inbound -LocalPort 7777 -Protocol UDP -Action Allow
New-NetFirewallRule -DisplayName "ARK Query UDP" -Direction Inbound -LocalPort 27015 -Protocol UDP -Action Allow
New-NetFirewallRule -DisplayName "ARK RCON TCP" -Direction Inbound -LocalPort 32330 -Protocol TCP -Action Allow
CS2 / TF2 (Source engine)
New-NetFirewallRule -DisplayName "Source Server UDP" -Direction Inbound -LocalPort 27015 -Protocol UDP -Action Allow
New-NetFirewallRule -DisplayName "Source Server TCP" -Direction Inbound -LocalPort 27015 -Protocol TCP -Action Allow
Valheim
New-NetFirewallRule -DisplayName "Valheim UDP" -Direction Inbound -LocalPort 2456-2458 -Protocol UDP -Action Allow
Verify a rule was created:
Get-NetFirewallRule -DisplayName "Rust*" | Format-Table DisplayName, Enabled, Direction, Action
Windows applies rules per network profile (Public / Private / Domain). If your Ethernet is classed as Public, only Public rules apply. Check with Get-NetConnectionProfile and either switch the profile to Private or re-create rules with -Profile Any.
06 // Run the server as a Windows service (auto-start + auto-restart)
A batch file works but closes if you log out, and does not restart after a crash. The cleanest solution is NSSM — the Non-Sucking Service Manager. It wraps any .exe or .bat into a proper Windows service.
- Download NSSM from nssm.cc/download. Extract and copy
nssm.exe(from thewin64folder) intoC:\Windows\System32so it is always on PATH. - Install your server as a service. From an elevated PowerShell:
nssm install RustServer
A GUI opens. Fill in:
- Path:
C:\gameservers\servers\rust\RustDedicated.exe - Startup directory:
C:\gameservers\servers\rust - Arguments: paste the full arg list from your
start.bat(everything after the exe name) - Details tab: display name “Rust Dedicated Server”, startup type “Automatic”
- I/O tab: set
Output (stdout)andError (stderr)to e.g.C:\gameservers\servers\rust\console.logso you can read crash reasons later - Exit actions tab: leave “Restart application” — this is why NSSM exists. Crash? It restarts.
Click Install service. Then start it:
nssm start RustServer
The service now survives logouts, reboots, and crashes. Manage it with:
nssm stop RustServer
nssm restart RustServer
nssm remove RustServer confirm
07 // Find your server IP
Two IPs matter:
- LAN IP — for friends on the same network. Find with
ipconfig(IPv4 Address under your active adapter). Usually starts with192.168.or10.. - Public IP — what people on the internet connect to. Get it from icanhazip.com or run
curl icanhazip.comin PowerShell.
Most residential ISPs rotate your public IP every few days. Friends will need a new address each time. Fix this with free Dynamic DNS — sign up at DuckDNS or No-IP, install their updater client on the Windows host, and share yourname.duckdns.org instead of the raw IP.
08 // Port forwarding (home hosting only)
Skip this section if you are hosting on a rented VPS — VPS providers give you a public IP directly and the VPS firewall is the only barrier.
If hosting from home, your router blocks all incoming connections by default. You need to tell the router “any packet arriving on port 28015 should be forwarded to the Windows PC at 192.168.x.x”. General process for any router:
- Log into your router admin page (usually
http://192.168.0.1orhttp://192.168.1.1). - Find a section called Port Forwarding, Virtual Server, or NAT.
- Create a new rule for each port:
- External port: e.g. 28015
- Internal port: 28015 (same)
- Protocol: UDP (or TCP, check the port table)
- Internal IP: your Windows PC's LAN IP from section 07
- Save. Some routers reboot. Some do not.
Verify from outside your network (a phone on mobile data works great): https://portchecker.co/ and try the port + public IP.
Many ISPs (especially mobile providers and budget fiber) put customers behind Carrier-Grade NAT. Your router has a private IP like 100.64.x.x on its WAN side and no amount of port forwarding will ever work. Quick test: the IP shown in your router's WAN page should match icanhazip.com. If they differ, you are on CGNAT. Solutions: call your ISP and ask for a public IPv4 (sometimes free, sometimes €3-5/mo), use an outbound tunnel like playit.gg or Cloudflare Tunnel, or rent a VPS and stop fighting your ISP.
09 // Connect and verify
Three ways to test your server is reachable:
- From the same PC: connect to
127.0.0.1:PORTin the game client. This only confirms the server is running, not that it is reachable from outside. - From another device on your LAN: connect to the Windows host's LAN IP. Proves the Windows firewall is open.
- From outside your network: use your phone on mobile data, or ask a friend to try
PUBLIC_IP:PORT. Proves port forwarding works.
10 // Common problems and fixes
| Symptom | Cause | Fix |
|---|---|---|
| Server starts, nobody can join from outside | Router port forwarding missing or CGNAT | Recheck router rule, test with portchecker.co, verify not behind CGNAT |
| “Unable to connect” from LAN too | Windows Firewall rule not applied to current profile | Get-NetConnectionProfile then recreate rule with -Profile Any |
| SteamCMD fails with “No subscription” | Game requires login, not anonymous | Use +login YOUR_STEAM_USER and respond to Steam Guard email |
| Server crashes after ~30 minutes | Windows Defender scanning save files | Add-MpPreference -ExclusionPath "C:\gameservers" |
| Rust/ARK tick rate drops at ~20 players | Running on HDD or Wi-Fi | Move server folder to SSD, switch to wired Ethernet |
| Service stops immediately | Bad arguments or missing dependency | Read console.log you configured in NSSM I/O tab |
| “VCRUNTIME140.dll not found” | Missing Visual C++ Redistributable | Install latest VC++ redistributables from Microsoft |
| Server uses 100% CPU on one core | Single-threaded game engine (normal for Rust/ARK) | Expected — increase clock speed, not core count |
11 // Next steps
- Hosting on your own PC? — read Host a Game Server on Your Own PC for home-network gotchas.
- Going Linux later? — Rust on Ubuntu 22.04 runs 15-20% faster on the same hardware.
- Want a web panel instead of batch files? — Pterodactyl or WindowsGSM.