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

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


  1. dlinyj
    04.09.2025 08:20

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

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


    1. morgot
      04.09.2025 08:20

      Excessive plus прям ностальгия ) играл в 2009-2011, жаль сейчас никого нет онлайн..


      1. dlinyj
        04.09.2025 08:20

        Я где-то с 2006 по 2010. На madsod, потом на rail немного. Но rail мне уже не нравился.


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


    1. dlinyj
      04.09.2025 08:20

      Справедливости ради - в статье рассказывается о закрытом сервере, который не регистрируется на внешних серверах:

      sv_dedicated 1

      Поэтому те проблемы у него решены.


    1. greenork
      04.09.2025 08:20

      Онлайн за все время заметно упал

      я ушел в quakelive и возвращаться в q3 не вижу ни единой причины


      1. dlinyj
        04.09.2025 08:20

        А он живой?


  1. mrpsycho
    04.09.2025 08:20

    для не предвзятых, можно на самом сервере запустить еще и https://github.com/inolen/quakejs
    что поможет создать 1 сервер без нужды скачивать клиенты


    1. PiterP
      04.09.2025 08:20

      JavaScript в данном случае лучше поместить в преисподню... Кто эти люди, которые делают этот ад? Астанавитесь!


  1. artyomsoft
    04.09.2025 08:20

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

    А есть еще народ, который помнит первый Quake под МS DOS?


    1. CrashLogger
      04.09.2025 08:20

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


      1. artyomsoft
        04.09.2025 08:20

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


    1. Yuriy_krd
      04.09.2025 08:20

      А есть еще народ, который помнит первый Quake под МS DOS?

      Мы, как Ленин, живее всех живых :)


  1. igrishaev
    04.09.2025 08:20

    На маке приложение не запустилось, потому что было помечено карантином. Чтобы починить, выполните команду

    xattr -cr /path/to/ioquake.app
    


  1. Frankenstine
    04.09.2025 08:20

    Включить firewall UFW, предварительно добавив в него исключения для порта 22 (ssh) и 27960 (quake 3 arena)

    А что будет если этого не сделать? Ничего не поменяется. Ну и зачем делать лишние телодвижения? Если порт не слушается никем, то он итак закрыт и без фаерволла. А если вам не нужно пускать кого-то на открытый порт то вам незачем запускать софт который этот порт открывает.

    Создать двух пользователей: quake с ограниченными правами, для сервера и q3srv с правами sudo для настройки.

    Разве в убунту не создаётся пользователь убунту с sudo правами "искаропки"? Ах да, вы же используете чей-то сервис с кастомной убунтой, по всей видимости.

    Настроить ssh: Отключить возможность подключения по ssh от пользователя root. В идеале отключить логин по паролю, оставить только по ключам. Но сие не всегда удобно, поэтому опущу этот момент.

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

    По итогу, статью можно сократить в три-четыре раза, до небольшой заметки =)


    1. dlinyj
      04.09.2025 08:20

      Настройка Ubuntu сервера занимает всего один абзац. И всё в одном скрипте, так что просто вставил да выполнил.

      Но вы всегда можете написать статью лучше и элегантнее :).


  1. MechNIX
    04.09.2025 08:20

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


  1. 13werwolf13
    04.09.2025 08:20

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


    1. dlinyj
      04.09.2025 08:20

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

      Проблемав том, что кваку все знают, а эти нет


      1. 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 valheim
        

        3) и даже хомяк для пользователя (он же воркдир для службы) можно описать через 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 руками, но зачем?


        1. dlinyj
          04.09.2025 08:20

          Большое спасибо. А доступ по ссш будет?


          1. 13werwolf13
            04.09.2025 08:20

            а как это вообще связано?
            sshd живёт в точно таком же сервисе если что.


            1. dlinyj
              04.09.2025 08:20

              Я о другом, прошу понять правильно, с телефона, надо время для погружения, но это же демонизация сервиса? Раз так, то консоль у демона недоступна. И управлять им по ssh невозможно.


              1. 13werwolf13
                04.09.2025 08:20

                лезть по ssh на сервер чтобы выполнить командочку в консольке ioquake3 это уже какой-то оверкил. насколько я помню ioquake3 вполне себе может принимать rcon команды по сети от админа.

                впрочем можно извратится запуская сервис внутри systemd в tmux/screen с интерактивом. так делают для сервера terraria потому что там иначе не получится. но имхо это костыли и фу-фу-фу


                1. dlinyj
                  04.09.2025 08:20

                  Проще говоря, не вариант.

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


    1. dlinyj
      04.09.2025 08:20

      А можете всё же написать этот гневный комментарий пожалуйста, мне для саморазвития.


    1. dlinyj
      04.09.2025 08:20

      Кстати,xonitic это тот же nexius, только более тормозной