Выделенный сервер KF2: полное руководство по портам, WebAdmin, картам и мутаторам
Статья - переработка очень большого бразильско-португальского руководства по хостингу выделенных серверов Killing Floor 2, частично основанного на более раннем английском руководстве zachjd (использовано с разрешением, автор указывает его заслуги). Здесь установка, проброс портов, несколько серверов, WebAdmin, несколько админов, пользовательские карты из Workshop или redirect, мутаторы и типы игры, настройки и множество советов. Основной путь - Windows. Другие материалы: выделенный сервер через SteamCMD, секреты и исправления сервера и проблема Workshop 2025.
Перед началом
- Сервер кроссплатформенный: созданный вами сервер обслуживает и игроков Steam, и Epic.
- В оригинале есть часть об основах сетей (как работает интернет, TCP и UDP, HTTP и HTTPS, IPv4 и IPv6, двойной NAT, брандмауэр). Её можно не читать, но она полезна. Серверы KF2 сейчас не поддерживают IPv6. Документировать каждое изменение сети (порт, протокол, дата) - хорошая практика.
- Если у вас два маршрутизатора, пробросьте порты на обоих или переведите роутер провайдера в режим моста, чтобы избежать двойного NAT.
- Автор оценивает сложность по трудоёмкости настройки: ванильный сервер проще всего, пользовательские карты чуть сложнее, несколько серверов с картами ещё сложнее, а глубокая настройка (админы, мутаторы, экран приветствия) - сложнее всего.
- Совет: включите показ расширений файлов в Проводнике Windows (Вид, Расширения имён файлов), чтобы знать, какой файл вы правите.
Какие порты открыть
| Порт | Номер | Протокол | Назначение |
|---|---|---|---|
| Игровой | 7777 | UDP | Основной порт игровых подключений |
| Query | 27015 | UDP | Связь с главным сервером Valve |
| WebAdmin | 8080 | TCP | Веб-администрирование |
| Steam | 20560 | UDP | Порт Steam |
| NTP | 123 | UDP | Только режим Weekly: проверка режима недели |
Откройте их в брандмауэре Windows (входящее правило, конкретные локальные порты, разрешить, профили домена и частный) и в роутере; при включённой DMZ и выключенном брандмауэре это не нужно, но так оставлять рискованно. У хоста должен быть статический IPv4. Проверяйте порты сервисом вроде canyouseeme.org.
Диагностика: неверно проброшенный игровой порт может скрыть сервер и во вкладке LAN, и в общем браузере; неверный query-порт может скрыть его в общем браузере, но показывать во вкладке LAN; неверный порт WebAdmin означает, что WebAdmin недоступен (или вы забыли включить KFWeb.ini). Другие способы: проверьте опечатки и перезагрузите роутер; попробуйте другой игровой порт, например 7780; временно включите DMZ для проверки (потом уберите); спросите у провайдера, не блокирует ли он порты; проверьте антивирус или брандмауэр, блокирующий сервер (функция AVG полностью блокировала серверы автора); снимите флажок «Без пользовательских серверов» в браузере серверов игры, если используете мутаторы; перезагрузите роутер; запускайте сервер до игры, если хостите на своём ПК; строгий или недоступный тип NAT ограничивает хостинг.
Установка сервера
- Скачайте SteamCMD и распакуйте в папку вроде
C:\SteamCMD. Запустите, дайте обновиться и запустите снова. - С конца 2021 порядок важен: сначала
force_install_dir c:\KF2Server\, затемlogin anonymous, затемapp_update 232130 validate. ДождитесьSuccess! App '232130' fully installed.и введитеquit. - Пользователям Linux следует использовать инструкции SteamCMD и вики KF2 для Linux; понадобится эмуляция
.bat. - Запустите сервер один раз, чтобы он создал файлы конфигурации, и закройте.
Настройка в C:\KF2Server\KFGame\Config:
Папка Config сервера; видна и подпапка Serverhell83 из примера с несколькими серверами.
KFWeb.ini: поставьтеbEnabled=true(по умолчанию false), чтобы использовать WebAdmin.PCServer-KFGame.ini: задайтеServerName=.
Измените ServerName.
Проверьте порты: в PCServer-KFEngine.ini должно быть Port=7777, в KFWeb.ini ListenPort=8080 (оба по умолчанию). Можно также добавить ключи в .bat: -Port=7777 -QueryPort=27015 -WebAdminPort=8080, они имеют приоритет над конфигами.
KFWeb.ini хранит порт WebAdmin и переключатель включения.
Обновление
Сделайте ярлык SteamCMD.exe и добавьте в его поле «Объект» +login anonymous +force_install_dir ./KF2Server +app_update 232130 +exit (при необходимости абсолютный путь). Запускайте при каждом обновлении, он закроется сам. Для беты app_update 232130 -beta preview, а validate проверяет файлы. Команды отката нет, поэтому перед бетой делайте резервную копию.
Несколько серверов
Несколько серверов можно запускать из одной установки: конфиги разделяются ключом -ConfigSubDir=. Для второго сервера добавьте -ConfigSubDir=Serverhell83 в его .bat, запустите один раз, чтобы создалась KFGame\Config\Serverhell83, затем в этой папке в PCServer-KFEngine.ini измените Port=7777 на Port=7778, а в KFWeb.ini ListenPort=8080 на 8081, и пробросьте новые порты (игровые 7777-7778 UDP, query 27010-27019 UDP, WebAdmin 8080-8081 TCP, Steam 20560 UDP). Основному серверу ключ не нужен. Чтобы различать серверы, называйте папку и .bat по порту WebAdmin (совет -InSane-Lon). Инструменты: netstat -o -n -a и столбец PID в Диспетчере задач покажут, кто занимает порт (KFServer.exe должен держать 7777 UDP и 8080 TCP), а taskkill -f -t /im KFServer.exe остановит его.
Запуск с выбранным режимом
Измените в .bat часть ?Game=. Каждый параметр начинается с ?:
.bat, запускающий Endless на Hell on Earth со средней длиной.
| Режим | Команда |
|---|---|
| Survival | ?Game=KFGameContent.KFGameInfo_Survival |
| Weekly | ?Game=KFGameContent.KFGameInfo_WeeklySurvival |
| Versus | ?Game=KFGameContent.KFGameInfo_VersusSurvival |
| Endless | ?Game=KFGameContent.KFGameInfo_Endless |
| Objective | ?Game=KFGameContent.KFGameInfo_Objective |
Сложность - ?Difficulty= (0 Normal, 1 Hard, 2 Suicidal, 3 Hell on Earth), длина - ?GameLength= (0 короткая 4 волны, 1 средняя 7, 2 длинная 10). Другие URL-аргументы: AdminName=, AdminPassword=, MaxPlayers=, Port=, QueryPort=, WebAdminPort= (бета), Multihome= (привязка к конкретному IP), PREFERREDPROCESSOR= (привязка к ядру) и ConfigSubDir=.
Ключевые файлы: PCServer-KFGame.ini содержит AdminPassword, GamePassword ([Engine.AccessControl]), ServerName и AdminContact ([Engine.GameReplicationInfo]), bUseMapList=True и GameMapCycles=(Maps=("KF-BurningParis","KF-Bioticslab",...)). В PCServer-KFEngine.ini порты и NetServerMaxTickRate (по умолчанию 30).
Чтобы подключиться напрямую, откройте консоль (клавиша под Esc) и введите open <IPv4>:7777; IP узнаётся командой ipconfig.
WebAdmin
Откройте http://<IPv4>:8080. Пропишите AdminPassword= в PCServer-KFGame.ini и ?AdminName= в .bat. В игре используйте adminlogin <пароль> из консоли.
- Смена карты: Change Map, выберите тип игры и карту, мутаторы и опции впишите в ADDITIONAL URL VARIABLES, например
?Mutator=ClassicScoreboard.ClassicSCMut,DamageDisplay.DmgMut,KFMutator.KFMutator_MaxPlayersV2?MaxPlayers=12?MaxMonsters=32?Difficulty=3?GameLength=1.
Мутаторы и сложность в поле ADDITIONAL URL VARIABLES.
- Экран приветствия: баннер должен быть .PNG (по сообщениям, глубина цвета должна быть более 8 бит; безопасный размер 720x361, хостится на сайте вроде Imgur и подключается прямой ссылкой). Есть также ссылка на сайт, девиз клана и сообщение дня (
\nдля новых строк, HTML-теги вроде<font color="#B22222" size="24">,<b>,<i>,<u>; выбор цвета в WebAdmin не работает, а#обязателен).
Так экран приветствия выглядит в игре.
- Баны: Export сохраняет
server-bans.json; чтобы импортировать, вставьте содержимое в секретный gist на GitHub, скопируйте Raw URL и вставьте в Import Bans, так один список могут использовать много серверов. - Журнал чата: WEBADMIN SETTINGS, вкладка CHAT LOGGING (метка времени, уникальные имена, шаблоны имени файла %i, %p, %c, %v); логи лежат в
KFGame\Logs. - Несколько админов: в
KFWebAdmin.iniпод[WebAdmin.WebAdmin]добавьтеAuthenticationClass=WebAdmin.MultiWebAdminAuth. После перезапуска создаётсяKFMultiAdmin.ini, логин -Admin(с заглавной A) и ваш прежний пароль. Администраторов создавайте на новой странице Administrators с шаблонами Deny/Allow (порядок доступа Deny,Allow или Allow,Deny); кнопки удаления нет, поэтому удаляйте раздел изKFMultiAdmin.ini. Вход через?AdminName=в.batпосле включения multi-admin не работает.
Строка AuthenticationClass в KFWebAdmin.ini.
Создание учётной записи администратора WebAdmin.
- «Exceeded login attempts»: увеличьте
MaxConnections=18(по умолчанию) вKFWeb.ini;ExpirationSeconds=86400задаёт длительность сессии. - Список карт обрезается около 170-180 карт: в
KFWeb.iniпод[IpDrv.WebConnection]изменитеMaxValueLengthиMaxLineLengthс 4096 на 999999. - Показ уровней перков: правьте файлы в
KFGame\Web\ServerAdmin(current.html,current_players.html,current_player_row.incиcurrent_players_row.inc, предварительно сделав копии), добавив столбец Level с<%player.perk.level%>.
Столбцы перка и уровня после правки.
- Счётчик волн в Endless: в
gamesummary.incзамените строки времени на<dt class="gs_wave">Wave <%wave.num%></dt><dd class="gs_wave"><%wave.monsters.dead%>/<%wave.monsters.total%></dd>и добавьте волну вcurrent_rules.inc.
Значки сервера в браузере: значок рейтинга означает серверы с рейтингом, статистикой и XP, без мутаторов и пользовательских настроек; «рейтинг stock» - сервер настроен, но статистика включена (например мутаторы из белого списка или огонь по своим); без рейтинга - статистика отключена из-за мутаторов вне белого списка или пользовательской карты со скриптами.
Пользовательские карты
Карты Workshop скачиваются быстро, сжаты и обновляются автоматически, но должны быть публичными в Workshop; удалённая страница ломает карту. Redirect даёт больше контроля, но без автообновлений и сжатия и с более медленной загрузкой. Можно использовать оба сразу, у Workshop приоритет. Автор рекомендует Workshop.
Workshop:
- В
PCServer-KFEngine.iniпод[IpDrv.TcpNetDriver]добавьтеDownloadManagers=OnlineSubsystemSteamworks.SteamWorkshopDownload(выше других строк DownloadManagers). - В конец добавьте
[OnlineSubsystemSteamworks.KFWorkshopSteamworks]иServerSubscribedWorkshopItems=<ID Workshop>(по строке на ID, комментарии через//). - Запустите сервер, чтобы он скачал в
KFGame\Cache, затем закройте. - Добавьте хранилище данных и запись в цикл карт (ниже).
Подписанные ID Workshop с комментариями.
Redirect: скачайте карты (например с сайта redirect), положите в KFGame\BrewedPC\Maps (по желанию в подпапку CustomMaps) и укажите RedirectToURL=<URL redirect> в PCServer-KFEngine.ini. В [IpDrv.WebServer] задайте ApplicationPaths[0]=/ServerAdmin, ApplicationPaths[1]=/images, ListenPort=80, большое MaxConnections, большое ExpirationSeconds и bEnabled=True. На Linux redirect используйте имена в нижнем регистре и косую черту в конце, иначе клиенты получат файл 1 КБ. Для IIS добавьте MIME-тип .kfm. Веб-серверы: HFS, Apache, NGINX, IIS; защищайте их (WAF, без случайных файлов с паролями).
Хранилище данных и цикл: в PCServer-KFGame.ini добавьте для каждой карты:
[KF-BikiniAtoll KFMapSummary]
MapName=KF-BikiniAtoll
(MapAssociation и ScreenshotPathName не нужны; имена карт redirect чувствительны к регистру, карт Workshop нет.) Затем добавьте карту в GameMapCycles либо используйте Map Cycles в WebAdmin с «ADD MISSING», чтобы добавить все недостающие карты.
Запись KFMapSummary для пользовательской карты.
Добавление карты в GameMapCycles.
Удаление карты: уберите её из ID Workshop, хранилища данных, цикла, папки Cache (названа по ID Workshop) или папки Maps. Для больших списков комментируйте ID, ведите таблицу, сортируйте по алфавиту и добавляйте разделители вроде "| =----= Killing Floor 2 Maps =----= |" в GameMapCycles (нажатие на разделитель загружает KF-BioticsLab).
Что значит содержимое Cache: папки с числами - ID Workshop, файлы .uxx - загрузки redirect, перечисленные в Cache.ini, а .tmp - временные. См. также где хранятся скачанные с серверов карты.
Состояния предметов в консоли сервера: 4 - установлен и актуален; 0 - не установлен, будет скачан; 12 - установлен, требует обновления; 20 - не проверен или потеряна связь с Workshop (перезапустите); 8 и 36 неясны. Предупреждения: «Steam не похож на работающий» - нет связи с Workshop (перезапустите Steam и сервер и не запускайте сервер дважды); «не удалось скачать предмет» - страница закрыта, отключена или неверный ID; «попытка проверить установку без загрузки» - это нормально, проверяется Binaries\Win64\steamapps\workshop\content\232090, затем копирование в KFGame\Cache.
Проблема Workshop 2025: моды, опубликованные после 11 июля 2025, не обновляются на сервере, потому что поставляемые DLL Steam не знают сжатых по ZSTD блоков Workshop. Краткосрочное решение - скопировать steamclient.dll, steamclient64.dll, tier0_s.dll, tier0_s64.dll, vstdlib_s.dll и vstdlib_s64.dll из SteamCMD в папку Binaries\Win64 сервера.
Более 519 карт в ротации роняет сервер при открытии Change Map или Map Cycles. Обход: используйте учётные записи MultiAdmin, в шаблонах запрета укажите /current/change и /settings/maplist, а карты меняйте из консоли WebAdmin командой switch KF-MapName (допустимы дополнения вроде ?Difficulty=3?GameLength=2) или restartmap.
Мутаторы и типы игры
Мутаторы и типы игры отключают XP и статистику, если не входят в белый список. Установка: впишите ID Workshop в ServerSubscribedWorkshopItems, запустите для загрузки, затем добавьте командную строку в .bat или WebAdmin. Всегда проверяйте инструкции автора.
| Мод | Команда |
|---|---|
| Unofficial Endless | ?Game=EndlessM.EndlessM_Main |
| Controlled Difficulty | ?Game=ControlledDifficulty.CD_Survival |
| Legs and Backpack | ?Mutator=FPBackPackMut.FPBPBaseMut |
| Infernal Nightmare Difficulty | ?Mutator=NightmareDifficulty.NightmareMutator?Difficulty=4 |
| Server Extension Addons | ?Mutator=ServerExtMut.ServerExtMut |
| Boss Only | ?Mutator=OnlyBossMut.OnlyBossMut |
| Classic Scoreboard | ?Mutator=ClassicScoreboard.ClassicSCMut |
| MaxPlayers | ?Mutator=KFMutator.KFMutator_MaxPlayersV2?MaxPlayers=15?MaxMonsters=64 |
Несколько мутаторов разделяются запятыми, например ?Mutator=OnlyBossMut.OnlyBossMut,FPBackPackMut.FPBPBaseMut. Некоторым модам нужны файлы .u или .upk в KFGame\BrewedPC и .ini в Config; варианту MaxPlayers V1 нужно скопировать KFMutator.u из Cache в BrewedPC, V2 не нужно.
Чтобы показать пользовательский тип игры в WebAdmin, добавьте в PCServer-KFGame.ini рядом с другими KFGameInfoSummary:
[Controlled_Difficulty.CD_Survival KFGameInfoSummary]
ClassName=Controlled_Difficulty.CD_Survival
MapPrefix=KF
затем выберите его в Change Map и укажите его командную строку в ADDITIONAL URL VARIABLES.
Настройки сервера
Настройки, не делающие сервер пользовательским: ReadyUpDelay=90, GameStartDelay=4 (никогда не 0), TimeBetweenFailedVotes=10, VoteTime=60.0, MaxSpectators=2, KickVotePercentage=0.66, bDisableTeamCollision, bEnableDeadToVOIP, bAdminCanPause (adminpause), bDisableVOIP, bDisablePublicTextChat, bDisableMapVote, MaxIdleTime (максимум 300), bDisableKickVote, bSilentAdminLogin, bPartitionSpectators, bUsedForTakeover (включена по умолчанию; позволяет игрокам менять сложность и длину через подбор матча; стоит отключить) и bEnableMapObjectives (задаётся в разделах Survival или Endless, а не в [KFGame.KFGameInfo]). Настройки, делающие сервер «rated stock»: bDisablePickups и FriendlyFireScale.
Советы
- Админов нельзя кикнуть, даже через WebAdmin.
- Бан сессии действует до следующей карты; используйте вместе с киком.
- Если после игры никто не голосует, сервер загружает следующую карту цикла, а не случайную.
- Пароль админа подходит и как пароль игры и входит под админом.
- Привяжите
adminlogin <пароль>к клавише вKFInput.iniили командойbind l adminlogin 123. - Отключите столкновения команды, чтобы не было блокировщиков дверей.
- Отключите автоперезагрузку Windows для серверов 24/7.
- Держите в WebAdmin заметки о значениях сложности и длины.
- Программы вроде Microsoft Visual Studio могут конфликтовать с сервером и вызывать случайные падения.
- Если игроки голосуют за карту, которую сервер не находит, загружается BioticsLab;
ServerLocalMap=вPCServer-KFEngine.iniможет не помочь.
Вопросы и ответы
- Какие порты нужны серверу KF2?
- Игровой 7777 UDP, query 27015 UDP, WebAdmin 8080 TCP, порт Steam 20560 UDP и, для режима Weekly, NTP 123 UDP.
- Какой ID у выделенного сервера?
- 232130 в SteamCMD (app_update 232130 validate). Сама игра - 232090.
- Сколько пользовательских карт выдержит сервер?
- Не более 519 карт в ротации; больше - и страницы карт WebAdmin роняют сервер, так что меняйте карты из консоли командой switch KF-MapName.
- Работает ли это для игроков Epic Games?
- Да, сервер кроссплатформенный, один сервер обслуживает и Steam, и Epic.