Как создать свой сервер Counter-Strike Source
Это руководство объясняет, как установить и настроить выделенный сервер Counter-Strike Source (CSS) на вашем VPS или выделенном Linux-сервере.
Заказать сервер
Для размещения вашего сервера Counter-Strike Source HostMyServers предлагает несколько вариантов, оптимизированных для игр:
- Performance VPS - Идеально для сервера CSS (достаточно 1 vCPU и 2 ГБ RAM)
- NVMe VPS - Отличное соотношение цены и качества
- Эко выделенные серверы - Для размещения нескольких игровых серверов
- Выделенные серверы Performance - Максимальная производительность
Предварительные требования
Указанные ниже ресурсы соответствуют потребностям сервера и не учитывают ресурсы, уже используемые операционной системой, установленным программным обеспечением или другими службами на машине.
Рассчитывайте примерно на 10 Мбит/с на 30 игроков при tickrate 66 с sv_maxrate 30000 и вдвое больше при tickrate 100.
- SSH-доступ как root или пользователь с sudo
- 64-битная система Linux (рекомендуется Debian 12/13 или Ubuntu 22.04/24.04)
- Активный брандмауэр: nftables (рекомендуется), iptables или ufw (используйте только один инструмент брандмауэра одновременно)
- Минимум 1 ГБ RAM (рекомендуется 2 ГБ)
- Около 5 ГБ свободного места на диске
- Порт 27015 UDP доступен (и порт 27015 TCP для RCON, только с вашего фиксированного IP-адреса)
Требуемая конфигурация
| Компонент | Минимум | Рекомендуется |
|---|---|---|
| RAM | 1 ГБ | 2 ГБ |
| CPU | 1 ядро | 2 ядра |
| Хранилище | 5 ГБ | 10 ГБ SSD |
| Сеть | 100 Мбит/с | 1 Гбит/с |
Counter-Strike Source использует порт 27015 по UDP для игры и по TCP для доступа RCON (удалённое администрирование), который должен быть доступен только с ваших IP-адресов (требуется фиксированный IP-адрес).
Обновление системы
sudo apt update && sudo apt upgrade -y
Установка зависимостей
SteamCMD и сервер CSS — это 32-битные программы: необходимы 32-битные библиотеки. Сначала проверьте, что архитектура i386 включена:
sudo dpkg --print-foreign-architectures
Если результат пустой, выполните:
sudo dpkg --add-architecture i386
sudo apt update
Затем установите необходимые пакеты:
sudo apt install -y wget tar screen lib32gcc-s1 lib32stdc++6
Создание выделенного пользователя
По соображениям безопасности создайте выделенного пользователя:
sudo adduser --disabled-password --gecos "" css
Настройка брандмауэра
Откройте порт 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
Никогда не открывайте TCP-порт 27015 для всех: он даёт доступ к RCON. Без фиксированного IP-адреса не открывайте этот порт и используйте SSH-туннель.
Установка SteamCMD
Войдите под пользователем css:
sudo -u css bash
cd ~
Создайте директории и загрузите SteamCMD:
mkdir -p ~/steamcmd ~/css-server
cd ~/steamcmd
wget https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz
tar -xzf steamcmd_linux.tar.gz
Загрузка сервера CSS
Запустите установку сервера (идентификатор приложения 232330):
./steamcmd.sh +force_install_dir /home/css/css-server +login anonymous +app_update 232330 validate +quit
Если установка прерывается с ошибкой, просто запустите ту же команду снова: SteamCMD продолжит с того места, где остановился.
По завершении отобразится сообщение Success! App '232330' fully installed.
Настройка сервера
Файл server.cfg
Создайте файл конфигурации:
nano ~/css-server/cstrike/cfg/server.cfg
Базовая конфигурация
hostname "Мой сервер CSS"
sv_password ""
rcon_password "ChangeMe"
sv_region 3
sv_lan 0
sv_cheats 0
mp_timelimit 30
mp_freezetime 6
mp_friendlyfire 0
mp_autoteambalance 1
mp_limitteams 2
sv_alltalk 0
Расширенная пользовательская конфигурация
Пример более полной конфигурации, которую следует адаптировать под ваше сообщество:
// Server.cfg создан Let's Go
// Для сообщества Free 4 Funs
// Опубликовано для hostmyservers.fr
// Версия 1.2
// -------------------------------------------------------------------------------------
// НАСТРОЙКИ СЕРВЕРА
// -------------------------------------------------------------------------------------
// -------------------------------------------------------------------------------------
// Безопасность RCON и пароль
// -------------------------------------------------------------------------------------
// Пароль RCON (необходимо изменить)
rcon_password "changeme"
// Пароль для входа на сервер (публичный сервер: оставьте пустым)
sv_password ""
// -------------------------------------------------------------------------------------
// Идентификация сервера
// -------------------------------------------------------------------------------------
// Имя сервера
hostname "Мой сервер CSS"
sv_region 3
sv_lan 0
// Длительность бана (в минутах) после неудачных попыток доступа к RCON
sv_rcon_banpenalty 60
// Максимальное число неудачных попыток доступа к RCON до бана
sv_rcon_maxfailures 10
// Минимальное число неудачных попыток доступа к RCON до бана
sv_rcon_minfailures 5
// Период (в секундах), за который считаются неудачные попытки (см. sv_rcon_minfailures)
sv_rcon_minfailuretime 900
// -------------------------------------------------------------------------------------
// Конфигурация сервера
// -------------------------------------------------------------------------------------
mp_allowspectators 1
mp_autocrosshair 0
mp_autokick 0
mp_autoteambalance 0
mp_buytime 0.5
mp_c4timer 30
mp_chattime 8
mp_fadetoblack 0
mp_flashlight 1
mp_footsteps 1
mp_forcecamera 0
mp_forcerespawn 0
mp_fraglimit 0
mp_freezetime 4
mp_friendlyfire 1
mp_hostagepenalty 0
mp_limitteams 1
mp_maxrounds 0
mp_playerid 0
mp_roundtime 3
mp_spawnprotectiontime 5
mp_startmoney 16000
mp_timelimit 20
mp_tkpunish 0
mp_weaponstay 1
mp_winlimit 0
sv_accelerate 5
sv_gravity 800
sv_maxspeed 320
sv_pausable 0
sv_timeout 40
// -------------------------------------------------------------------------------------
// Безопасность
// -------------------------------------------------------------------------------------
sv_cheats 0
sv_consistency "1"
sv_pure "2"
sv_pure_kick_clients "1"
// -------------------------------------------------------------------------------------
// Логи сервера
// -------------------------------------------------------------------------------------
log on
sv_logbans 1
sv_logecho 1
sv_logfile 1
sv_log_onefile 1
sv_logsdir logs
mp_logdetail 3
// -------------------------------------------------------------------------------------
// Пропускная способность сервера
// -------------------------------------------------------------------------------------
// Быстрая загрузка (FastDL): адрес веб-сервера, на котором размещены файлы
//sv_downloadurl "https://xxxxxxxxxxxxxxxxxxx"
// Разрешить загрузки
sv_allowdownload 1
// Разрешить отправку файлов игроками (спреи и т. д.)
sv_allowupload 1
// Конфигурация, оптимизированная для tickrate 100
// Требуется расширение Tickrate Enabler для CS:Source и параметр запуска -tickrate 100
// Неограниченный FPS на стороне сервера (0 = без ограничений, потребляет больше ресурсов)
fps_max 0
// -------------------------------------------------------------------------------------
// Не изменяйте эти значения, если не знаете, что делаете
// sv_maxrate 0: неограниченная скорость передачи
// sv_maxrate 30000: 30 000 байт/с (около 0,24 Мбит/с) на игрока
// -------------------------------------------------------------------------------------
net_queued_packet_thread 0
sv_mincmdrate 75
sv_maxcmdrate 101
sv_maxrate 0
sv_minrate 20000
sv_maxupdaterate 101
sv_minupdaterate 75
// -------------------------------------------------------------------------------------
// Управление банами
// -------------------------------------------------------------------------------------
// Загружает список игроков, забаненных по SteamID и по IP-адресу
// (файлы нужно поместить в cstrike/cfg)
exec banned_user.cfg
exec banned_ip.cfg
// -------------------------------------------------------------------------------------
// Управление ботами
// -------------------------------------------------------------------------------------
// Чтобы включить ботов, удалите // перед следующей строкой
// (файл bot.cfg должен находиться в cstrike/cfg)
//exec bot.cfg
// -------------------------------------------------------------------------------------
// Статистика сервера
// -------------------------------------------------------------------------------------
sv_stats 1
sv_filterban 1
echo ==============================
echo Server.cfg correctement charge
echo ==============================
echo ===============================
echo Visitez wiki.free4funs.ovh
echo Visitez hostmyservers.fr
echo ===============================
echo ===============================
echo Server.cfg Config By Lets'Go
echo ===============================
Выберите длинный и уникальный пароль rcon_password. Любой, кто его знает, может администрировать ваш сервер.
Основные параметры
| Параметр | Описание |
|---|---|
hostname | Публичное имя сервера |
sv_password | Пароль для входа (пусто = публичный) |
rcon_password | Пароль удалённого администрирован ия |
sv_region | Регион: 3 = Европа, 0 = восток США, 4 = Азия, 255 = весь мир |
sv_lan | 0 = сервер виден в Интернете, 1 = только локальная сеть |
mp_timelimit | Длительность карты в минутах |
mp_freezetime | Длительность заморозки в начале раунда, во время которой игроки покупают снаряжение (секунды) |
mp_friendlyfire | Огонь по своим (0 = отключено, 1 = включено) |
sv_alltalk | Голосовой чат между двумя командами (0 или 1) |
Токен GSLT (необязательно)
Токен GSLT (Game Server Login Token) не является обязательным, но рекомендуется: он позволяет вашему серверу отображаться в списке публичных серверов Steam.
Чтобы сге нерировать его, войдите в свой аккаунт Steam и перейдите в Управление учётными записями игровых серверов Steam.
Для создания токена необходимо выполнить несколько условий:
- Ваш аккаунт Steam не должен быть забанен в сообществе или заблокирован
- Ваш аккаунт Steam не должен быть ограничен
- К вашему аккаунту Steam должен быть привязан номер телефона
- Ваш аккаунт Steam должен владеть игрой, для которой вы создаёте учётную запись игрового сервера
- Ваш аккаунт Steam может создать до 1000 учётных записей игровых серверов
В поле App ID основной игры введите 240. Вы можете добавить заметку, чтобы помнить, для какого сервера создан токен, затем завершите, нажав кнопку Создать.
Чтобы использовать токен, добавьте его в строку запуска:
+sv_setsteamaccount ВАШ_ТОКЕН
Добавьте параметр во все ваши строки запуска: первый запуск, строку ExecStart сервиса systemd и команду, запускаемую через screen.
Первый запуск
cd ~/css-server
./srcds_run -game cstrike -console +map de_dust2 +maxplayers 24 -port 27015
После завершения запуска консоль отображает состояние подключения к серверам Steam. Чтобы остановить сервер, введите quit.
Оптимизация запуска
Параметры запуска
| Параметр | Описание |
|---|---|
-game cstrike | Игра для запуска (обязательно) |
+map | Стартовая карта |
+maxplayers | Максимальное количество игроков (до 64) |
-port | Порт сервера (по умолчанию 27015) |
-ip | IP-адрес, который нужно прослушивать |
-tickrate 100 | Частота симуляции (по умолчанию 66). Увеличивает нагрузку на CPU и требует расширения Tickrate Enabler |
-norestart | Не позволяет скрипту перезапускать сервер в случае остановки (полезно с systemd) |
-console | Запуск в консольном режиме |
-debuglog имя_файла | Записывает отладочную информацию в файл |
-high | Максимальный приоритет для процесса сервера |
-nohltv | Отключает SourceTV |
-nobots | Отключает ботов |
-insecure | Отключает защиту VAC (см. предупреждение ниже) |
+sv_setsteamaccount | Токен GSLT (необязательно, см. соответствующий раздел) |
-insecure отключает защиту VAC: используйте этот параметр только для тестов, он открывает дверь для читеров.
Смена порта
./srcds_run -game cstrike -console +map de_dust2 +maxplayers 24 -port 27016
Не забудьте открыть новый порт в брандмауэре.
Структура файлов
| Путь | Описание |
|---|---|
cstrike/cfg/ | Файлы конфигурации |
cstrike/cfg/server.cfg | Основная конфигурация |
cstrike/cfg/banned_user.cfg | Забаненные игроки (SteamID) |
cstrike/cfg/banned_ip.cfg | Забаненные IP-адреса |
cstrike/maps/ | Установленные карты |
cstrike/addons/ | Расширения (Metamod, SourceMod) |
cstrike/logs/ | Файлы журналов |
Настройка как сервис systemd
Создание файла сервиса
Выйдите и з сессии пользователя css (exit), чтобы вернуться в свою учётную запись администратора, затем создайте файл сервиса:
sudo nano /etc/systemd/system/css.service
Содержимое файла:
[Unit]
Description=Counter-Strike Source Server
After=network.target
[Service]
Type=simple
User=css
Group=css
WorkingDirectory=/home/css/css-server
Environment=TERM=xterm
ExecStart=/home/css/css-server/srcds_run -game cstrike -console -norestart +map de_dust2 +maxplayers 24 -port 27015
Restart=on-failure
RestartSec=20
[Install]
WantedBy=multi-user.target
Активация и запуск сервиса
sudo systemctl daemon-reload
sudo systemctl enable css.service
sudo systemctl start css.service
Команды управления
# Проверить статус
sudo systemctl status css.service
# Остановить сервер
sudo systemctl stop css.service
# Перезапустить сервер
sudo systemctl restart css.service
# Просмотр логов
sudo journalctl -u css.service -f
При использовании systemd консоль сервера не является интерактивной. Для отправки команд используйте RCON из игры или запустите сервер через screen (см. ниже).
Запуск с screen (альтернатива)
Если сервис systemd запущен, сначала остановите его (sudo systemctl stop css.service): два сервера не могут использовать один и тот же порт.
sudo -u css bash
cd ~/css-server
screen -S css
./srcds_run -game cstrike -console +map de_dust2 +maxplayers 24 -port 27015
Для отсоединения: Ctrl+A затем D
Для возврата: screen -r css
Запуск в фоновом режиме с журналом
sudo -u css bash
cd ~/css-server
screen -AdmSL css ./srcds_run -game cstrike -console +map de_dust2 +maxplayers 24 -port 27015
| Опция | Описание |
|---|---|
-A | Подгоняет окно под размер терминала |
-d -m | Запускает сессию в отсоединённом виде, в фоновом режиме |
-S css | Имя сессии |
-L | Записывает вывод сервера в файл журнала |
Файл screenlog.0 создаётся в каталоге, из которого запущена команда (~/css-server), и содержит весь вывод на стороне сервера. Чтобы следить за ним в реальном времени:
tail -f ~/css-server/screenlog.0
При ошибке при запуске это первый файл, который нужно проверить. Чтобы вернуться к консоли сервера: screen -r css
Файл screenlog.0 увеличивается при каждом запуске. Не забывайте регулярно очищать или удалять его.
Обновление сервера
Остановка сервера
sudo systemctl stop css.service
Загрузка новой версии
sudo -u css bash
cd ~/steamcmd
./steamcmd.sh +force_install_dir /home/css/css-server +login anonymous +app_update 232330 validate +quit
exit
Перезапуск сервера
sudo systemctl start css.service
Консольные команды
Эти команды использу ются в консоли сервера или через RCON.
| Команда | Описание |
|---|---|
status | Показывает подключённых игроков и их идентификаторы |
changelevel <map> | Сменить карту |
kick <игрок> | Выгнать игрока |
kickid <userid> | Выгнать игрока по его идентификатору |
banid <minutes> <steamid> kick | Забанить игрока (0 = навсегда) |
writeid | Сохранить список забаненных в banned_user.cfg |
say <message> | Отправить сообщение всем игрокам |
exec server.cfg | Перезагрузить конфигурацию |
quit | Остановить сервер |
Использование RCON из игры
Ваш IP-адрес должен быть разрешён для TCP-порта 27015 в брандмауэре.
В консоли игры (клавиша ² или ~):
rcon_address IP_ВАШЕГО_СЕРВЕРА:27015
rcon_password ВашПароль
rcon status
Автоматическое резервное копирование
Скрипт резервного копирования
sudo nano /home/css/backup.sh
#!/bin/bash
BACKUP_DIR="/home/css/backups"
SERVER_DIR="/home/css/css-server"
DATE=$(date +%Y-%m-%d_%H-%M-%S)
mkdir -p $BACKUP_DIR
# Резервная копия конфигурации
tar -czf $BACKUP_DIR/css_$DATE.tar.gz -C $SERVER_DIR cstrike/cfg
# Удаление резервных копий старше 7 дней
find $BACKUP_DIR -name "css_*.tar.gz" -mtime +7 -delete
echo "Резервное копирование завершено: css_$DATE.tar.gz"
sudo chown css:css /home/css/backup.sh
sudo chmod +x /home/css/backup.sh
Если вы устанавливаете расширения, добавьте cstrike/addons в команду tar.
Планирование резервного копирования
sudo crontab -u css -e
Добавьте:
# Резервное копирование каждый день в 4:00
0 4 * * * /home/css/backup.sh
Подключение к серверу
Игроки могут подключиться следующим образом:
- Запустить Counter-Strike Source
- Открыть консоль игры
- Ввести:
connect IP_ВАШЕГО_СЕРВЕРА:27015 - Если настроен пароль:
password ВашПарольперед подключением
Вы также можете добавить сервер в избранное Steam (меню "Вид", "Сер веры", вкладка "Избранное").
При возникновении проблем
Сервер не запускается
- Проверьте логи:
sudo journalctl -u css.service -n 100 - Убедитесь, что установка завершена (повторно выполните команду
app_update) - Найдите недостающую библиотеку:
ldd ~/css-server/srcds_linux | grep "not found", затем установите соответствующий 32-битный пакет
Предупреждение libtinfo.so.5 или libncurses.so.5
Если сообщение WARNING: Failed to load 32-bit libtinfo.so.5 or libncurses.so.5 появляется при запуске, несмотря на установку зависимосте й, создайте символические ссылки на версии 6:
sudo ln -sf /usr/lib/i386-linux-gnu/libtinfo.so.6 /usr/lib/i386-linux-gnu/libtinfo.so.5
sudo ln -sf /usr/lib/i386-linux-gnu/libncurses.so.6 /usr/lib/i386-linux-gnu/libncurses.so.5
Если файлы .so.6 отсутствуют, сначала установите пакет libncurses6:i386.
Ошибки steamclient.so и steamerrorreporter
Войдите под пользователем css, затем создайте ссылки на файлы SteamCMD:
sudo -u css bash
mkdir -p ~/.steam/sdk32
ln -sf ~/steamcmd/linux32/steamclient.so ~/.steam/sdk32/steamclient.so
ln -sf ~/steamcmd/linux32/steamerrorreporter ~/css-server/bin/steamerrorreporter
exit
Игроки не могут подключиться
-
Проверьте, что порт 27015 открыт по UDP:
sudo ufw statussudo iptables -L INPUT -n --line-numbers | grep 27015sudo nft list ruleset | grep 27015 -
Проверьте, что сервер слушает:
ss -ulnp | grep 27015 -
Протестируйте с другой машины с помощью
nc -zvu IP_ВАШЕГО_СЕРВЕРА 27015
Сервер не появляется в списке
- Убедитесь, что в server.cfg действительно задано
sv_lan 0 - Подождите несколько минут после запуска
- Убедитесь, что у сервера есть доступ в Интернет
- Добавьте токен GSLT с помощью
+sv_setsteamaccount, чтобы сервер отображался в списке публичных серверов
Проблемы с производительностью
- Уменьшите
+maxplayers, если сервер перегружен - Отключите ненужные расширения в
cstrike/addons - Запланируйте регулярные перезапуски
FAQ
Какие порты нужно открыть?
Помимо порта сервера (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
Я получаю "Отказано в доступе" при выполнении ./steamcmd.sh
Примените chmod:
chmod +x /home/css/steamcmd/linux32/steamcmd && chmod +x /home/css/steamcmd/steamcmd.sh
Мой сервер зависает на "Network: IP, mode MP, dedicated Yes, ports 27015 SV / 27005 CL"
Убедитесь, что порт не используется другим процессом:
sudo lsof -i :27015
Если порт свободен, убедитесь, что правила Steam из первого вопроса применены правильно.
Я получаю сообщение "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 css.service