Как поднять сервер Killing Floor 2: пошаговая инструкция
Играть в Killing Floor 2 на чужих серверах — значит мириться с чужими правилами: где-то сложность зашкаливает уже на второй волне, где-то забит слот под завязку рандомами, а где-то модератор банит за любой чих. Свой сервер снимает все эти вопросы разом — ты сам решаешь сложность, длину волн, карты и кто вообще может зайти. Разберём по шагам, как поднять дедикейтед-сервер KF2 на VPS: от системных требований до автозапуска после ребута.
Содержание
Системные требования: сколько реально нужно ресурсов
Killing Floor 2 работает на Unreal Engine 3, и хотя движок не молодой, сервер довольно прожорливый по CPU — считает позиции и AI-поведение десятков ZED одновременно, особенно на волнах с большим спауном на Suicidal и Hell on Earth. Официальный минимум — около 4 ГБ RAM, но это без запаса на пиковые волны и без модов:
| Сценарий | RAM | vCPU | Игроков |
|---|---|---|---|
| Компания на 4-6 человек, стоковые карты | 4 ГБ | 2 | до 6 |
| Постоянный сервер, Hell on Earth, полный состав | 6 ГБ | 2-3 | до 6 |
| С кастомными картами и Workshop-модами | 6-8 ГБ | 3-4 | до 6 |
Максимум игроков в ванильном режиме — 6 человек, это ограничение самой игры, а не хостинга, так что раздувать RAM ради «ещё слотов» смысла нет. Основная нагрузка на CPU идёт от количества одновременно активных ZED на карте и от частоты волн-спаунов, а не от числа игроков напрямую — сервер на Endless-режиме или с модами, добавляющими орды, ест процессор заметно охотнее стокового Survival. Диск много не просит: базовая установка — порядка 15-20 ГБ, SSD полезен скорее для быстрой загрузки карт при частых рестартах, чем как критичное требование.
Установка сервера через SteamCMD
Дедикейтед-сервер KF2 ставится через SteamCMD с app id 232130 — это отдельная сборка сервера, качается анонимным логином, покупать саму игру не нужно.
На Debian/Ubuntu сначала ставим зависимости — бинарник частично 32-битный, без библиотек SteamCMD откажется работать:
sudo dpkg --add-architecture i386
sudo apt update
sudo apt install -y lib32gcc-s1 lib32stdc++6 curl tar
Заводим отдельного непривилегированного пользователя и ставим сам SteamCMD:
sudo useradd -m -s /bin/bash steam
sudo su - steam
mkdir ~/steamcmd && cd ~/steamcmd
curl -sqL "https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz" | tar zxvf -
Скачиваем сам сервер Killing Floor 2 в отдельную папку:
./steamcmd.sh +force_install_dir /home/steam/kf2server +login anonymous +app_update 232130 validate +quit
Первая загрузка тянет порядка 15-20 ГБ — карты, звуки, модели персонажей и ZED. По завершении в /home/steam/kf2server появится папка Binaries/Linux с исполняемым файлом KFGameSteamServer.bin64 и папка KFGame/Config с конфигами сервера — с ними и будем дальше работать.
Поднять сервер Killing Floor 2 за пару минут
Готовый образ MAATRIX GAMES: NVMe, AMD EPYC, DDoS-защита, панель управления. Локации UK, US, RU. Оплата картой РФ, СБП или криптой.
Создать серверНастройка KFGame.ini: хост, порт, сложность, режим
Основной конфиг сервера — KFGame/Config/LinuxServer-KFGame.ini (на Windows-хостинге аналогичный файл называется PCServer-KFGame.ini). Если запускаешь сервер впервые, файл создаётся автоматически при первом старте на основе дефолтного шаблона — открывать его стоит уже после первого запуска и остановки сервера.
В секции [KFGame.KFGameInfo] правим ключевые параметры:
[KFGame.KFGameInfo]
GameName="Мой Killing Floor 2 сервер"
MaxPlayers=6
GamePassword=
FriendlyFireScale=0.0
bAllowSubscribedItems=True
GameName — это то, что игроки увидят в браузере серверов. MaxPlayers больше 6 в ванильном режиме поднимать бессмысленно — игра просто не даст зайти сверх лимита, если только не используешь моды, расширяющие состав. GamePassword оставь пустым для паблик-сервера или задай значение, если хочешь закрытую компанию.
Сложность и длину волн на KF2 удобнее и надёжнее задавать не в ini-файле, а прямо в параметрах карты при запуске — так они гарантированно применяются при каждом старте независимо от того, что кэшировано в конфиге. Traditional-шкала Tripwire для параметра Difficulty: 1 — Normal, 2 — Hard, 4 — Suicidal, 7 — Hell on Earth; для GameLength: 0 — Short, 1 — Medium, 2 — Long. Эти значения устойчиво работают на актуальных билдах, но если после патча что-то ведёт себя не так, как ожидаешь — свериться с текущими дефолтными инишниками не будет лишним, Tripwire время от времени их правит.
Большинство остальных настроек — MOTD, банлист, права админов, список подписанных Workshop-предметов — проще и нагляднее менять не руками в ini, а через встроенную WebAdmin-панель, о которой ниже.
Запуск сервера: параметры карты и командной строки
Запускаем сервер из папки Binaries/Linux, указывая карту вместе с параметрами сложности через знак вопроса, как в классических Unreal-движках:
cd /home/steam/kf2server/Binaries/Linux
./KFGameSteamServer.bin64 KF-BurningParis?Difficulty=4?GameLength=2 -Port=7777 -QueryPort=27015 -WebAdminPort=8080 -unattended -nosteamclient -servername="Мой Killing Floor 2 сервер" -log
Что тут происходит:
KF-BurningParis— стартовая карта, одна из штатных карт игры (в комплекте также идут KF-Nuked, KF-Outpost, KF-Farmhouse, KF-Prison, KF-BioticsLab и другие).?Difficulty=4?GameLength=2— Suicidal-сложность и длинная сессия волн.-unattended— сервер стартует без интерактивного лаунчера, обязателен для headless-запуска на VPS.-nosteamclient— не пытаться поднять локальный Steam-клиент, актуально именно для дедикейтед-сборки без GUI.-log— включает подробный лог запуска, полезно при первой настройке, когда сервер по каким-то причинам не поднимается.
Сменить карту на лету без рестарта можно консольной командой на самом сервере через RCON или WebAdmin:
changelevel KF-Nuked
Если планируешь кастомные карты или моды с Workshop — они подключаются через bAllowSubscribedItems=True в конфиге и подписку на нужные предметы через Steam Workshop ID, похожий принцип модов-через-Workshop мы разбирали и для Garry's Mod, хотя механика подписки у каждой игры на Source или Unreal своя.
WebAdmin: удалённое управление без RCON
У Killing Floor 2, как у многих серверов на движках Unreal, есть встроенная веб-панель управления — WebAdmin, по умолчанию доступна на порту 8080 по адресу http://IP_сервера:8080. Через неё можно менять настройки сложности, банить игроков, читать логи, управлять списком карт в ротации и подписанными Workshop-предметами — без необходимости лазить в консоль или редактировать ini вручную на каждый чих.
Логин и пароль администратора WebAdmin задаются в KFGame/Config/LinuxServer-KFWeb.ini, в секции с учётными данными веб-интерфейса — при первом запуске стоит сразу сменить дефолтные значения, иначе панель управления сервером фактически открыта всем, кто знает IP и порт.
Проброс портов и файрвол
KF2 использует три основных порта, все нужно открыть на VPS, если провайдер не пробросил их автоматически:
- 7777 UDP — основной игровой порт (можно сменить флагом
-Port, если запускаешь несколько инстансов на одной машине). - 27015 UDP — query-порт для отображения сервера в браузере и обработки Steam-запросов.
- 8080 TCP — порт WebAdmin-панели.
На VPS с ufw открываем так:
sudo ufw allow 7777/udp
sudo ufw allow 27015/udp
sudo ufw allow 8080/tcp
Если WebAdmin не планируешь выставлять наружу (управляешь только локально через SSH-туннель) — 8080 порт наружу лучше не открывать вовсе, это снижает поверхность атаки. Если арендуешь сервер на игровом тарифе хостинга, где порты пробрасываются автоматически панелью управления — этот шаг можно пропустить и сразу проверять подключение из игры по connect IP:7777 в консоли или через прямой поиск сервера в браузере.
Автозапуск через systemd
Чтобы сервер поднимался сам после ребута VPS или падения процесса, заводим systemd-юнит:
# /etc/systemd/system/kf2.service
[Unit]
Description=Killing Floor 2 Dedicated Server
After=network.target
[Service]
Type=simple
User=steam
WorkingDirectory=/home/steam/kf2server/Binaries/Linux
ExecStart=/home/steam/kf2server/Binaries/Linux/KFGameSteamServer.bin64 KF-BurningParis?Difficulty=4?GameLength=2 -Port=7777 -QueryPort=27015 -WebAdminPort=8080 -unattended -nosteamclient -servername="Мой Killing Floor 2 сервер" -log
Restart=on-failure
RestartSec=10
[Install]
WantedBy=multi-user.target
Включаем и стартуем:
sudo systemctl daemon-reload
sudo systemctl enable --now kf2.service
Логи смотрим через journalctl -u kf2.service -f — полезно, если сервер падает без явной причины: часто дело в битой карте, конфликтующем Workshop-предмете или занятом порту. Тот же принцип автозапуска через systemd мы разбирали для сервера Rust и для Left 4 Dead 2 — механика одинаковая для любого дедикейтед-сервера на Linux, меняется только сама команда запуска и путь к бинарнику.
Обновление сервера после патчей Tripwire делается тем же steamcmd-скриптом, что и при установке (+app_update 232130 validate +quit), перед этим сервис лучше остановить, чтобы SteamCMD не переписывал файлы работающего процесса.
Поднять сервер Killing Floor 2 за пару минут
Готовый образ MAATRIX GAMES: NVMe, AMD EPYC, DDoS-защита, панель управления. Локации UK, US, RU. Оплата картой РФ, СБП или криптой.
Создать серверЧастые вопросы
Нужен ли купленный аккаунт Steam с игрой для сервера?
Нет, дедикейтед-сборка (app id 232130) качается анонимным логином SteamCMD — иметь саму игру в библиотеке нужно только игрокам, которые будут заходить на сервер.
Сервер не виден в браузере серверов, хотя запускается без ошибок — в чём дело?
Чаще всего дело в непроброшенном query-порте 27015 UDP или в том, что провайдер блокирует UDP-трафик на нестандартных портах. Проверь ufw status и попробуй подключиться напрямую по connect IP:7777, минуя браузер серверов.
Как включить Workshop-моды и кастомные карты?
Через bAllowSubscribedItems=True в KFGame.ini и подписку сервера на нужные Workshop-предметы по их Steam ID — управлять списком подписок удобнее всего через WebAdmin, а не руками через консоль.
Можно ли поменять сложность без рестарта сервера?
Частично — через WebAdmin или RCON можно сменить некоторые параметры на лету, но надёжнее всего задавать Difficulty и GameLength прямо в строке запуска карты: тогда значения гарантированно применяются при каждом старте и не теряются после патчей.
Почему сервер падает через несколько минут после старта?
Обычно это нехватка RAM под нагрузкой в поздние волны, битая карта из Workshop или конфликт двух модов, трогающих одну и ту же геймплейную систему. Смотри journalctl -u kf2.service -f — там обычно видно, на каком именно месте процесс вылетает.