Свой сервер Rust - это не просто очередная коробка в облаке, а живой организм со своей экономикой, ритмом вайпов и характером. Сборка такой машины на Linux требует чуть больше усилий, чем кнопка "арендовать у хостера", зато даёт полный контроль над модами, плагинами и поведением мира при волне в две сотни игроков. Ниже разложен путь от чистой Ubuntu до сервера, который сам обновляется, регулярно вайпается по расписанию и держит удар, когда конкуренты решают устроить ему весёлую ночь под потоком мусорного трафика.
Подготовка Linux окружения и базовые требования к железу под полноценный сервер Rust
Rust симулирует сразу всё. Физику предметов, NPC, распад построек, постоянный открытый мир и тысячи активных entity. Любая попытка сэкономить на железе быстро превращается в десинк, зависшие катушки и сбежавших игроков. Свежесгенерированная карта 3 на 3 километра стартует с двумя гигабайтами оперативной памяти, но через неделю активной игры с рейдами и фермами счётчик уверенно уходит за 6-12 ГБ. Запас в 2-4 ГБ под систему оставлять обязательно, иначе ядро прибьёт процесс при первом всплеске.
Разумная конфигурация выглядит так. Современный шестиядерный CPU с высокой одноядерной производительностью, 16 ГБ памяти под средний сервер и обязательный NVMe-диск. HDD здесь - билет в ад постоянных лагов сохранения. Сеть желательна с гарантированным каналом не меньше гигабита и провайдером, который умеет в фильтрацию трафика на своей стороне. Бытовое подключение из квартиры под публичный сервер брать нельзя категорически. Первая же атака уронит не сервер, а домашний роутер вместе с интернетом всей семьи.
Базовая подготовка системы делается за пару минут. Сначала обновляются пакеты и подключается мультивёрс с архитектурой i386, без которой SteamCMD просто не запустится:
sudo apt update && sudo apt upgrade -y
sudo add-apt-repository multiverse
sudo dpkg --add-architecture i386
sudo apt update
sudo apt install -y lib32gcc-s1 curl unzip tmux nano
Дальше создаётся отдельный системный пользователь, под которым будет жить всё хозяйство:
sudo useradd -m -s /bin/bash steam
sudo passwd steam
Установка SteamCMD и загрузка серверных файлов через официальный репозиторий Valve
SteamCMD - это командный клиент Steam, через который скачиваются и обновляются файлы любого выделенного сервера. Идентификатор приложения Rust фиксированный, его стоит запомнить - 258550. Вход выполняется анонимно, никакого аккаунта Steam не требуется. Все действия выполняются от имени созданного пользователя:
su - steam
mkdir -p ~/steamcmd && cd ~/steamcmd
wget https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz
tar -xvzf steamcmd_linux.tar.gz
chmod +x steamcmd.sh
Сама загрузка серверных файлов запускается одной строкой. Объём - около 8 ГБ, на быстром канале процесс займёт несколько минут:
./steamcmd.sh +force_install_dir /home/steam/rust-server +login anonymous +app_update 258550 validate +quit
Параметр validate стоит держать всегда. Он сверяет контрольные суммы и переустанавливает повреждённые файлы. Лишняя минута проверки часто спасает от загадочных крашей, причину которых потом ищут сутками. Если хочется попробовать staging-ветку с обкаткой будущих обновлений, в команду добавляется -beta staging, но публичный сервер на ней лучше не держать.
Настройка стартового скрипта с подбором seed карты и параметров мира
Сервер запускается через bash-скрипт с длинным набором флагов. Файл удобно положить рядом с исполняемым файлом, в /home/steam/rust-server/start.sh:
#!/bin/bash
cd /home/steam/rust-server
while :
do
exec ./RustDedicated -batchmode -nographics \
+server.port 28015 \
+server.identity "rust1" \
+server.hostname "Rust Server" \
+server.description "Welcome" \
+server.url "https://example.com" \
+server.maxplayers 100 \
+server.worldsize 3500 \
+server.seed 12345 \
+server.saveinterval 300 \
+server.tickrate 30 \
+rcon.port 28016 \
+rcon.password "длинный_сложный_пароль" \
+rcon.web 1
echo "Server crashed, restarting in 10 seconds..."
sleep 10
done
Размер карты worldsize стоит выбирать осознанно. Значение 3000-3500 даёт комфортное соотношение площади и производительности под сотню игроков. Карты на 4500 и выше требуют уже 32+ ГБ оперативки и заметно нагружают процессор при генерации. Параметр seed отвечает за уникальность мира. Многие администраторы прогоняют десяток сидов через сервис RustMaps, прежде чем запустить вайп, чтобы получить хорошую раскладку монументов.
Tickrate имеет смысл оставить на 30 для ваниллы и поднять до 60 на боевых режимах вроде combat-серверов. Tickrate 100 встречается в маркетинговых описаниях, но без серьёзной оптимизации он только ест CPU. Пароль RCON выбирается сложный, не короче двадцати символов, и хранится в менеджере паролей. Слитый RCON - это конец сервера за один вечер.
Подключение Oxide и uMod для расширения сервера плагинами под любые задачи
Ваниль хороша для пуристов, но большинство сообществ работает на модифицированных серверах. Oxide, переименованный в uMod, остаётся главной платформой для плагинов в Rust на протяжении многих лет. Установка занимает буквально две команды. Главное условие - находиться в корневой директории сервера:
cd /home/steam/rust-server
wget https://umod.org/games/rust/download/develop -O Oxide-Rust_Linux.zip
unzip -o Oxide-Rust_Linux.zip
chmod +x CSharpCompiler
После перезапуска сервера в директории oxide появятся подпапки plugins, config, data и lang. Плагины раскладываются по папке plugins одним движением, конфиги создаются автоматически при первом запуске. Популярный набор для среднего сервера выглядит примерно так:
- Kits для выдачи стартовых наборов и привилегий донатерам
- ZoneManager для разметки безопасных и PvP-зон
- BetterChat для красивого форматирования сообщений
- AdminMenu для удобной модерации без RCON
- Backups для автоматических резервных копий мира
Важный нюанс. После каждого обновления Rust через SteamCMD библиотеку Oxide необходимо переустанавливать. Старая версия часто отказывается работать с новым клиентом и валит сервер при загрузке. Поэтому в сценарий обновления всегда вписывается шаг перекачки и распаковки свежего архива uMod, иначе сервер встанет колом ровно в момент очередного апдейта.
Автоматизация регулярных wipe операций через cron и продуманные скрипты
Rust живёт циклами. Карта вайпается раз в неделю или две, чертежи - раз в месяц или сезон. Без автоматизации администратор превращается в дежурного по будильнику, что долго не выдерживает никто. Скрипт wipe.sh кладётся рядом с сервером и решает задачу одним движением. Логика простая. За две минуты до вайпа объявляется в чат, сервер штатно останавливается, удаляются файлы карты и при необходимости чертежей, генерируется новый seed, обновляются файлы Rust и Oxide, сервер поднимается заново.
Файлы карты лежат в server/identity/ и заканчиваются на .sav и .map. Чертежи хранятся в player.blueprints.X.db. Полный wipe удаляет оба набора, частичный - только карту. Запуск скрипта вешается на cron, например на каждый четверг в 19:00 по UTC, что соответствует традиционному времени вайпа в сообществе Rust:
0 19 * * 4 /home/steam/wipe.sh map >> /home/steam/wipe.log 2>&1
Полный вайп раз в месяц делается тем же скриптом с параметром full. Системный сервис minecraft, простите, RustDedicated, поднимается через systemd и перезапускается командой systemctl restart. Юнит-файл создаётся в /etc/systemd/system/rust.service и описывает запуск из tmux-сессии, чтобы консоль оставалась доступной для ручных команд. Restart=always и RestartSec=20 гарантируют, что сервер вернётся в строй после любого падения.
Эшелонированная защита от DDoS атак на сетевом и системном уровне
Сервер Rust привлекает атаки как мёд пчёл. Конкуренты, обиженные забаненные игроки, скрипт-кидди с купленным за десять долларов бутером в Telegram. Один большой удар способен вывести машину из строя за секунды, поэтому защита строится слоями. Первый и самый эффективный слой - провайдерская фильтрация. Серьёзные хостинги с пропускной способностью 1+ Тбит/с поглощают волну ещё до того, как она доходит до сервера. Без такой подложки никакие локальные правила не спасут от современной атаки в десятки гигабит.
Второй слой - правила nftables на самой машине. Здесь работает простой принцип. Чем раньше отбрасывается мусорный пакет, тем меньше ресурсов он сожжёт. Цепочка PREROUTING в таблице raw обрабатывается ещё до conntrack и идеально подходит для дропа очевидно битых пакетов. Игровой порт UDP 28015 открывается всем, но с ограничением скорости новых соединений с одного источника. Порт RCON 28016 закрывается полностью и пускается только через SSH-туннель.
Полезно ограничить SSH доверенными адресами или хотя бы сменить порт с 22 на нестандартный, отключить вход по паролю и оставить только ключи. Установка fail2ban отбивает перебор, а sysctl-параметры вроде net.ipv4.tcp_syncookies=1 и увеличенный backlog очереди дают системе время отдышаться при флуде. Регулярные бэкапы папок server и oxide на отдельное хранилище превращают любую катастрофу в рабочий момент - сервер поднимется из снапшота за полчаса.
Что в итоге собирается у того, кто прошёл этот путь. Сервер, который сам обновляется, сам вайпается по расписанию, сам перезапускается после падения и стоит на ногах под атаками средней руки. Такой стек выдерживает амбициозные сборки на сотню активных игроков, чинится одним взглядом в логи и расширяется без переустановки. Главное - каждый шаг прозрачен, каждый файл на своём месте, и владелец знает свой сервер до последнего параметра.