The Killing Floor 2 dedicated server is a free SteamCMD download (app id 232130), it runs on Linux and Windows, it holds six players in Survival, and it is comfortable in 3 to 4 GB of memory on one fast core. Two things catch nearly everybody on the first attempt. The server writes its own configuration files on the first start and overwrites anything you put there beforehand, so the order is install, start, stop, edit. And most of what people want to change - the map, the mode, the difficulty, the wave count - is not in a config file at all; it is in the launch line, in a URL-shaped string appended to the map name. Get those two right and the rest of this is detail.
What the dedicated server gives you#
Killing Floor 2 is a wave-based co-op shooter, and the server is a stripped copy of the game with no renderer. It loads one map, runs one game mode, and restarts the map when the game ends. There is no lobby, no mode voting beyond the map vote, and no way to change mode without restarting the process with a different launch line.
The modes, and the class name each one needs:
| Mode | Game class | Players |
|---|---|---|
| Survival | KFGameContent.KFGameInfo_Survival | 6 |
| Weekly Outbreak | KFGameContent.KFGameInfo_WeeklySurvival | 6 |
| Endless | KFGameContent.KFGameInfo_Endless | 6 |
| Objective | KFGameContent.KFGameInfo_Objective | 6 |
| Versus Survival | KFGameContent.KFGameInfo_VersusSurvival | 12 |
Six is the number the game is balanced around. Versus takes twelve because half of them are playing Zeds. Raising the cap is possible and people do it, but it is not one setting: the limit is enforced by the game mode class, so the per-mode MaxPlayers has to change, the web admin panel resets it on every map change, and in practice servers use a dedicated max-players mutator instead. Even then the scoreboard only draws six rows without a custom HUD. Wave composition, the dosh economy and boss health were all written for six, so a larger server is an easier, noisier game rather than a bigger one.
Administration is not what you expect if you arrive from a Source game. There is no rcon_password, no rcon console command and no Source RCON port. Remote administration is a small web server built into the game server, switched off by default, plus the ini files. That web panel is covered below, and it is the single most useful thing you can turn on.
Requirements and resource usage#
The server is light on memory and moderately heavy on one core. Zed pathfinding and physics are what cost you, so a late wave on a large map with a full lobby is the peak, not the boss fight.
| Setup | RAM | CPU | Notes |
|---|---|---|---|
| 6 players, stock maps, Survival | 1-2 GB | 1 core | Often well under 1 GB at idle |
| 6 players, several workshop maps | 2-3 GB | 1-1.5 cores | Map loads are the spikes |
| 12 players, Versus | 2-3 GB | 1.5 cores | More actors, not much more memory |
| Endless, long sessions | 3 GB | 1.5-2 cores | Memory creeps across a long run |
Those numbers are deliberately lower than most hosting pages will tell you. A single six-player Killing Floor 2 instance has been measured at a few hundred megabytes of resident memory and a couple of percent of a modern core. The honest advice is that memory is not what you are buying here, and paying for 8 GB because a comparison table said so is money wasted.
- CPU: the game simulation is effectively one thread, which is why the server accepts
-PREFERREDPROCESSOR=to pin itself. Clock speed decides whether wave 9 on Hell on Earth holds its tick rate; core count does almost nothing. CPU vs RAM for game servers is the general version of that argument. - Disk: this is the real constraint. The install is large for a game of this era - budget 30 GB, and more if you plan to cache a big workshop collection, because every subscribed item is unpacked into the server's cache and stays there.
- Network: a full six-player game is undemanding, in the order of 100-200 KB/s per player. The thing that actually hurts new joiners is workshop downloads, which come from Steam rather than from you.
Memory climbing over a long Endless run is normal rather than a leak you can fix. A daily restart at an hour nobody plays keeps it flat, which is the argument in restart schedules that help.
Installing and the first start#
The server is anonymous on SteamCMD, so no account is needed:
$ steamcmd +force_install_dir /home/kf2/server +login anonymous \ +app_update 232130 validate +quitIf SteamCMD itself is new to you, SteamCMD explained covers app ids, validate and update scripts. The binary is where the confusion starts. On Linux it is:
Binaries/Win64/KFGameSteamServer.bin.x86_64That is not a typo. The native Linux server lives in a folder called Win64, because the build system never renamed it. On Windows the neighbour is KFServer.exe.
Now the part that matters: start it once and stop it before you edit anything. The first run writes a full set of configuration files into KFGame/Config/, and if a file is already there in a shape the server does not like, it is replaced. Start it, wait for the map to load, stop it cleanly, then edit.
$ cd /home/kf2/server/Binaries/Win64$ ./KFGameSteamServer.bin.x86_64 \ KF-BioticsLab?Game=KFGameContent.KFGameInfo_Survival?Difficulty=2?GameLength=1 \ -Port=7777 -QueryPort=27015The launch line: map, mode, difficulty and length#
Everything after the map name is a URL parameter, separated by ?, and it wins over the equivalent ini value. The three that matter:
| Parameter | Values |
|---|---|
Game | The mode class from the table above |
Difficulty | 0 Normal, 1 Hard, 2 Suicidal, 3 Hell on Earth |
GameLength | 0 Short (4 waves), 1 Medium (7 waves), 2 Long (10 waves) |
Stock map names all begin with KF-: KF-BioticsLab, KF-Outpost, KF-BurningParis, KF-Farmhouse, KF-VolterManor and so on. The map you name on the command line is the one the server boots into; where it goes next is decided by the map cycle in the ini.
You can also pass ?MaxPlayers=6 and ?Mutator=Package.ClassName here, with mutators comma-separated if you run more than one. On a panel-based host you do not type this line at all - the same values appear as fields on the Startup tab, and on RE:NODE that is where the map, mode, difficulty and length live. Changing one and restarting is the whole operation.
The config files and the settings worth changing#
KFGame/Config/ holds a file per subsystem, prefixed with the platform. On Windows the names start PCServer-; on Linux they start LinuxServer-. The three you will touch:
| File | Holds |
|---|---|
PCServer-KFGame.ini | Server name, passwords, map cycle, MOTD, voting, gameplay switches |
PCServer-KFEngine.ini | Workshop subscriptions, download managers, networking |
KFWeb.ini | The web admin panel |
KFWebAdmin.ini | Multiple web admin accounts, if you want them |
-ConfigSubDir=<name> gives an instance its own folder under KFGame/Config, which is how you run several servers from one install without them fighting over the same files.
The keys in PCServer-KFGame.ini that earn their place:
[Engine.GameReplicationInfo]ServerName=Frankfurt Hell on EarthShortName=HoE[Engine.AccessControl]AdminPassword=a-long-random-stringGamePassword=[Engine.GameInfo]MaxPlayers=12MaxSpectators=2GameDifficulty=1.000000MaxIdleTime=0.000000bKickLiveIdlers=False[KFGame.KFGameInfo]GameMapCycles=(Maps=("KF-BurningParis","KF-BioticsLab","KF-Outpost"))ServerMOTD=Welcome. \n \n Have fun and good luck!bDisableTeamCollision=FalsebDisableKickVote=FalseKickVotePercentage=0.660000bDisableMapVote=FalseMapVoteDuration=60.000000bDisablePublicTextChat=False[KFGameContent.KFGameInfo_Survival]MaxPlayers=6Taking those in turn:
ServerNameis what the browser shows. Keep it short and put the difficulty in it - people filter by reading, not by using the filter.AdminPasswordis the one credential the server has. It logs you into the web panel and grants admin in game.GamePasswordleft empty means a public server; set it and the server becomes private and generally drops off the browser.- Player count is set twice.
[Engine.GameInfo] MaxPlayersis the engine ceiling and ships at 12. The number that actually applies is the per-mode one in[KFGameContent.KFGameInfo_Survival], which ships at 6. Raising the first without the second does nothing at all, which is why so many people conclude the setting is broken. GameMapCyclesis a list of lists and most servers need exactly one. Every map named in it must exist on the server, including workshop maps, or the cycle stalls on the missing entry. There is a documented ceiling of 519 maps in rotation, past which the server misbehaves.ServerMOTD,BannerLinkandWebsiteLinkall live in[KFGame.KFGameInfo]rather than in a section of their own.\nis the line break. Note that saving settings from the web admin panel has a habit of blankingWebsiteLink.- Idle kicking is
MaxIdleTimeplusbKickLiveIdlersin[Engine.GameInfo], and0means never. - Wave count is not a key. It comes from
GameLength, which is set on the launch line.
The general rule for Killing Floor 2: Tripwire has changed the shipped ini between seasons more than once. The file the server wrote for you is the authoritative list of keys for the version you are running; a guide is a list of the ones worth thinking about.
Web admin#
The web admin panel is a small HTTP server inside the game server. It gives you a live player list with kick and ban, the current map and mode with the ability to change both without a restart, a chat window, a console, and editors for most of the settings above. It is off until you switch it on:
[IpDrv.WebServer]Applications[0]=WebAdmin.KF2ServerAdminApplicationPaths[0]=/ServerAdminListenPort=8080MaxConnections=18bEnabled=trueRestart, then open http://your-server-address:8080/ServerAdmin and log in with the user name Admin and the password from AdminPassword. If that password is blank you cannot log in at all, and the panel will not tell you why. If you want more than one account, KFWebAdmin.ini switches the authentication class to the multi-admin one and generates a MultiAdmin.ini to hold them.
Two practical notes. Changing the map or mode from the panel takes effect immediately and kicks nobody, which makes it much nicer than restarting. And any setting you change in the panel is written to the ini files, so the panel and the files are two views of the same thing rather than two competing sources of truth.
Ports and how players find you#
| Port | Protocol | Purpose |
|---|---|---|
7777 | UDP | Game traffic |
27015 | UDP | Steam query - the server browser talks to this |
20560 | UDP | Steam |
8080 | TCP | Web admin, only if you enabled it |
The game port and query port are set with -Port= and -QueryPort=, and there is a behaviour worth knowing: changing -Port= shifts the query port by the same amount automatically unless you also pass -QueryPort=. That is convenient when you run several instances and surprising when you do not. All three UDP ports need to be reachable; a server that runs perfectly but never appears in the browser has a blocked or wrong query port almost every time. One more, outbound: a Weekly Outbreak server looks up the time over NTP on UDP 123 to work out which weekly is current. Game server ports explained goes through why the query port exists and what breaks when only one of the pair is open.
Players find you three ways: the in-game browser, which is slow and heavily filtered; a favourite added by address; or the console. Killing Floor 2 keeps the Unreal console, so a player can press the console key and type:
open 203.0.113.10:7777That is the reliable test when the browser is being unhelpful. If open works and the browser does not list you, the server is fine and the query port is not.
On RE:NODE the game and query ports are allocated with the server and the admin password is generated for you at install. Web admin needs a port of its own, which you add on the Network tab.
Workshop maps, mutators and custom content#
Killing Floor 2 pulls workshop content by id, not by subscription. You list the ids in the engine config:
[OnlineSubsystemSteamworks.KFWorkshopSteamworks]ServerSubscribedWorkshopItems=1234567890ServerSubscribedWorkshopItems=1234567891[IpDrv.TcpNetDriver]DownloadManagers=OnlineSubsystemSteamworks.SteamWorkshopDownloadOne line per item, repeated, not a comma-separated list. The DownloadManagers line is the one people leave out, and it has to be the first entry in the existing list under [IpDrv.TcpNetDriver] - without it the server has the map and joining clients do not, which looks like a broken server rather than a missing line.
On the next start the server downloads each item into KFGame/Cache/<id>/0/BrewedPC, and the real map name is the .kfm file in there with its extension removed. Watch the console on that first start, because a bad id fails quietly. On Linux there is a long-standing bug where the server does not create the cache folder, so mkdir -p KFGame/Cache before you start.
A downloaded map is not yet a playable map. Killing Floor 2 wants a summary block for it, in PCServer-KFGame.ini, before it will show in the cycle and the vote list:
[KF-MyCustomMap KFMapSummary]MapName=KF-MyCustomMapScreenshotPathName=UI_MapPreview_TEX.UI_MapPreview_PlaceholderThe section name is the map file name followed by a space and KFMapSummary, which is unusual enough that it is worth copying exactly. Then add the map to GameMapCycles. Players joining are pointed at the same workshop items and Steam fetches them client-side, which is why the first join to a heavily modded server is slow and why a map the client fails to download shows up as a player stuck on the loading screen.
Mutators are passed on the launch line, as ?Mutator=Package.ClassName, with several separated by commas inside one ?Mutator= rather than repeated. They can be delivered through the workshop in the same way maps are.
Here is the part that changes what kind of server you are running. Tripwire operates a whitelist, and a server running any modification that is not on it is marked Unranked: players on it earn no perk XP while they play. Vanilla and whitelisted content leave the server Ranked. That is not a bug or a host setting, it is the publisher's policy, and it is the first thing to tell people before they spend an evening levelling on your server. Well-known mods advertise their own status, and some popular ones have simply never been whitelisted.
The broader mechanics of workshop content on a server - collections, update timing, what happens when an author republishes - are in Steam Workshop mods on dedicated servers. The advice there that matters most here: an author updating a map mid-season will break your cycle without telling you, so check the console after an update rather than finding out from a player.
Updates, restarts and backups#
Killing Floor 2 clients and servers must match exactly. After every patch - and Tripwire ships seasonal content updates - the server has to run app_update before anyone can join, and a player on the new build hitting an old server gets a version error with no useful detail.
What is worth backing up is small and easy to lose:
KFGame/Config/- every setting you have made, including the workshop list and the map summaries.- Anything you have hand-placed in
KFGame/, such as maps you host yourself rather than from the workshop.
There is no world file here. A Killing Floor 2 server has no persistent state to protect beyond its configuration, because perk progression lives on each player's Steam profile, not on your server. That makes backups cheap and restores fast - keep a copy of the config folder before every patch and before every round of edits. Backups that actually restore is about the half of this people skip, which is proving the copy is good.
On RE:NODE the Killing Floor 2 plans carry backup slots, restoring is one button, and the Schedules tab will run a nightly backup and a daily restart with a warning command in front of it. If the server reaches its memory limit the container is stopped and restarted clean instead of swapping, which on a stateless game server costs you a wave and nothing else.
Troubleshooting#
My ini edits keep disappearing. You edited while the server was running, or you edited before the first start. Stop the server, edit, start.
The server does not appear in the browser. Check the query port is open on UDP and matches -QueryPort=. Test with open ip:7777 from the game console: if that connects, the game port is fine and the problem is only the query side.
Web admin refuses the connection. bEnabled=true in PCServer-KFWeb.ini, the server restarted since you set it, and the web admin port open on TCP. Note that this port is TCP while everything else is UDP, which catches people copying firewall rules.
Web admin loads but rejects my password. AdminPassword is empty or has a trailing space. The panel gives the same error either way.
A workshop map never downloads. The id is wrong, or it is a collection id rather than an item id. Collections are not accepted - list each item.
A workshop map downloads but is not in the vote list. The KFMapSummary block is missing or the section name does not match the map file exactly. Keep the capitalisation identical across the cycle, the summary block and the file itself.
The server has the workshop map, clients do not. The DownloadManagers line is missing from [IpDrv.TcpNetDriver], or it is not the first entry in that list.
The log repeats "Attempting server re-register now" and waits for a Steam Server UID. A Steam game is running on the same machine, the install was never validated, or the bundled UE3Redist prerequisites were not installed.
My start script keeps getting reset. validate in the SteamCMD update line overwrites the shipped start script every time it runs. Keep your own copy under a different name.
Players get a version mismatch. Run app_update on the server. If it is a modded server, the mods need updating too before people can play - the general playbook is in what to do when a mod update breaks.
The server plays one map forever. GameMapCycles is empty, contains only that map, or names a map that does not exist and the cycle cannot advance past it.
FAQ#
How many players can a Killing Floor 2 server hold?
Six in Survival, Endless, Objective and Weekly, twelve in Versus Survival. The six-player cap is a balance decision rather than a hardware one. You can raise MaxPlayers, but wave size, dosh and boss health do not scale with it, so the game gets easier and noisier rather than bigger.
Does Killing Floor 2 have RCON?
No. There is no Source-style RCON port or password. Remote administration is the built-in web admin panel over HTTP, plus whatever console access your host gives you. That is why the admin password deserves the same care you would give an RCON password.
How much RAM does a Killing Floor 2 server need?
Less than most people are sold. A six-player Survival instance on stock maps has been measured at a few hundred megabytes; 2 to 3 GB covers it comfortably with workshop content and a long Endless run. Disk is the real requirement - the install alone wants tens of gigabytes. Buy clock speed and storage, not memory.
Where do I change the difficulty?
On the launch line, as ?Difficulty= with a value from 0 to 3, or live from the web admin panel. The ini value is overridden by the launch line, which is why editing the file and restarting sometimes appears to do nothing.
Do players earn perk XP on my server?
On a vanilla or whitelisted server, yes, and the progression is stored against their Steam account rather than on your server, so nothing you do can lose it. Run a modification that is not on Tripwire's whitelist and the server becomes Unranked: people can still play, but they gain no XP while they do. Say so in the server name if that is your situation.
Can I run custom maps without the Steam Workshop?
Yes - drop the .kfm file into the server's map folder and give it a KFMapSummary block and a place in the cycle. The catch is that players then have no way to download it, so everyone joining needs the file already. Workshop distribution exists to solve exactly that.




კომენტარები
სრულიად ანონიმურად: ანგარიშის, ელფოსტის და cookie-ის გარეშე. ინახება მხოლოდ სახელი, ტექსტი და დრო - სხვა არაფერი. ბმულების რაოდენობა ლიმიტირებულია.