MAATRIX GAMES / Блог / Как поднять сервер Killing Floor 2: пошаговая инструкция

Как поднять сервер Killing Floor 2: пошаговая инструкция

MAATRIX GAMES

Играть в Killing Floor 2 на чужих серверах — значит мириться с чужими правилами: где-то сложность зашкаливает уже на второй волне, где-то забит слот под завязку рандомами, а где-то модератор банит за любой чих. Свой сервер снимает все эти вопросы разом — ты сам решаешь сложность, длину волн, карты и кто вообще может зайти. Разберём по шагам, как поднять дедикейтед-сервер KF2 на VPS: от системных требований до автозапуска после ребута.

Системные требования: сколько реально нужно ресурсов

Killing Floor 2 работает на Unreal Engine 3, и хотя движок не молодой, сервер довольно прожорливый по CPU — считает позиции и AI-поведение десятков ZED одновременно, особенно на волнах с большим спауном на Suicidal и Hell on Earth. Официальный минимум — около 4 ГБ RAM, но это без запаса на пиковые волны и без модов:

СценарийRAMvCPUИгроков
Компания на 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 — там обычно видно, на каком именно месте процесс вылетает.