
В предпраздничный сокращённый день с коллегами решили, а чего бы нам немного не погонять в Quake III Arena. Игруха кроссплатформенная, легко устанавливается и можно прекрасно помеситься.
После такого замеса нам захотелось по вечерам дома, дабы после работы не задерживаться. Поэтому было принято соломоново решение сделать свой сервант для игр и сваять инструкцию для установки Quake III на все используемые домашние системы. Таким образом, и родилась эта статья.
❯ План работ
Для того чтобы создать свой сервер опишу план предстоящих работ.
1. Найти где создать сервер на Ubuntu 20.04.
2. Включить firewall UFW, предварительно добавив в него исключения для порта 22 (ssh) и 27960 (quake 3 arena). Если вы планируете несколько серверов, то надо добавить исключения и для этих портов (27961, 27962...)
3. Создать двух пользователей: quake с ограниченными правами, для сервера и q3srv с правами sudo для настройки.
4. Настроить ssh: Отключить возможность подключения по ssh от пользователя root. В идеале отключить логин по паролю, оставить только по ключам. Но сие не всегда удобно, поэтому опущу этот момент.
5. Установить ioquake3-server.
6. Скопировать оригинальные ресурсы *.pk3 с компакт-диска или скачать их с интернета
7. Настроить игровой сервер.
8. …
9. Наслаждаться игрой.
❯ Выбор сервера
Выбор, где размещать свой сервер не стоит, конечно же, у timeweb :). Тем более что для нашей древней игрушки подойдёт самый бюджетный сервер. Сервант сто́ит выбирать там, где будет больше всего игроков, иначе будет очень большой пинг. Если игроки в Москве, то сто́ит взять его в Москве.

Если отключить бекапы (они в нашем случае не нужны, сервак можно легко и просто развернуть заново), то, выходит, всего 300 рублей в месяц.
После непродолжительного создания самого виртуального сервера у нас будет IP и пароль. После чего можем начать конфигурировать его по ssh.

❯ Конфигурирование игрового сервера
Подключаемся по ssh, благо это можно сделать даже в современном Windows через cmd.
Инструкция по настройке очень краткая, в конце статьи я дам ссылки с пояснениями. В принципе это всё можно просто скопировать в bash-скрипт и исполнить на сервере под root.
# настройка firewall
# Добавляем правила для SSH (порт 22) и Quake 3 Arena (порт 27960)
ufw allow ssh
ufw allow 27960
# Включаем firewall UFW
ufw enable
# Проверяем статус firewall
ufw status
# Создаём пользователя quake с ограниченными правами
adduser quake
# Создаём пользователя q3srv
adduser q3srv
# Добавляем пользователя q3srv в группу sudo для получения прав администратора
usermod -aG sudo q3srv
# Проверяем, что пользователи созданы корректно
id quake
id q3srv
# Создаём резервную копию конфигурации SSH
cp /etc/ssh/sshd_config /etc/ssh/sshd_config.backup
# Отключаем возможность входа root через SSH
sed -i 's/#PermitRootLogin yes/PermitRootLogin no/' /etc/ssh/sshd_config
sed -i 's/PermitRootLogin yes/PermitRootLogin no/' /etc/ssh/sshd_config
# Проверяем, что изменение применилось
grep "PermitRootLogin" /etc/ssh/sshd_config
# Перезапускаем службу SSH для применения изменений
systemctl restart ssh
# Проверяем статус службы SSH
systemctl status ssh
apt update && apt install mc tmux ioquake3-server
Сервер настроен, осталось запустить и настроить игровой сервант.
❯ Базовая настройка Quake III сервера
Установить из репозиториев ioquake3-server недостаточно, нужно ещё ему подкинуть ресурсы игры. А именно папку baseq3 с вашего диска, которая содержит файлы pak*.pk3. Ресурсы можно легко найти в интернете, но поскольку это всё же коммерческая часть, я не буду рассказывать, откуда их брать. Будем считать, что у вас есть лицензионный диск (есть же, да? :) ), откуда вы всё перепишете.
В общем, содержимое папки baseq3 оригинального quake надо переписать на сервер:
ssh quake@ipsrv mkdir -p /home/quake/.q3a/
scp -r <path to baseq3>/baseq3 quake@ipsrv:/home/quake/.q3a/
Всё, уже на этом этапе можно запустить сервер и чуток погонять, удобно сервер делать в tmux чтобы консольный процесс оставался доступен и после завершения сессии ssh:
tmux
Дальше просто запускается:
/usr/lib/ioquake3/ioq3ded
И в выпадающей консоли игры уже написать имя карты на которой хочется играть:
map q3dm1
Вот с этого момента уже можно гонять с друзьями, просто подключаясь по ssh и меняя карты.
Для того чтобы подключиться к серверу, нужно в консоли клиента написать:
/connect ipsrv:27960
Всё, рассылаете своим друзьям эту команду и можно бежать играть.
Сервер легко администрируется через ssh. Команды управления сервером можно легко найти в интернете. Но в какой-то момент хочется сделать у сервера имя, некоторую ротацию карт, добавить возможность добавления/удаления ботов и, главное — дать людям удалённое управление именно игровым сервером. Это всё уже более углублённые настройки, которые тоже легко реализуются.
❯ Продвинутая настройка Quake III сервера
В принципе можно все эти настройки сделать вручную в консоли сервера, но все они потеряются при следующем перезапуске, поэтому лучше всего создать конфиг-файл с именем server.cfg в папке home/quake/.q3a/baseq3, следующего содержания:
seta sv_hostname "^7Server ^1for ^6Best ^4Friends"
seta sv_dedicated 1
seta g_gametype 0
fraglimit 20
timelimit 10
set d1 "map q3dm1 ; set nextmap vstr d2"
set d2 "map q3dm17 ; set nextmap vstr d3"
set d3 "map q3tourney4 ; set nextmap vstr d4"
set d4 "map q3tourney5 ; set nextmap vstr d1"
vstr d1
rconPassword rconpasswd
Краткое пояснение:
sv_hostname — это имя сервера, которое будет отображаться на публичных серверах quake.
sv_dedicated 1 — выделенный личный сервер, который не регистрируется наверху, если хотите других игроков, то ставьте ноль. Раньше сразу приходило куча народу, сейчас тишина.
g_gametype 0 — тип игры free for all. Цифры задают тип игры, это самый простой и популярный.
fraglimit и timelimit — соответственно, лимит фрагов и времени в минутах.
Большая сложная конструкция — это скрипт ротации карт, логика его работы понятна и так. Если нужно больше карт, просто увеличивается метки d* и прописываете дальше, какая карта должна быть, и в конце надо вернуться на метку d1.
rconPassword — это задание пароля rcon для управления сервером из консоли игры. Более подробно можно на русском почитать тут .
Далее наше сервер запускаем следующей командой:
/usr/lib/ioquake3/ioq3ded +exec server.cfg
В целом там много чего можно накрутить, но не буду переусложнять статью, для базово поиграть вечером этого хватит с лихвой.
Для того, чтобы начать управление сервером, после подключения на клиенте надо ввести:
\rconPassword rconpasswd
И потом:
\rcon map q3dm17 // например, для смены карты
Таким образом, игрой может управлять любой, у кого есть rcon-пароль. Напомню, что в quake есть автодополнение по tab.

Quake III отличная игра, которая работает просто на всех платформах. Можно даже на Android или iPhone телефоне, подключив клавиатуру и мышку, сыграть на этом сервере. Но я всё же расскажу, как установить на обычные ПК эту крутую игрушку.
❯ Установка клиентской игры
Так уж получилось, что у всех разные системы, на которых мы собираемся играть. У меня Linux, у кого-то Windows, у кого-то MacOS. И везде оказались свои тонкости и приколы по установке. Поэтому специально подготовил готовую инструкцию для каждого случая.
В принципе, забегая вперёд, достаточно будет подготовить единую сборку, которую можно всем рассылать, и она будет вполне корректно везде работать (кроме MacOS). Но, всё же расскажу классический способ установки.
Linux (Ubuntu, Mint)
На мой взгляд, самый простой способ установки, это скачать сборку ioquake прямо с сайта https://ioquake3.org/ . Распаковать её, и закинуть в папку baseq3 файлы pak0.pk3-pak8.pk3.
Можно по аналогии, как выше я рассказывал об установке сервера, установить клиента. В любом случае все конфиги ваши будут храниться в ~/.q3a/.
Достаточно запустить игру командой:
./ioquake3.x86_64
И наслаждаться ей. Но, внезапно столкнулся с особенностями ввода мыши в Linux. В нормальном таком замесе, при резком повороте мышь оказывалась где угодно, но совсем не там куда ты её направил.
Для этого нужно настроить raw input. Всё проделывал в Linux Mint:
Установка драйвера edev:
sudo apt install xserver-xorg-input-evdev
Проверяю, что драйвер установлен:
apt list --installed | grep evdev
Далее создаю следующий конфиг:
sudo mkdir -p /etc/X11/xorg.conf.d
sudo nano /etc/X11/xorg.conf.d/50-mouse-evdev.conf
Такого содержания:
Section "InputClass"
Identifier "My Mouse"
MatchIsPointer "yes"
Driver "evdev"
Option "AccelerationProfile" "-1"
Option "AccelerationScheme" "none"
Option "AccelSpeed" "-1"
# Отключаем эмуляцию средней кнопки мыши
Option "Emulate3Buttons" "false"
EndSection
Последний момент важный. У меня стоит прыжок на правую кнопку мыши, а стрелять на левую. Поэтому если хочется сделать rocket jump, то получается эмуляция третьей кнопки мыши и получается просто zoom.
Всё, у нас теперь чистый ввод, и можно устраивать честный замес, без всяких прослоек, которые ведут курсор в неизвестном направлении.
Windows
C Windows установка самая простая. Также скачиваем с https://ioquake3.org/ сборку для винды, распаковываем её в удобное место и закидываем в папку baseq3 файлы pak0.pk3-pak8.pk3. Всё можно играть.
Единственное, что на одной системе столкнулся с тем игра отказывалась запускаться, так как ресурсы лежать не по тому пути. Пришлось папку baseq3 со всеми паками переписать по пути:
C:\Users\%USERNAME%\AppData\Roaming\Quake3\baseq3
Не факт, что у вас такое встретиться. Но если что, вот рецепт.
MacOS
С этой системой пришлось повозиться, как-то дружба с маком у меня не задалась. Но тем не менее смог победить и это. Всё, что описывается ниже, проверялось на Macbooc Air M1.
Сначала я пытался также скачать с официального сайта, но так и не смог победить эту надпись:

Поэтому решил применить *nix way на Маке, и он сработал.
Устанавливаем ioquake3 с помощью brew:
brew install ioquake3
После этого, оригинальные паки (всю ту же злополучную папку baseq3 с файлами pak0.pk3-pak8.pk3) нужно переписать в
/Users/macbookair/Library/Application Support/Quake3
Долго искал, в какую точно папку это разместить (по инструкции на сайте папка указана другая), с этой всё запускается.
И всё работает! Полный экран я так и не понял, как сделать (через настройки игры не выходит), но всё работает и можно играть!

❯ Выводы
Не зря сделал эти все инструкции для друзей, в действительности теперь каждый вечер идёт весёлый замес и можно как раньше отвести душу, постепенно повышая скилы.
Иногда смотришь, а товарищ что-то фигово играет, а, оказывается, ему котёнок помогает играть (это реально присланное видео):
Конечно после игры с друзьями захочется накидать уже других модов, таких как cpma или defrag для олдфажников, но всё это делается уже по аналогии и достаточно просто. Самое приятное, что моды можно поставить только на сервант, а клиент уже сам подхватит. Короче говоря, есть почва, где поразвлекаться и вспомнить молодость.
❯ Полезные ссылки
Новости, обзоры продуктов и конкурсы от команды Timeweb.Cloud — в нашем Telegram-канале ↩
Комментарии (2)
begin_end
04.09.2025 08:20Я вот тоже держу сервера Quake 3 в локации Беларуси, где-то с 2009 года, теперь последние там. Онлайн за все время заметно упал, но до сих пор несколько раз в день кто-то заходит. Правда сервера же мультиплеерные, а с ботами одному скучно.
Базирую сервера не на ioquake, а на ExcessivePlus.Могу добавить пару замечаний к статье - чтобы сервер видело больше игроков из разных сообществ и модов, желательно добавить побольше мастер-серверов в список, для более широкого анонса сервера.
Как минимум 3 основных мастера должны быть в конфиге (последний, думаю, будет по дефолту):set sv_master1 "master0.excessiveplus.net:27950" //мастер e+ мода set sv_master2 "master.quake3arena.com:27950" //мастер официальной игры // (неужели его до сих пор держит компания - текущий владелец???) set sv_master3 "master.ioquake3.org:27950" //мастер ioquake мода
Также в протоколе мастер-клиент (уже не помню точное название, но оно у него когда-то было, этот стандарт применялся не только для Quake, но и многих других игр того периода), относящемся к вышеупомянутому анонсированию сервера в мастер-серверах и отображению в списках игровых серверов клиента есть уязвимость. Она позволяет проводить DOS-атаки через амплификацию трафика посредством UDP пакетов с игровыми getstatus/getinfo запросами, с подменой IP отправителя (становится жертвой-получателем). Для защиты от этого профессиональные проекты имели некие продвинутые скрипты/конфиги для *nix файерволов, например iptables. Также в некоторые игровые моды (в ioquake - точно) была встроена защита от этой атаки, но она недостаточна. Я адепт windows-хостинга и в этом случае писал собственный файервол, который при превышении числа запросов getstatus/getinfo в секунду на IP помещал таковой IP в список блокировки. Конкретно для держателя сервера уязвимость неприятна прежде всего высокой нагрузкой на процессор и сеть, что отрицательно сказывается на качестве игры (лаги, пинг).
dlinyj
Спасибо за отличную статью! Очень ностальгичненько. Помню, как бесконечно отвисали на серверах Quake III E+. Если кому-то лень там что-то устанавливать и настраивать (firewall всё равно придётся настроить), то вот есть сервант прямо в Docker. Я не пробовал и не знаю, есть ли там ресурсы.
Хотя, конечно же я за классический подход как в статье.