
В предпраздничный сокращённый день с коллегами решили, а чего бы нам немного не погонять в 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-канале ↩
Комментарии (27)

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
04.09.2025 08:20Справедливости ради - в статье рассказывается о закрытом сервере, который не регистрируется на внешних серверах:
sv_dedicated 1
Поэтому те проблемы у него решены.

mrpsycho
04.09.2025 08:20для не предвзятых, можно на самом сервере запустить еще и https://github.com/inolen/quakejs
что поможет создать 1 сервер без нужды скачивать клиенты
PiterP
04.09.2025 08:20JavaScript в данном случае лучше поместить в преисподню... Кто эти люди, которые делают этот ад? Астанавитесь!

artyomsoft
04.09.2025 08:20Спасибо за предоставленную возможность поностальгировать. Помню, как в институте мы маскировали Quake III под Delphi. А сами файлы игры размещали в локальной сети в архиве, который еще специально модифицировали, чтобы админ не догадался.
А есть еще народ, который помнит первый Quake под МS DOS?

CrashLogger
04.09.2025 08:20Не только помню, но и регулярно перепрохожу ) На современных системах в него можно поиграть, установив vkQuake.

artyomsoft
04.09.2025 08:20Я использовал DOSBox и настраивал сеть, когда захотелось по сети с друзьями поиграть.

Yuriy_krd
04.09.2025 08:20А есть еще народ, который помнит первый Quake под МS DOS?
Мы, как Ленин, живее всех живых :)

igrishaev
04.09.2025 08:20На маке приложение не запустилось, потому что было помечено карантином. Чтобы починить, выполните команду
xattr -cr /path/to/ioquake.app

Frankenstine
04.09.2025 08:20Включить firewall UFW, предварительно добавив в него исключения для порта 22 (ssh) и 27960 (quake 3 arena)
А что будет если этого не сделать? Ничего не поменяется. Ну и зачем делать лишние телодвижения? Если порт не слушается никем, то он итак закрыт и без фаерволла. А если вам не нужно пускать кого-то на открытый порт то вам незачем запускать софт который этот порт открывает.
Создать двух пользователей: quake с ограниченными правами, для сервера и q3srv с правами sudo для настройки.
Разве в убунту не создаётся пользователь убунту с sudo правами "искаропки"? Ах да, вы же используете чей-то сервис с кастомной убунтой, по всей видимости.
Настроить ssh: Отключить возможность подключения по ssh от пользователя root. В идеале отключить логин по паролю, оставить только по ключам. Но сие не всегда удобно, поэтому опущу этот момент.
Вот как раз отключать рутовый вход неудобно, а по ключам ходить - удобно. Пароль нужен юзеру (или руту) чтобы залогиниться не по ssh, а в виртуальной локальной консоли, когда сеть сломана или отвалилась.
По итогу, статью можно сократить в три-четыре раза, до небольшой заметки =)

dlinyj
04.09.2025 08:20Настройка Ubuntu сервера занимает всего один абзац. И всё в одном скрипте, так что просто вставил да выполнил.
Но вы всегда можете написать статью лучше и элегантнее :).

MechNIX
04.09.2025 08:20Спасибо за полезную статью, информация собрана в единое целое и систематизирована. Теперь, нужно попробовать настройки, о которых раньше не догадывался, кстати, установив ubuntu, всегда в качестве теста накатываю q3a. В комментариях, тоже полезные советы, действительно ностальгия и желание поэкспериментировать. Статью, однозначно, в закладки:)

13werwolf13
04.09.2025 08:20начал писать большой коментарий с примерами, о том что лучше сервисы запускать в виде systemd служб ограничивая им всё что им не требуется, о том что пользователей для сервисов лучше создавать через sysuser.. но на середине процесса удалил всё что написал. замените кваку на xonotic, получите тот же експириенс от самой игры, только не прийдётся тратить время на всё вышеописанное так как в большинстве дистрибутивов всё уже опакечено, остаётся только установить и запустить.

dlinyj
04.09.2025 08:20Я долгое время играл в nexius и warsow. Последний ещё может и карты кваки устанавливать. Достаточно прикольные две игры, к сожалению, мертвые сервера.
Проблемав том, что кваку все знают, а эти нет

13werwolf13
04.09.2025 08:20Проблемав том, что кваку все знают, а эти нет
может быть я не искушённый игрок, но я не вижу никакой разницы между квакой и ксонотиком в плане игрового процесса.
А можете всё же написать этот гневный комментарий пожалуйста, мне для саморазвития.
ну что вы, он не был гневным.
ну попробую коротко:
1) systemd служба для запуска игрового сервера описывается довольно просто, вот пример для valheim:
[Unit] Description=Valheim dedicated server Wants=network-online.target After=multi-user.target network.target network-online.target [Service] Type=simple User=valheim Group=valheim Environment="LD_LIBRARY_PATH=/var/lib/valheim/linux64" EnvironmentFile=/etc/valheim.conf WorkingDirectory=/var/lib/valheim ExecStartPre=+/usr/bin/steamcmd +login $STEAM_LOGIN +force_install_dir /var/lib/valheim +app_update 896660 validate +exit $ADDITIONAL_STEAMCMD_FLAGS ExecStartPre=+/usr/bin/chown -R valheim:valheim /var/lib/valheim ExecStart=/var/lib/valheim/valheim_server.x86_64 -name $SERVER_NAME -port $PORT -world $WORLD_NAME -password $PASSWORD $ADDITIONAL_FLAGS Restart=always RestartSec=30 TimeoutStartSec=300 NoNewPrivileges=yes PrivateTmp=yes PrivateDevices=yes ProtectKernelTunables=yes ProtectKernelModules=yes ProtectControlGroups=yes ProtectSystem=strict ProtectHome=read-only SystemCallFilter=~@mount ReadWritePaths=/var/lib/valheim [Install] WantedBy=multi-user.targetв случае с квакой вам не понадобится
ExecStartPreиEnvironmentразве что.2) пользователь для службы описывается тоже очень просто:
u valheim - "valheim user" /var/lib/valheim - g valheim - - m valheim valheim3) и даже хомяк для пользователя (он же воркдир для службы) можно описать через tmpfiles:
d /var/lib/valheim 700 valheim valheimкопируем файл службы в
/etc/systemd/system/если руками и в/usr/lib/systemd/system/если опакечиваемкопируем sysuser файл в
/etc/sysusers.d/если руками и в/usr/lib/sysusers.d/если опакечиваемкопируем файл tmpfiles в
/etc/tmpfiles.d/если руками и в/usr/lib/tmpfiles.d/если опакечиваемвообще sysusers и tmpfiles должны отработать автоматически отслеживая path, но для уверенности можно пнуть их руками:
sudo systemd-sysusers && sudo systemd-tmpfiles --createну и запускаем службу и ставим её на автозапуск:
sudo systemctl enable --now ИмяСервиса.serviceпочитать:
systemd-sysusers
systemd-tmpfiles
systemd-service
пример опакеченного мной valheim в OBSвообще магией systemd можно наворотить многое, например выдать сервису отдельный ip и цепочку фаервола, ограничить его потреблением памяти и проца.. конечно всё это можно сделать и без systemd руками, но зачем?

dlinyj
04.09.2025 08:20Большое спасибо. А доступ по ссш будет?

13werwolf13
04.09.2025 08:20а как это вообще связано?
sshd живёт в точно таком же сервисе если что.
dlinyj
04.09.2025 08:20Я о другом, прошу понять правильно, с телефона, надо время для погружения, но это же демонизация сервиса? Раз так, то консоль у демона недоступна. И управлять им по ssh невозможно.

13werwolf13
04.09.2025 08:20лезть по ssh на сервер чтобы выполнить командочку в консольке ioquake3 это уже какой-то оверкил. насколько я помню ioquake3 вполне себе может принимать rcon команды по сети от админа.
впрочем можно извратится запуская сервис внутри systemd в tmux/screen с интерактивом. так делают для сервера terraria потому что там иначе не получится. но имхо это костыли и фу-фу-фу

dlinyj
04.09.2025 08:20Проще говоря, не вариант.
Об rcon описано, но rcon не всё умеет. А иногда надо что-то добавить, попробовать, убрать. Понятно. Пока что tmux и описанный в статье вариант будет удобнее и практичнее.

dlinyj
04.09.2025 08:20А можете всё же написать этот гневный комментарий пожалуйста, мне для саморазвития.
dlinyj
Спасибо за отличную статью! Очень ностальгичненько. Помню, как бесконечно отвисали на серверах Quake III E+. Если кому-то лень там что-то устанавливать и настраивать (firewall всё равно придётся настроить), то вот есть сервант прямо в Docker. Я не пробовал и не знаю, есть ли там ресурсы.
Хотя, конечно же я за классический подход как в статье.
morgot
Excessive plus прям ностальгия ) играл в 2009-2011, жаль сейчас никого нет онлайн..
dlinyj
Я где-то с 2006 по 2010. На madsod, потом на rail немного. Но rail мне уже не нравился.