Skip to main content

Как создать свой сервер Left 4 Dead 2

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

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

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

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

Ресурсы

Указанные ниже ресурсы соответствуют потребностям сервера и не учитывают ресурсы, уже используемые операционной системой, установленным ПО или другими службами на машине. Рассчитывайте на 3–5 Мбит/с на 10 игроков при tickrate 30 и примерно втрое больше при tickrate 100 (требуется расширение Tickrate Enabler для L4D2).

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

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

КомпонентМинимумРекомендуется
RAM2 ГБ4 ГБ
CPU1 ядро2 ядра
Хранилище10 ГБ10 ГБ SSD
Сеть100 Мбит/с500 Мбит/с
Сетевой протокол

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

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

sudo apt update && sudo apt upgrade -y

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

SteamCMD и сервер L4D2 — это 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 lib32z1

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

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

sudo adduser --disabled-password --gecos "" l4d2

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

Откройте порт 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​

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

sudo -u l4d2 bash
cd ~

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

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

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

Запустите установку сервера (идентификатор приложения 222860). Одной команды app_update больше недостаточно для получения работающего сервера L4D2 под Linux: нужно принудительно установить платформу Windows, а затем платформу Linux в одну и ту же папку:

./steamcmd.sh +@sSteamCmdForcePlatformType windows +force_install_dir /home/l4d2/l4d2-server +login anonymous +app_update 222860 validate +quit
./steamcmd.sh +@sSteamCmdForcePlatformType linux +force_install_dir /home/l4d2/l4d2-server +login anonymous +app_update 222860 validate +quit
Совет

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

По завершении появится сообщение Success! App '222860' fully installed.. Проверьте, что скрипт запуска сервера на месте:

ls ~/l4d2-server/srcds_run

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

Файл server.cfg​

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

nano ~/l4d2-server/left4dead2/cfg/server.cfg

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

// Имя сервера
hostname "Мой сервер L4D2"

// Пароль сервера (пусто = публичный)
sv_password ""

// Пароль RCON
rcon_password "ChangeMe"

// Регион сервера
// 0: США (восток)
// 1: США (запад)
// 2: Южная Америка
// 3: Европа
// 4: Азия
// 5: Австралия
// 6: Ближний Восток
// 7: Африка
// 255: весь мир (по умолчанию)
sv_region 3

// 0: сервер виден в Интернете, 1: только локальная сеть
sv_lan 0

// Чит-команды (0 = отключены)
sv_cheats 0

// Разрешает прямое подключение к серверу (без использования лобби)
sv_allow_lobby_connect_only 0

// Теги сервера через запятую (пример: "fr,coop")
//sv_tags "fr,coop"

// Зарезервировать сервер для участников группы Steam
// 1: только участники группы могут видеть сервер и присоединяться к нему
// 0: публичный сервер
// Чтобы использовать, укажите ID вашей группы Steam с помощью sv_steamgroup
sv_steamgroup_exclusive 0
//sv_steamgroup id_группы

// Количество слотов, отображаемых в списке серверов (-1 = реальное количество слотов)
sv_visiblemaxplayers -1

// Сложность зомби: Easy, Normal, Hard, Impossible
z_difficulty normal

// Разрешённые игровые режимы
// Если эта строка не учитывается, необходимо установить SourceMod:
// в этом случае добавьте перед командой sm_cvar (sm_cvar sv_gametypes ...)
sv_gametypes "coop,realism,survival,versus,teamversus,scavenge,teamscavenge,mutation12,right2live"

// Включает голосовую связь на сервере
sv_voiceenable 1

// Разрешает игрокам обеих команд разговаривать друг с другом (0 = нет, 1 = да)
// Если значение равно 1, убедитесь, что sv_voiceenable также равно 1
sv_alltalk 0

// Безопасность RCON
// Длительность бана (в минутах) после неудачных попыток доступа к RCON
sv_rcon_banpenalty 3600

// Максимальное количество неудачных попыток доступа к RCON до бана
sv_rcon_maxfailures 3

// Минимальное количество неудачных попыток доступа к RCON до бана
sv_rcon_minfailures 1

// Период (в секундах), в течение которого учитываются неудачные попытки доступа к RCON
sv_rcon_minfailuretime 10

// Проверка файлов игроков
// Внимание: при использовании пользовательских расширений или кампаний
// эти значения выгоняют игроков, чьи файлы отличаются (установите их в 0)
sv_pure 2
sv_consistency 1

// Выгоняет игроков, у которых нет оригинальных файлов игры
sv_pure_kick_clients 1

// Разрешает (1) или запрещает (0) команду wait в cfg-файлах игроков
sv_allow_wait_command 0

// Включает (1) или отключает (0) отображение сообщения дня (MOTD)
motd_enabled 1

// Логи
log on
sv_logecho 0
sv_logfile 1
sv_log_onefile 0
sv_logbans 1
sv_logflush 0
sv_logsdir logs

// Управление банами
exec banned_user.cfg
exec banned_ip.cfg

// Создаёт указанные выше файлы банов, если они не существуют
writeid
writeip
Прямое подключение

По умолчанию выделенный сервер L4D2 принимает только подключения через лобби. Без строки sv_allow_lobby_connect_only 0 игроки не смогут присоединиться к вашему серверу ни напрямую, ни через список серверов.

Безопасность

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

Игровые режимы и карты​

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

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

РежимОписаниеИгроки
coopКооперативная кампания4
realismКооперативный режим без подсветки и подсказок4
versusВыжившие против заражённых8
survivalВыстоять против волн заражённых4
scavengeСобирать канистры с бензином8

Первая карта каждой кампании​

КампанияСтартовая карта
Dead Centerc1m1_hotel
Dark Carnivalc2m1_highway
Swamp Feverc3m1_plankcountry
Hard Rainc4m1_milltown_a
The Parishc5m1_waterfront
The Passingc6m1_riverbank
The Sacrificec7m1_docks
No Mercyc8m1_apartment
Crash Coursec9m1_alleys
Death Tollc10m1_caves
Dead Airc11m1_greenhouse
Blood Harvestc12m1_hilltop
Cold Streamc13m1_alleys
The Last Standc14m1_junkyard

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

Токен GSLT

Токен GSLT (Game Server Login Token) не является обязательным, но рекомендуется: он позволяет вашему серверу отображаться в публичных серверах Steam.

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

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

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

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

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

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

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

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

cd ~/l4d2-server
./srcds_run -game left4dead2 -console +mp_gamemode coop +map c1m1_hotel +maxplayers 8 -port 27015

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

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

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

ПараметрОписание
-game left4dead2Игра для запуска (обязательно)
+mp_gamemodeИгровой режим при запуске
+mapКарта при запуске
+maxplayersМаксимальное количество игроков
-portПорт сервера (по умолчанию 27015)
-ipIP-адрес для прослушивания
-tickrate 100Частота симуляции (по умолчанию 30). Увеличивает нагрузку на CPU и требует расширения Tickrate Enabler для разблокировки tickrate
-norestartЗапрещает скрипту перезапускать сервер при остановке (полезно с systemd)
-consoleЗапускается в консольном режиме
-debuglog имя_файлаЗаписывает отладочную информацию в файл
-highМаксимальный приоритет для процесса сервера
-insecureОтключает защиту VAC (см. предупреждение ниже)
+sv_setsteamaccountТокен GSLT (необязательно, см. соответствующий раздел)
Параметр -insecure

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

Совет

Не забудьте оставить свободные ресурсы для операционной системы и установленного ПО.

Смена порта​

./srcds_run -game left4dead2 -console +mp_gamemode coop +map c1m1_hotel +maxplayers 8 -port 27016

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

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

ПутьОписание
left4dead2/cfg/Файлы конфигурации
left4dead2/cfg/server.cfgОсновная конфигурация
left4dead2/cfg/banned_user.cfgЗабаненные игроки (SteamID)
left4dead2/cfg/banned_ip.cfgЗабаненные IP-адреса
left4dead2/addons/Расширения и пользовательские кампании
left4dead2/logs/Файлы логов

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

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

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

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

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

[Unit]
Description=Left 4 Dead 2 Server
After=network.target

[Service]
Type=simple
User=l4d2
Group=l4d2
WorkingDirectory=/home/l4d2/l4d2-server
Environment=TERM=xterm
ExecStart=/home/l4d2/l4d2-server/srcds_run -game left4dead2 -console -norestart +mp_gamemode coop +map c1m1_hotel +maxplayers 8 -port 27015
Restart=on-failure
RestartSec=20

[Install]
WantedBy=multi-user.target

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

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

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

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

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

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

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

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

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

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

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

sudo -u l4d2 bash
cd ~/l4d2-server
screen -S l4d2
./srcds_run -game left4dead2 -console +mp_gamemode coop +map c1m1_hotel +maxplayers 8 -port 27015

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

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

Запуск в фоновом режиме с записью лога​

sudo -u l4d2 bash
cd ~/l4d2-server
screen -AdmSL l4d2 ./srcds_run -game left4dead2 -console +mp_gamemode coop +map c1m1_hotel +maxplayers 8 -port 27015
ОпцияОписание
-AПодгоняет окно под размер терминала
-d -mЗапускает сессию в отсоединённом виде, в фоновом режиме
-S l4d2Имя сессии
-LЗаписывает вывод сервера в файл лога

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

tail -f ~/l4d2-server/screenlog.0

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

Совет

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

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

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

sudo systemctl stop l4d2.service

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

Как и при установке, обновите платформу Windows, затем платформу Linux:

sudo -u l4d2 bash
cd ~/steamcmd
./steamcmd.sh +@sSteamCmdForcePlatformType windows +force_install_dir /home/l4d2/l4d2-server +login anonymous +app_update 222860 validate +quit
./steamcmd.sh +@sSteamCmdForcePlatformType linux +force_install_dir /home/l4d2/l4d2-server +login anonymous +app_update 222860 validate +quit
exit

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

sudo systemctl start l4d2.service

Консольные команды​

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

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

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

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

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

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

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

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

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

mkdir -p $BACKUP_DIR

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

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

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

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

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

sudo crontab -u l4d2 -e

Добавьте:

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

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

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

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

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

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

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

  • Проверьте логи: sudo journalctl -u l4d2.service -n 100
  • Убедитесь, что установка завершена (повторно выполните обе команды app_update) и что файл ~/l4d2-server/srcds_run существует
  • Найдите отсутствующую библиотеку: ldd ~/l4d2-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​

Подключитесь как пользователь l4d2, затем создайте ссылки на файлы SteamCMD:

sudo -u l4d2 bash
mkdir -p ~/.steam/sdk32
ln -sf ~/steamcmd/linux32/steamclient.so ~/.steam/sdk32/steamclient.so
ln -sf ~/steamcmd/linux32/steamerrorreporter ~/l4d2-server/bin/steamerrorreporter
exit

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

  • Проверьте, что sv_allow_lobby_connect_only 0 задан в server.cfg

  • Проверьте, что порт 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

Сервер не появляется в списке​

  • Проверьте, что sv_lan 0 действительно задан в server.cfg
  • Проверьте, что sv_steamgroup_exclusive равен 0 (при 1 сервер зарезервирован для участников группы Steam)
  • Подождите несколько минут после запуска
  • Проверьте, что у сервера есть доступ в Интернет
  • Добавьте токен GSLT с помощью +sv_setsteamaccount, чтобы сервер отображался в публичных серверах

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

  • Удалите опцию -tickrate, если вы её увеличивали
  • Отключите ненужные расширения в left4dead2/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

Я получаю "Permission denied" при выполнении ./steamcmd.sh​

Примените chmod:

chmod +x /home/l4d2/steamcmd/linux32/steamcmd && chmod +x /home/l4d2/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 l4d2.service