Comments 34
Спасибо за отличную статью! Очень ностальгичненько. Помню, как бесконечно отвисали на серверах Quake III E+. Если кому-то лень там что-то устанавливать и настраивать (firewall всё равно придётся настроить), то вот есть сервант прямо в Docker. Я не пробовал и не знаю, есть ли там ресурсы.
Хотя, конечно же я за классический подход как в статье.
Я вот тоже держу сервера 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 в список блокировки. Конкретно для держателя сервера уязвимость неприятна прежде всего высокой нагрузкой на процессор и сеть, что отрицательно сказывается на качестве игры (лаги, пинг).
Справедливости ради - в статье рассказывается о закрытом сервере, который не регистрируется на внешних серверах:
sv_dedicated 1
Поэтому те проблемы у него решены.
Онлайн за все время заметно упал
я ушел в quakelive и возвращаться в q3 не вижу ни единой причины
А он живой?
для не предвзятых, можно на самом сервере запустить еще и https://github.com/inolen/quakejs
что поможет создать 1 сервер без нужды скачивать клиенты
Спасибо за предоставленную возможность поностальгировать. Помню, как в институте мы маскировали Quake III под Delphi. А сами файлы игры размещали в локальной сети в архиве, который еще специально модифицировали, чтобы админ не догадался.
А есть еще народ, который помнит первый Quake под МS DOS?
На маке приложение не запустилось, потому что было помечено карантином. Чтобы починить, выполните команду
xattr -cr /path/to/ioquake.app
Включить firewall UFW, предварительно добавив в него исключения для порта 22 (ssh) и 27960 (quake 3 arena)
А что будет если этого не сделать? Ничего не поменяется. Ну и зачем делать лишние телодвижения? Если порт не слушается никем, то он итак закрыт и без фаерволла. А если вам не нужно пускать кого-то на открытый порт то вам незачем запускать софт который этот порт открывает.
Создать двух пользователей: quake с ограниченными правами, для сервера и q3srv с правами sudo для настройки.
Разве в убунту не создаётся пользователь убунту с sudo правами "искаропки"? Ах да, вы же используете чей-то сервис с кастомной убунтой, по всей видимости.
Настроить ssh: Отключить возможность подключения по ssh от пользователя root. В идеале отключить логин по паролю, оставить только по ключам. Но сие не всегда удобно, поэтому опущу этот момент.
Вот как раз отключать рутовый вход неудобно, а по ключам ходить - удобно. Пароль нужен юзеру (или руту) чтобы залогиниться не по ssh, а в виртуальной локальной консоли, когда сеть сломана или отвалилась.
По итогу, статью можно сократить в три-четыре раза, до небольшой заметки =)
Спасибо за полезную статью, информация собрана в единое целое и систематизирована. Теперь, нужно попробовать настройки, о которых раньше не догадывался, кстати, установив ubuntu, всегда в качестве теста накатываю q3a. В комментариях, тоже полезные советы, действительно ностальгия и желание поэкспериментировать. Статью, однозначно, в закладки:)
начал писать большой коментарий с примерами, о том что лучше сервисы запускать в виде systemd служб ограничивая им всё что им не требуется, о том что пользователей для сервисов лучше создавать через sysuser.. но на середине процесса удалил всё что написал. замените кваку на xonotic, получите тот же експириенс от самой игры, только не прийдётся тратить время на всё вышеописанное так как в большинстве дистрибутивов всё уже опакечено, остаётся только установить и запустить.
Я долгое время играл в nexius и warsow. Последний ещё может и карты кваки устанавливать. Достаточно прикольные две игры, к сожалению, мертвые сервера.
Проблемав том, что кваку все знают, а эти нет
Проблемав том, что кваку все знают, а эти нет
может быть я не искушённый игрок, но я не вижу никакой разницы между квакой и ксонотиком в плане игрового процесса.
А можете всё же написать этот гневный комментарий пожалуйста, мне для саморазвития.
ну что вы, он не был гневным.
ну попробую коротко:
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 руками, но зачем?
Большое спасибо. А доступ по ссш будет?
а как это вообще связано?
sshd живёт в точно таком же сервисе если что.
Я о другом, прошу понять правильно, с телефона, надо время для погружения, но это же демонизация сервиса? Раз так, то консоль у демона недоступна. И управлять им по ssh невозможно.
лезть по ssh на сервер чтобы выполнить командочку в консольке ioquake3 это уже какой-то оверкил. насколько я помню ioquake3 вполне себе может принимать rcon команды по сети от админа.
впрочем можно извратится запуская сервис внутри systemd в tmux/screen с интерактивом. так делают для сервера terraria потому что там иначе не получится. но имхо это костыли и фу-фу-фу
Warsow классный, во всём лучше q3, кроме того что он никому не нужен, слишком поздно вышел.
А можете всё же написать этот гневный комментарий пожалуйста, мне для саморазвития.
Кстати,xonitic это тот же nexius, только более тормозной
Конфиги для игры в Quake - первый мой опыт кодинга.. рокетджамп по кнопке, но много хэпэ съедал)
Information
- Website
- timeweb.cloud
- Registered
- Founded
- Employees
- 201–500 employees
- Location
- Россия
- Representative
- Timeweb Cloud


Тряхнём стариной: Quake III сервер для друзей