[Из песочницы] Превращение Synology NAS в игровой сервер
Приветствую!
И так, по всем известным причинам приходится больше время проводить дома перед монитором.
При таком положении дел приходится вспоминать дела давно минувших дней.
Как уже ясно из названия этой статьи, речь пойдет о настройке Synology NAS в роли игрового сервера.
Achtung — в статье много скриншотов (скриншоты кликабельны)!
Перед тем как приступить, вот список инструментов которые нам понадобятся:
Synology NAS — тут ограничений я не вижу, думаю подойдёт любой, если нет планов держать сервер на 10к игроков.
Docker — особых навыков не требуется, достаточно образно понимать принцип работы.
LinuxGSM — о том что из себя представляет LinuxGSM можно почитать на офф. сайте https://linuxgsm.com.
На данный момент (апрель 2020) на LinuxGSM доступно 105 игровых серверов.
Весь список можно посмотреть тут https://linuxgsm.com/servers.
Steam — маркет с играми.
Игровой сервер LinuxGSM имеет интеграцию с SteamCMD, то есть игровой сервер LinuxGSM можно будет использовать только для игр из Steam.
Установка Docker на Synology NAS
На этом этапе все просто, переходим в админ панель Synology, дальше в «Package centre», находим и устанавливаем Docker.
Запускаем и видим примерно такую картину (у меня уже установлен этот контейнер)
Далее переходим в вкладку «Registry», вбиваем в поиск «gameservermanagers», выбираем образ «gameservermanagers/linuxgsm-docker» и жмём на кнопку «Download».
После переходим в вкладку «Image», ждём окончание загрузки образа и жмём на кнопку «Launch».
В открывшемся окне нужно перейти в «Advanced Settings», дальше в вкладку «Network» и отметить галочку «Use the same network as Docker Host».
Остальные настройки, например, такие как «Container Name», меняем на свое усмотрение.
Container Name — как не трудно догадаться, это имя контейнера, оно дальше пригодится. Рекомендую назвать как-то лаконично, для примера пусть будет «test».
Далее жмём кнопку «Apply» или «Next» несколько раз до завершения настройки.
Переходим в вкладку «Container» и видим новый запущенный (если нет, запускаем) контейнер.
Тут его можно останавливать, запускать, удалять и проводить другие действия.
Настройка Docker контейнера LinuxGSM
Перед тем как подключиться к Synology NAS через SSH, надо активировать сам SSH доступ в админ панели.
Дальше необходимо использовать внутренней IP адрес Synology NAS сервера для подключения через SSH.
Переходим в терминал (или другой любой аналог, например под Windows это PuTTY) и используем следующую команду:
ssh user_name@IP
В моём случае это выглядит так
ssh admin@192.168.0.166
После авторизации надо выполнить команду для перехода в сам контейнер «test» (поле «Container Name» в настройках Docker) под пользователем «root»
sudo docker exec -u 0 -it test bash
Перед самой установкой «LinuxGSM» нужно провести некоторые действия.
Установим пароль для пользователя «root»
passwd
Далее обновим все пакеты
apt update && apt upgrade && apt autoremove
Ожидаем окончание процесса…
Далее установим нужные утилиты
apt-get install sudo iproute2 netcat nano mc p7zip-rar p7zip-full
Поскольку, под «root» выполнять разные действия не самая лучшая идея, добавим нового пользователя «test».
adduser test
И разрешим новому пользователю использовать «sudo»
usermod -aG sudo test
Переключаемся на нового пользователя «test»
su test
Установка и настройка LinuxGSM
Рассмотрим пример настройки LinuxGSM на примере «Counter-Strike» он же «CS 1.6» https://linuxgsm.com/lgsm/csserver
Переходим на страницу инструкцией «Counter-Strike» linuxgsm.com/lgsm/csserver.
Во вкладке «Dependencies» копируем код под «Ubuntu 64-bit».
На момент написания статьи этот код выглядит так:
sudo dpkg --add-architecture i386; sudo apt update; sudo apt install mailutils postfix curl wget file tar bzip2 gzip unzip bsdmainutils python util-linux ca-certificates binutils bc jq tmux lib32gcc1 libstdc++6 lib32stdc++6 steamcmd
В процессе установки нужно согласится с «Steam License»:
Переходим в вкладку «Install» копируем код c 2-го шага (1-й шаг пропускаем, пользователь «test» уже есть):
wget -O linuxgsm.sh https://linuxgsm.sh && chmod +x linuxgsm.sh && bash linuxgsm.sh csserver
Ожидаем скачивания:
И запускаем установку:
./csserver install
Если все прошло в штатном режиме, увидим заветное «Install Complete!»
Запускаем… и видим ошибку «Multiple IP addresses found.»
./csserver start
Дальше надо явно указать серверу какой IP ему использовать.
В моём случае это:
192.168.0.166
Переходим в папку, путь к которой был в сообщении как «location»:
cd /home/test/lgsm/config-lgsm/csserver
И смотри какие фалы есть в этой папке:
ls
Копируем содержимое файла »_default.cfg» в файл «csserver.cfg»:
cat _default.cfg >> csserver.cfg
И переходим в режим редактирования файла «csserver.cfg»:
nano csserver.cfg
Находим строку:
ip="0.0.0.0"
И заменяем IP адрес, который был предложен, в моём случае это »192.168.0.166».
Получится как-то так:
ip="192.168.0.166"
Зажимаем сочетание клавиш:
Ctr + X
И после предложения сохранить жмём:
Y
Возвращаемся в папку пользователя «test»:
cd ~
И снова пробуем запустить сервер. Теперь сервер должен запуститься без проблем:
./csserver start
Для просмотра более детальной информации воспользуемся командой:
./csserver details
Из важных параметров стоит отметить:
- Server IP: 192.168.0.166:27015
- Internet IP: xxx.xx.xxx.xx:27015
- Config file: /home/test/serverfiles/cstrike/csserver.cfg
На этом этапе игровой сервер уже доступен в локальной сети.
Настройка переадресации IP адреса
Играть по локальной сети хорошо, но играть с друзьями через интернет — лучше!
Для переадресации IP адреса, который получил роутер от провайдера, используем механизм NAT.
Так же уместно будет заметить, что большинство провайдеров используют динамические IP адреса для своих клиентов.
Для удобства и стабильности работы желательно заполучить статический IP адрес.
Поскольку у меня роутер «TP-Link Archer C60», то я привожу пример настройки переадресации, так как это реализовано в моём роутере.
Для других роутеров, я предполагаю, настройка переадресации устроена похожим образом.
Тут всё просто — необходимо указать переадресацию с внешнего IP адреса на внутренний IP адрес сервера для двух портов:
- 27015
- 27005
В админ панели моего роутера это выглядит так
Вот и всё, после сохранения настроек роутера, игровой сервер будет доступен в сети по внешнему IP адресу для указаных портов!
Дополнительные настройки на примере CS 1.6
На примере CS 1.6 хотел бы дать несколько полезных советов.
Есть два файла для конфигурации сервера
Первый находится тут:
~/lgsm/config-lgsm/csserver/csserver.cfg
Второй находится тут:
~/serverfiles/cstrike/csserver.cfg
Первый файл содержит общие настройки, такие как IP адрес, карта для первой загрузки сервера и т.д.
Второй файл содержит настройки команд который можно выполнять через консоль «Counter-Strike», например «rcon_password» или «sv_password».
Во втором файле я рекомендую установить пароль на подключение к серверу через CVar «sv_password» и установить пароль для управления с консоли самого сервера через CVar «rcon_password».
Список всех CVar переменных можно посмотреть тут http://txdv.github.io/cstrike-cvarlist
Так же скорее всего будет необходимость установить дополнительные карты, например «fy_pool_day».
Все карты для CS 1.6 находятся тут:
~/serverfiles/cstrike/maps
Находим нужную карту, загружаем прямо на сервер (если в архиве, разархивируем), перемещаем файл с расширением ».bsp» в папку с файлами »~/serverfiles/cstrike/maps» и перегружаем сервер.
~./csserver restart
Кстати, все доступные команды сервера можно посмотреть так
~./csserver
Итог
Я доволен результатом. Все работает быстро и не лагает.
LinuxGSM имеет много дополнительных настроек, например, интеграцию c Telegram и Slack для оповещений, но некоторый функционал ещё требует доработок.
В целом, рекомендую к использованию!
Источники
https://linuxgsm.com
https://docs.linuxgsm.com
https://digitalboxweb.wordpress.com/2019/09/02/serveur-counter-strike-go-sur-nas-synology
https://medium.com/@konpat/how-to-host-a-counter-strike-1–6-game-on-linux-full-tutorial-a25f20ff1149
http://txdv.github.io/cstrike-cvarlist