Skip to main content

Как создать свой сервер Counter-Strike 2

Это руководство объясняет, как установить и настроить выделенный сервер Counter-Strike 2 (CS2) на вашем VPS или выделенном Linux-сервере.

Заказать сервер​

Для размещения вашего сервера Counter-Strike 2 HostMyServers предлагает несколько вариантов, оптимизированных для игр:

Предварительные требования​

Ресурсы

Указанные ниже ресурсы соответствуют потребностям сервера и не учитывают ресурсы, уже используемые операционной системой, установленным программным обеспечением или другими службами на машине. Рассчитывайте примерно на 50 Мбит/с для 10 игроков и более.

  • SSH-доступ как root или пользователь с правами sudo
  • 64-битная система Linux (рекомендуется Debian 12/13 или Ubuntu 22.04/24.04, требуется glibc 2.31 или выше)
  • Активный брандмауэр: nftables (рекомендуется), iptables или ufw (используйте только один инструмент брандмауэра одновременно)
  • Минимум 4 ГБ RAM (8 ГБ рекомендуется)
  • Около 70 ГБ свободного дискового пространства (рекомендуется 100 ГБ, SSD)
  • Порт 27015 UDP доступен (и порт 27015 TCP для RCON, только с вашего статического IP-адреса)
  • Аккаунт Steam с привязанным номером телефона (для токена GSLT)

Требуемая конфигурация​

КомпонентМинимумРекомендуется
RAM4 ГБ8 ГБ
CPU2 ядра4 ядра, высокая частота
Хранилище70 ГБ SSD100 ГБ SSD
Сеть100 Мбит/с1 Гбит/с
Сетевой протокол

Counter-Strike 2 использует порт 27015 по UDP для игры и по TCP для доступа RCON (удалённое администрирование). TCP-порт должен быть доступен только с ваших IP-адресов (требуется статический IP-адрес).

Tickrate

Counter-Strike 2 использует систему «subtick»: параметра -tickrate для настройки больше не существует.

Обновление системы​

sudo apt update && sudo apt upgrade -y

Установка зависимостей​

SteamCMD требует 32-битную библиотеку lib32gcc-s1. Установите необходимые пакеты:

sudo apt install -y wget tar screen lib32gcc-s1

Создание выделенного пользователя​

По соображениям безопасности создайте выделенного пользователя:

sudo adduser --disabled-password --gecos "" cs2

Настройка брандмауэра​

Откройте порт 27015 по UDP для игроков. Порт 27015 по TCP соответствует RCON: ограничьте его вашим статическим IP-адресом (замените ВАШ_IP).

С UFW​

sudo ufw allow 27015/udp
sudo ufw allow from ВАШ_IP to any port 27015 proto tcp
sudo ufw reload

С iptables​

sudo iptables -A INPUT -p udp --dport 27015 -j ACCEPT
sudo iptables -A INPUT -p tcp -s ВАШ_IP --dport 27015 -j ACCEPT
sudo iptables-save | sudo tee /etc/iptables/rules.v4

Для сохранения правил после перезагрузки требуется пакет iptables-persistent.

С nftables​

Эти команды используют таблицу inet filter и цепочку input, присутствующие по умолчанию в /etc/nftables.conf в Debian.

sudo nft add rule inet filter input udp dport 27015 accept
sudo nft add rule inet filter input ip saddr ВАШ_IP tcp dport 27015 accept
(echo "flush ruleset"; sudo nft list ruleset) | sudo tee /etc/nftables.conf
Безопасность RCON

Никогда не открывайте TCP-порт 27015 для всех: он даёт доступ к RCON. Без статического IP-адреса не открывайте этот порт и используйте SSH-туннель.

Установка SteamCMD​

Подключитесь как пользователь cs2:

sudo -u cs2 bash
cd ~

Создайте директории и загрузите SteamCMD:

mkdir -p ~/steamcmd ~/cs2-server
cd ~/steamcmd
wget https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz
tar -xzf steamcmd_linux.tar.gz

Загрузка сервера CS2​

Запустите установку сервера (идентификатор приложения 730):

./steamcmd.sh +force_install_dir /home/cs2/cs2-server +login anonymous +app_update 730 validate +quit
Дисковое пространство

При нехватке места на диске SteamCMD останавливается с ошибкой state is 0x202 after update job (см. FAQ).

Совет

Загрузка может занять много времени. Если установка прерывается из-за сетевой ошибки, просто повторно выполните ту же команду: SteamCMD продолжит с того места, где остановился.

По завершении отобразится сообщение Success! App '730' fully installed.. Убедитесь, что исполняемый файл сервера присутствует:

ls ~/cs2-server/game/bin/linuxsteamrt64/cs2

Создание ссылки на steamclient.so​

CS2 нужен файл steamclient.so для связи со Steam. Создайте ссылку на 64-битный файл SteamCMD:

mkdir -p ~/.steam/sdk64
ln -sf ~/steamcmd/linux64/steamclient.so ~/.steam/sdk64/steamclient.so

Токен GSLT (обязателен)​

Требуется токен GSLT

Чтобы ваш сервер отображался в списке публичных серверов и принимал подключения из Интернета, вам нужен токен GSLT (Game Server Login Token). Без него сервер работает только в локальной сети.

Чтобы сгенерировать его, войдите в свой аккаунт Steam и перейдите на страницу Управление учётными записями игровых серверов Steam.

Для создания токена необходимо выполнить несколько условий:

  • Ваш аккаунт Steam не должен быть забанен в сообществе или заблокирован
  • Ваш аккаунт Steam не должен быть ограничен
  • К вашему аккаунту Steam должен быть привязан номер телефона
  • Ваш аккаунт Steam должен владеть игрой, для которой вы создаёте учётную запись игрового сервера
  • Ваш аккаунт Steam может создать до 1000 учётных записей игровых серверов

В поле App ID базовой игры введите 730. Вы можете добавить заметку, чтобы запомнить, к какому серверу относится токен, затем завершите, нажав кнопку Создать.

Чтобы использовать токен, добавьте его в строку запуска:

+sv_setsteamaccount ВАШ_ТОКЕН
Совет

Используйте один токен на один сервер и никогда не передавайте его другим. Добавьте параметр во все строки запуска: первый запуск, строку ExecStart сервиса systemd и команду, запускаемую через screen.

Настройка сервера​

Файл server.cfg​

Создайте файл конфигурации:

nano ~/cs2-server/game/csgo/cfg/server.cfg

Базовая конфигурация​

hostname "Мой сервер CS2"
sv_password ""
rcon_password "ChangeMe"
sv_region 3
sv_lan 0
sv_cheats 0
mp_friendlyfire 0
mp_autoteambalance 1
Безопасность

Выберите длинный и уникальный пароль rcon_password. Любой, кто его знает, может администрировать ваш сервер.

Основные параметры​

ПараметрОписание
hostnameПубличное имя сервера
sv_passwordПароль для входа (пусто = публичный)
rcon_passwordПароль удалённого администрирования
sv_regionРегион: 3 = Европа, 0 = восток США, 4 = Азия, 255 = весь мир
sv_lan0 = сервер виден в Интернете, 1 = только локальная сеть
sv_cheatsЧитерские команды (0 = отключено)
mp_friendlyfireОгонь по своим (0 = отключено, 1 = включено)
mp_autoteambalanceАвтоматическая балансировка команд (0 или 1)

Игровые режимы​

Режим выбирается при запуске с помощью +game_type и +game_mode:

Режимgame_typegame_mode
Обычный (Casual)00
Соревновательный01
Wingman02
Гонка вооружений (Arms Race)10
Подрыв11
Deathmatch12

Первый запуск​

cd ~/cs2-server/game/bin/linuxsteamrt64
./cs2 -dedicated -console -usercon -port 27015 -maxplayers 64 +game_type 0 +game_mode 1 +mapgroup mg_active +map de_dust2 +sv_setsteamaccount ВАШ_ТОКЕН

После завершения запуска в консоли отображается подключение сервера к серверам Steam. Чтобы остановить сервер, введите quit.

Оптимизация запуска​

Параметры запуска​

ПараметрОписание
-dedicatedЗапускает сервер в выделенном режиме (обязательно)
-consoleВыполняется в консольном режиме
-userconВключает RCON
-portПорт сервера (по умолчанию 27015)
-ipIP-адрес для прослушивания
-maxplayersМаксимальное количество игроков
+game_type и +game_modeИгровой режим (см. таблицу выше)
+mapgroupГруппа карт (mg_active для активных официальных карт)
+mapСтартовая карта
+sv_setsteamaccountТокен GSLT (обязателен, см. соответствующий раздел)
-insecureОтключает защиту VAC (см. предупреждение ниже)
Параметр -insecure

-insecure отключает защиту VAC: используйте этот параметр только для тестов, он оставляет дверь открытой для читеров.

Совет

Всегда оставляйте от 1 до 2 ГБ свободной RAM для операционной системы.

Изменение порта​

./cs2 -dedicated -console -usercon -port 27016 -maxplayers 64 +game_type 0 +game_mode 1 +mapgroup mg_active +map de_dust2 +sv_setsteamaccount ВАШ_ТОКЕН

Не забудьте открыть новый порт в брандмауэре.

Структура файлов​

ПутьОписание
game/bin/linuxsteamrt64/cs2Исполняемый файл сервера
game/csgo/cfg/Файлы конфигурации
game/csgo/cfg/server.cfgОсновная конфигурация
game/csgo/addons/Расширения (Metamod, CounterStrikeSharp)

Настройка как сервис systemd​

Создание файла сервиса​

Выйдите из сессии пользователя cs2 (exit), чтобы вернуться в свою административную учётную запись, затем создайте файл сервиса:

sudo nano /etc/systemd/system/cs2.service

Содержимое файла:

[Unit]
Description=Counter-Strike 2 Server
After=network.target

[Service]
Type=simple
User=cs2
Group=cs2
WorkingDirectory=/home/cs2/cs2-server/game/bin/linuxsteamrt64
ExecStart=/home/cs2/cs2-server/game/bin/linuxsteamrt64/cs2 -dedicated -console -usercon -port 27015 -maxplayers 64 +game_type 0 +game_mode 1 +mapgroup mg_active +map de_dust2 +sv_setsteamaccount ВАШ_ТОКЕН
Restart=on-failure
RestartSec=20

[Install]
WantedBy=multi-user.target

Активация и запуск сервиса​

sudo systemctl daemon-reload
sudo systemctl enable cs2.service
sudo systemctl start cs2.service

Команды управления​

# Проверить статус
sudo systemctl status cs2.service

# Остановить сервер
sudo systemctl stop cs2.service

# Перезапустить сервер
sudo systemctl restart cs2.service

# Просмотр логов
sudo journalctl -u cs2.service -f
Консоль сервера

При использовании systemd консоль сервера не является интерактивной. Для отправки команд используйте RCON из игры или запустите сервер через screen (см. ниже).

Запуск с screen (альтернатива)​

Только один способ запуска

Если сервис systemd запущен, сначала остановите его (sudo systemctl stop cs2.service): два сервера не могут использовать один и тот же порт.

sudo -u cs2 bash
cd ~/cs2-server/game/bin/linuxsteamrt64
screen -S cs2
./cs2 -dedicated -console -usercon -port 27015 -maxplayers 64 +game_type 0 +game_mode 1 +mapgroup mg_active +map de_dust2 +sv_setsteamaccount ВАШ_ТОКЕН

Для отсоединения: Ctrl+A затем D

Для возврата: screen -r cs2

Запуск в фоне с журналом​

sudo -u cs2 bash
cd ~/cs2-server/game/bin/linuxsteamrt64
screen -AdmSL cs2 ./cs2 -dedicated -console -usercon -port 27015 -maxplayers 64 +game_type 0 +game_mode 1 +mapgroup mg_active +map de_dust2 +sv_setsteamaccount ВАШ_ТОКЕН
ОпцияОписание
-AПодстраивает окно под размер терминала
-d -mЗапускает сессию в отсоединённом виде, в фоновом режиме
-S cs2Имя сессии
-LЗаписывает вывод сервера в файл журнала

Файл screenlog.0 создаётся в каталоге, из которого запущена команда (~/cs2-server/game/bin/linuxsteamrt64), и содержит весь вывод на стороне сервера. Чтобы следить за ним в реальном времени:

tail -f ~/cs2-server/game/bin/linuxsteamrt64/screenlog.0

При ошибке запуска это первый файл, который нужно проверить. Чтобы вернуться в консоль сервера: screen -r cs2

Совет

Файл screenlog.0 увеличивается при каждом запуске. Не забывайте регулярно очищать или удалять его.

Обновление сервера​

Остановка сервера​

sudo systemctl stop cs2.service

Загрузка новой версии​

sudo -u cs2 bash
cd ~/steamcmd
./steamcmd.sh +force_install_dir /home/cs2/cs2-server +login anonymous +app_update 730 validate +quit
exit

Перезапуск сервера​

sudo systemctl start cs2.service

Команды консоли​

Эти команды используются в консоли сервера или через RCON.

КомандаОписание
statusПоказывает подключённых игроков и их идентификаторы
map <карта>Сменить карту
kick <игрок>Выгнать игрока
banid <минуты> <steamid>Забанить игрока (0 = навсегда)
mp_restartgame 1Перезапустить игру
say <сообщение>Отправить сообщение всем игрокам
exec server.cfgПерезагрузить конфигурацию
quitОстановить сервер

Использование RCON из игры​

Ваш IP-адрес должен быть разрешён на TCP-порту 27015 в брандмауэре.

В консоли игры:

rcon_address IP_СЕРВЕРА:27015
rcon_password ВашПароль
rcon status

Автоматическое резервное копирование​

Скрипт резервного копирования​

sudo nano /home/cs2/backup.sh
#!/bin/bash
BACKUP_DIR="/home/cs2/backups"
SERVER_DIR="/home/cs2/cs2-server"
DATE=$(date +%Y-%m-%d_%H-%M-%S)

mkdir -p $BACKUP_DIR

# Резервная копия конфигурации
tar -czf $BACKUP_DIR/cs2_$DATE.tar.gz -C $SERVER_DIR game/csgo/cfg

# Удаление резервных копий старше 7 дней
find $BACKUP_DIR -name "cs2_*.tar.gz" -mtime +7 -delete

echo "Резервное копирование завершено: cs2_$DATE.tar.gz"
sudo chown cs2:cs2 /home/cs2/backup.sh
sudo chmod +x /home/cs2/backup.sh
Совет

Если вы устанавливаете расширения, добавьте game/csgo/addons в команду tar.

Планирование резервного копирования​

sudo crontab -u cs2 -e

Добавьте:

# Резервное копирование каждый день в 4 утра
0 4 * * * /home/cs2/backup.sh

Подключение к серверу​

Игроки могут подключиться следующим образом:

  1. Запустить Counter-Strike 2
  2. Открыть консоль игры (включается в настройках игры)
  3. Ввести: connect IP_СЕРВЕРА:27015
  4. Если задан пароль: password ВашПароль перед подключением

Вы также можете добавить сервер в избранное Steam (меню «Вид», «Серверы», вкладка «Избранное»).

При возникновении проблем​

Сервер не запускается​

  • Проверьте логи: sudo journalctl -u cs2.service -n 100
  • Проверьте доступное дисковое пространство: df -h
  • Убедитесь, что установка завершена (повторно выполните команду app_update)
  • Убедитесь, что исполняемый файл существует: ls ~/cs2-server/game/bin/linuxsteamrt64/cs2 (иначе установка не завершена)
  • Убедитесь, что ссылка steamclient.so существует: ls -l ~/.steam/sdk64/steamclient.so

Игроки не могут подключиться​

  • Убедитесь, что токен GSLT присутствует и действителен в строке запуска

  • Убедитесь, что порт 27015 открыт по UDP:

    sudo ufw status
    sudo iptables -L INPUT -n --line-numbers | grep 27015
    sudo nft list ruleset | grep 27015
  • Убедитесь, что сервер слушает: ss -ulnp | grep 27015

  • Протестируйте с другой машины с помощью nc -zvu IP_СЕРВЕРА 27015

Сервер не отображается в списке​

  • Убедитесь, что в server.cfg задано sv_lan 0
  • Убедитесь, что токен GSLT действителен: если есть сомнения, сгенерируйте новый
  • Подождите несколько минут после запуска
  • Убедитесь, что у сервера есть доступ в Интернет

Проблемы с производительностью​

  • Уменьшите -maxplayers, если сервер перегружен
  • Отключите ненужные расширения в game/csgo/addons
  • Запланируйте регулярные перезапуски

FAQ​

Я получаю ошибку «Error! App '730' state is 0x202 after update job»​

Эта ошибка обычно вызвана нехваткой места на диске: установка CS2 занимает около 69 ГБ, а ошибка наблюдалась при наличии всего 50 ГБ свободного места. Проверьте свободное место с помощью df -h, освободите место или добавьте том, затем повторно выполните команду app_update.

Какие порты нужно открыть?​

Помимо порта сервера (27015 по UDP), Steam требуются следующие порты. Они позволяют серверу получать ответы от серверов Steam, когда ваш брандмауэр по умолчанию блокирует входящий трафик:

UFW:

sudo ufw allow proto udp from any port 27000:27030 to any port 1025:65535
sudo ufw allow proto udp from any port 4380 to any port 1025:65535
sudo ufw reload

iptables:

sudo iptables -A INPUT -p udp -m udp --sport 27000:27030 --dport 1025:65535 -j ACCEPT
sudo iptables -A INPUT -p udp -m udp --sport 4380 --dport 1025:65535 -j ACCEPT
sudo iptables-save | sudo tee /etc/iptables/rules.v4

nftables:

sudo nft add rule inet filter input udp sport 27000-27030 udp dport 1025-65535 accept
sudo nft add rule inet filter input udp sport 4380 udp dport 1025-65535 accept
(echo "flush ruleset"; sudo nft list ruleset) | sudo tee /etc/nftables.conf

Я получаю «Permission denied» при запуске ./steamcmd.sh​

Примените chmod:

chmod +x /home/cs2/steamcmd/linux32/steamcmd && chmod +x /home/cs2/steamcmd/steamcmd.sh

Появляется сообщение «WARNING: setlocale('en_US.UTF-8') failed, using locale: 'C'»​

Это не является реальной проблемой: могут неправильно отображаться только некоторые международные символы. Чтобы исправить это:

sudo locale-gen en_US.UTF-8
sudo update-locale LANG=en_US.UTF-8

Если команда locale-gen не найдена, сначала установите пакет locales с помощью sudo apt install -y locales.

Я получаю ошибку ulimit (no permission / can not open file)​

Установите лимит открытых файлов равным 2048 — значение, рекомендованное Valve. Для текущей сессии, перед запуском сервера:

ulimit -n 2048

При использовании systemd добавьте эту строку в раздел [Service] файла сервиса, затем перезагрузите конфигурацию и перезапустите сервис:

LimitNOFILE=2048
sudo systemctl daemon-reload
sudo systemctl restart cs2.service