В предпраздничный сокращённый день с коллегами решили, а чего бы нам немного не погонять в 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 для олдфажников, но всё это делается уже по аналогии и достаточно просто. Самое приятное, что моды можно поставить только на сервант, а клиент уже сам подхватит. Короче говоря, есть почва, где поразвлекаться и вспомнить молодость.

❯ Полезные ссылки

  1. Настройка фаервола в Ubuntu с помощью утилиты UFW

  2. Как создать нового пользователя с поддержкой sudo в Ubuntu

  3. Как установить и настроить SSH в Ubuntu 22.04

  4. Настройка ключей SSH в Ubuntu

  5. Сборка Quake III Arena использованная в статье

  6. Installing a Quake III Arena dedicated server


Новости, обзоры продуктов и конкурсы от команды Timeweb.Cloud — в нашем Telegram-канале

Комментарии (2)


  1. dlinyj
    04.09.2025 08:20

    Спасибо за отличную статью! Очень ностальгичненько. Помню, как бесконечно отвисали на серверах Quake III E+. Если кому-то лень там что-то устанавливать и настраивать (firewall всё равно придётся настроить), то вот есть сервант прямо в Docker. Я не пробовал и не знаю, есть ли там ресурсы.

    Хотя, конечно же я за классический подход как в статье.


  1. 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 в список блокировки. Конкретно для держателя сервера уязвимость неприятна прежде всего высокой нагрузкой на процессор и сеть, что отрицательно сказывается на качестве игры (лаги, пинг).