清水理史の「イニシャルB」
NASでもイケる! Synology「DS716+」を「7 Days To Die」サーバーにした話
2020年8月3日 06:00
自宅で使っているNASをゲームサーバーにしてみた。利用したのは、Synologyの2ベイNAS「DS716+」で、ゲームはマイクラ的なクラフティング要素も持ったゾンビサバイバルの「7 Days To Die(A19)」だ。
パブリックなサーバーなら十数分でデプロイできるが、今回はサーバー側の異なるバージョン(A18とA19)を使い分けられるようにしたかったので、Ubuntuから構成してみた。
x86 CPU搭載のSynology「DS716+」を「7 Days To Die」のサーバーに
YouTubeの実況動画をきっかけに「7 Days To Die」をちょこちょこプレーしていたところ、ある日、関西在住の家族から「やってみたい」というメッセージが届き、せっかくなので自宅にマルチサーバー立ててみようということになった。
当初は、テスト環境として使ってるVMwareで作ったのだが、どうやらNASでも動きそうだと分かったので、テスト用に稼働させているSynologyのDS716+上に、Linux版の7 Days To Dieサーバーを構築してみた。
利用したDS716+は、2016年に発売された2ベイNASキットで、搭載CPUはCeleron N3150(1.6GHz、クアッドコア)、メモリは増設済みで8GB、ストレージはもともとテスト用ということもあり、500GBのSSD×2という構成だ。
7 Days To Dieサーバー(Dedicated Server)の要求スペックを見ると、2コアCPU、メモリが4+4GB(スワップ)、ストレージが60GBとなっているので、最低限の条件は満たしてることになる。
今回は、Dockerを使ってコンテナでサーバーを稼働させる。このため、Dockerをサポートしているモデルが必要となるのはもちろん、ゲームをインストールするためのSteamクライアントの動作にも、Intel CPUが必要だ。
ちなみに、SynologyのNASには、CPUにARMを採用したモデルもあるが、こうした製品では今回のサーバーを稼働できない。本来であれば、DS21xなどの低価格モデルでも動作できるといいのだが、こうした理由からIntel CPU搭載のNASが必須となるわけだ。
Dockerコンテナを用いて15分で稼働したが……
Dockerの場合、NASでもカスタマイズなしで動作するイイ感じのイメージさえ見付かりさえすれば、それを使ってしまうのが最も簡単だ。
なので、まずはレジストリから「7days」で検索し、ダウンロード数が多く、ドキュメントがしっかりしている「zobees/7daystodie」というイメージを入手してみた。
このイメージは完全自動化されており、コンテナを起動すると、Steamのアップデートと7 Days To Dieサーバーの起動が自動的に実行されるようになっている。ダウンロードに5分ほど、稼働に10分ほど(アップデート含む)の所要時間で、サクッと起動させることができた。
実際にテストしてみたところ、とりあえずゲームから接続することはできたが、次のような問題があって、結局、利用を断念した。
- ゲームバージョンがA18
- 管理コンソールにアクセスできない(有効になっているが、つながらない)
- serverconfig.xmlの編集が面倒
Ubuntuでいちからサーバーを作る
というわけで、既存のイメージを使うのは諦め、DockerでUbuntuのコンテナを用意し、そこへいちからインストールすることにした。
と言っても、作業はさほど難しくない。
詳しくは、Steamコミュニティにあるこちらの記事を参照してほしいが、基本的には以下の流れで作業すればいい。
- Ubuntuコンテナを用意
- 必要なツールとライブラリをインストール
- SteamCMDをインストール
- SteamCMDでDedicated Serverをインストール
- ゲームの設定(serverconfig.xml)を編集
- サーバーを起動
- ルーターでポートを開放
1. Ubuntuコンテナを用意
レジストリで「ubuntu」で検索してイメージをダウンロードし、コンテナを作成する。今回は以下のような設定で作成した。後からModを追加する場合を考え、念のためボリュームを追加したが、必須ではない。
ポートは26900~26902がゲーム接続に必須、8080と8081は管理用となるが、通常はどちらか一方で構わない。
2. ライブラリとツールのインストール
コンテナが稼働したら、「端末」から操作が可能になるので、ここで各種作業をする。インストールするツールとライブラリは次の通り。「nano」はserverconfig.xml編集用、「wget」はsteamCMDのダウンロード用、「lib32gcc1」はSteamCMD実行用に必要となる。
ちなみに、先に紹介したドキュメントでは「screen」のインストールも推奨されているが、SynologyのDockerツールの場合、GUI画面から端末を複数作成できるので、特に必要ない。
apt-get update
apt-get install nano
apt-get install wget
apt-get install lib32gcc1
3. SteamCMDインストール
続いて、SteamのLinux用クライアントをインストールする。ここでは、ホームディレクトリ(root)で作業するが、ディレクトリなどはお好みで。
cd ~
wget http://media.steampowered.com/installer/steamcmd_linux.tar.gz
tar xvzf steamcmd_linux.tar.gz
4. SteamCMDでDedicated Serverをインストール
SteamCMDを起動し、7 Days To DieのDedicated Serverをインストールする。Steamのアカウントでサインインすることもできるが、匿名でもダウンロードはできるので、ここではanonymousでログインする。
「force_install_dir」はサーバーのインストール先の指定なので、お好みのディレクトリ名を設定すればいい。
「app_update 294420 -beta latest_experimental」はサーバーのインストールコマンドとなる。
「-beta latest_experimental」で最新のA19をインストールできる。安定版のA18で構わない場合は、単に「app_update 294420」とすればいい。ダウンロードにはそれなりに時間がかかるので、しばらく放置しよう。
./steamcmd.sh
login anonymous
force_install_dir ./7DTDSa19
app_update 294420 -beta latest_experimental
quit
5. ゲームの設定(serverconfig.xml)を編集
インストールが完了したら、設定ファイルを編集してゲームの構成を変更する。いろいろな項目があるが、必須となるのは、サーバーを公開するかどうか(2で公開、1でフレンドのみ)、サーバー接続用のパスワード、管理用ポートとパスワードの設定となる。
管理用インターフェースは、HTTPかTelnetかを選択できる。ここでは両方オンにしたが、接続方法が違うだけで機能は同じなので、どちらか一方で構わない。
ちなみに、今回筆者は初心者である家族のために、ゲーム難易度を目一杯下げて経験値やアイテムが多く入るように設定した。
ただし、「"BloodMoonEnemyCount"」は標準の8から増やしておくことを強くオススメする。8では、7 Days To Dieの醍醐味となる7日目のゾンビの襲来の数が少なすぎて緊張感に欠けてしまう。上級者は32らしいが、16くらいにしておくと、だいぶ「ワーキャー」感がアップする。
cd 7DTDSa19
nano serverconfig.xml
[serverconfig.xml]
<!-- Server representation -->
<property name="ServerName" value="サーバー名"/>
<property name="ServerPassword" value="パスワード"/>
<!-- Networking -->
<property name="ServerVisibility" value="1"/>
<!-- Admin interfaces -->
<property name="ControlPanelEnabled" value="true"/>
<property name="ControlPanelPort" value="8080"/>
<property name="ControlPanelPassword" value="パスワード"/>
<property name="TelnetEnabled" value="true"/>
<property name="TelnetPort" value="8081"/>
<property name="TelnetPassword" value="パスワード"/>
<!-- Zombie settings -->
<property name="BloodMoonEnemyCount" value="16" />
6. サーバーを起動
設定が完了したら、後はサーバーを稼働するだけだ。以下のコマンドで実行しよう。なお、ここでは自動起動にはしないので、NASを再起動したりコンテナを再起動した場合は、毎回手動でこのコマンドを実行する必要がある。
また、実行後、Errorが表示されるが、いろいろ調べたものの、どうやらそういうものらしいので、気にしなくても問題ない。
./startserver.sh -configfile=serverconfig.xml
(7DTDSa19ディレクトリで実行)
プレーしないときはポートを閉じておくことを推奨
ここまでの設定が完了したら、後はゲームから接続するだけだ。
起動時に「ゲームに参加」を選ぶと、ゲームサーバーの一覧が表示されるが、先のサーバー設定で「"ServerVisibility"」を「1」に設定していると一覧には表示されないので、「IPに接続しています」を選んで、ルーターのWAN側IPアドレスを指定すればいい。
実際にプレーしてみたが、とりあえず2人でのプレーでは問題なかった。ただし、メモリを4~6GBほど消費するので、人数が増えていくと厳しくなることがあるかもしれない。
なお、今回紹介した方法では、ルーターのポートを開放するため、場合によっては、このポートが外部からの攻撃対象となる可能性がある。ゲームをプレーしないときは、ルーターの設定画面でポートマッピングをオフにしておくことを強く推奨する。仲間とプレーするときに一定時間のみ開放し、普段は閉じておくようにするといいだろう。