リリース初日から絶大な人気を誇っているパルワールドですが、パルワールド公式のテックガイドによると、公式サーバの他に自前で専用サーバを構築する手順を公開していました。
Intel N100のパフォーマンスを図るのにちょうど良いなと思ったので、Intel N100の上で動くProxmox VE上にDebian 12の仮想マシンを作成して、実際にパルワールド専用サーバを構築してみたので、手順について本記事で詳しく触れていきます。
パルワールド専用サーバを構築した後はTailscaleを使って、オープンネット経由ではなくTailscale VPN経由で接続できるような設定をしてみます。
なお、事前に上記の記事通りにDebian 12の仮想マシンを構築し、最低限の初期設定が完了していることを前提に、本記事では手順を解説しています。
なお、パルワールドの公式テックノートには、下記の通り推奨環境がまとめられています。
項目 | 値 |
CPU | 4コア (推奨) |
メモリ | 16GB 安定したサーバー稼働のためには 32GB 以上を推奨 |
ネットワーク | UDP Port 8211 (デフォルト) をポート開放できること |
上記より、今回は4コア、16GBメモリ、100GBストレージで構成された仮想マシンを利用します。
また、ネットワーク要件についてはポート開放をして直接公開するのではなく、Tailscaleを利用してアクセできるようにします。
目次
事前準備
「Proxmox VE環境に仮想マシンを作成し、Debian 12をインストールする手順」では最低限のことしか設定していませんので、サーバを運用していく上で必要となる物を設定していきます。
SSH設定
このままでは、Proxmox VE管理画面でコンソールを開いて設定することになってしまい、設定時の利便性が低下するためSSH設定を行います。
Terminalを立ち上げ、下記コマンドを実行してOpenSSHのインストールと起動まで行います。
sudo apt install ssh
sudo systemctl enable ssh
sudo systemctl start ssh
これでIDとパスワードでSSHログインできるようになるので、以降はTera TermなどのSSHクライアントで操作していきます。
公開鍵暗号方式でSSHログインするよう設定するため、下記コマンドを実行して鍵を作成していきます。
ssh-keygen -t ed25519
すると、下記の様なメッセージが表示されます。
Enter file in which to save the key (/home/syobon/.ssh/id_ed25519):
こちらは何も入力せずにEnterキーを押します。
すると続いては下記の様なメッセージが表示されます。
Enter passphrase (empty for no passphrase):
こちらは何も入力せずにEnterキーを押します。
続いて下記の様なメッセージが表示されます。
Enter same passphrase again:
こちらも何も入力せずにEnterキーを押します。
すると、~/.sshディレクトリ配下に秘密鍵と公開鍵が作成されます。
鍵のペアが作成されていることを確認したら、下記コマンドを実行して公開鍵の名前を変更します。
mv ~/.ssh/id_ed25519.pub ~/.ssh/authorized_keys
~/.ssh/id_ed25519ファイル(秘密鍵)はSSHログイン時に必要なので、操作するPCの方に転送しておきます。
続いて公開鍵認証でSSHログインできるように、下記コマンドを実行して設定ファイルを編集します。
sudo vi /etc/ssh/sshd_config
viが起動するので、下記のとおり編集します。
#33行目のPermitRootLogin prohibit-passwordのコメントアウトを解除し。下記の通り書き換え
PermitRootLogin no
#57行目のPasswordAuthentication yesのコメントアウトを解除し、下記の通り書き換え
PasswordAuthentication no
設定ファイルの書き換えが完了したら、下記のコマンドを実行してsshdを再起動します。
sudo systemctl restart ssh
これで以降の新規セッションについては公開鍵認証でのログインのみ許可されるようになります。
Proxmox VE Firewall設定
パルワールドの専用サーバはInbound向きのUDP 8211ポートに通信が発生します。
Proxmox VEの初期設定では各VMにFirewallが有効化されており、UDP 8211ポートへのアクセスはDropされます。
こちらについてアクセスを許可するためにFirewallの設定を行います。
Proxmox VE管理画面で、仮想マシンをクリックして選択し、「Firewall」→「Add」の順にクリックします。
「Add: Rule」画面が表示されるので、「Direction」を「in」、「Enabled」にチェック、「Action」を「ACEPT」、「Protocol」を「udp」、「Dest port」を「8211」に設定し「Add」をクリックします。
SteamCMDのインストール
パルワールドの専用サーバを構築するには、SteamPipeを使用するゲームで動作するSteamクライアントのコマンドライン版である「SteamCMD」の導入が必要です。
SteamCMDの公式ドキュメント通りに設定していくため、専用の「steam」アカウントを作成します。
下記コマンドを実行してユーザアカウントを作成します。
sudo useradd -m steam
sudo gpasswd -a steam sudo
続いて下記コマンドを実行して、steamアカウントにパスワードを設定します。
sudo passwd steam
アカウント作成が完了したら、下記コマンドを実行してsteamアカウントに切り替えます。
sudo -u steam -s
cd ~/
下記コマンドを実行してaptのnon-freeリポジトリを追加します
sudo apt-add-repository non-free
sudo dpkg --add-architecture i386
sudo apt update
そして、下記コマンドを実行してSteamCMDをインストールします。
sudo apt install steamcmd
ライセンス許諾が表示されるので、内容を良く読んだ上でTabキーを1回押して「Ok」が選択されていることを確認してからEnterキーを押します。
内容に問題なく同意する場合はTabキーを押して「I AGREE」が選択されている状態でEnterキーを押します。
steamcmdは/usr/games/配下にインストールされるため、このままではPATHが通っていないため、下記を実行してPATHを通します。
set -o noclobber
echo export PATH='/usr/games:$PATH' >> ~/.bashrc
source ~/.bashrc
これでSteamCMDのインストールは完了です。
パルワールドの専用サーバをセットアップする
SteamCMDのインストールが終わったので、下記コマンドを実行してパルワールドの専用サーバをダウンロードします。
steamcmd +login anonymous +app_update 2394010 validate +quit
さらに追加で下記コマンドを実行します。
mkdir -p ~/.steam/sdk64/
steamcmd +login anonymous +app_update 1007 +quit
cp ~/.local/share/Steam/steamapps/common/Steamworks\ SDK\ Redist/linux64/steamclient.so ~/.steam/sdk64/
cd ~/.local/share/Steam/steamapps/common/PalServer/
ここまで完了したら、下記コマンドを実行して専用サーバを立ち上げます。
./PalServer.sh
下記の様に、表示されれば起動完了です。
Shutdown handler: initalize.
Increasing per-process limit of core file size to infinity.
setrlimit() failed with error 22 (Invalid argument)
- Max per-process value allowed is 0 (we wanted infinity).
dlopen failed trying to load:
steamclient.so
with error:
steamclient.so: cannot open shared object file: No such file or directory
[S_API] SteamAPI_Init(): Loaded '/home/steam/.steam/sdk64/steamclient.so' OK. (First tried local 'steamclient.so')
CAppInfoCacheReadFromDiskThread took 12 milliseconds to initialize
dlmopen steamservice.so failed: steamservice.so: cannot open shared object file: No such file or directory
Setting breakpad minidump AppID = 2394010
[S_API FAIL] Tried to access Steam interface SteamUser021 before SteamAPI_Init succeeded.
[S_API FAIL] Tried to access Steam interface SteamFriends017 before SteamAPI_Init succeeded.
[S_API FAIL] Tried to access Steam interface STEAMAPPS_INTERFACE_VERSION008 before SteamAPI_Init succeeded.
[S_API FAIL] Tried to access Steam interface SteamNetworkingUtils004 before SteamAPI_Init succeeded.
上記で、「steamclient.so: cannot open shared object file: No such file or directory」とエラーが発生していますが、対策を行ったため次の行で「[S_API] SteamAPI_Init(): Loaded ‘/home/steam/.steam/sdk64/steamclient.so’ OK. (First tried local ‘steamclient.so’)」正常にロードされていることが分かります。
接続テスト
さて、ここまで来たらいったんテスト接続できるか試してみましょう。
パルワールドを立ち上げ、「マルチプレイに参加する(専用サーバー)」をクリックします。
すると、「DEDICATED SERVER」画面が表示されるので、画面下部にあるアドレス欄に<仮想マシンのローカルIP>:8211と入力して「接続」をクリックします。
上図の通り、キャラクター作成画面が表示されればテスト起動成功です。
いったんゲームを終了して作業に戻ります。
サーバの自動起動設定
このままでは、SSHのセッションが切れるとサーバも停止してしまうので、systemdでデーモン化してしまいます。
下記のコマンドを実行して、palworld.serviceファイルを作成します。
sudo vi /etc/systemd/system/palworld.service
下記の通りpalworld.serviceファイルを作成します。
[Unit]
Description=PalWorld Dedicated Server
Wands=network-online.target
After=syslog.target network.target nss-lookup.target network-online.target
[Service]
ExecStart=/home/steam/.local/share/Steam/steamapps/common/PalServer/PalServer.sh
LimitNOFILE=100000
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s INT $MAINPID
Restart=always
User=steam
Group=steam
TimeoutStartSec=300
[Install]
WantedBy=multi-user.target
palworld.serviceの作成が完了したら、下記コマンドでデーモンを再起動します。
sudo systemctl daemon-reload
デーモンの再起動が完了したら、下記コマンドを実行して自動起動設定を行います。
sudo systemctl enable palworld
Tailscaleの設定
下記コマンドを実行してTailscaleのリポジトリを追加します。
curl -fsSL https://pkgs.tailscale.com/stable/debian/bookworm.noarmor.gpg | sudo tee /usr/share/keyrings/tailscale-archive-keyring.gpg >/dev/null
curl -fsSL https://pkgs.tailscale.com/stable/debian/bookworm.tailscale-keyring.list | sudo tee /etc/apt/sources.list.d/tailscale.list
続いて下記コマンドを実行してtailscaleをインストールします。
sudo apt-get update
sudo apt-get install tailscale
インストールが完了したら、下記コマンドを実行してTailscaleにログインします。
sudo tailscale up
すると、下記の通り認証用URLが表示されるので作業用PCでアクセスして認証します。
To authenticate, visit:
https://login.tailscale.com/a/XXXXXXXXXXXXXXXXXXX
認証に成功したらプロンプトが返ってくるので、下記コマンドを実行して割り振られたTailscale IPv4アドレスを確認します。
tailscale ip -4
Tailscaleの管理画面にログインすると、今回の仮想マシンが追加されているので、「…」→「Disable key expiry」の順にクリックします。
最後に下記コマンドを実行して、パルワールド専用サーバを起動すれば準備完了です。
sudo systemctl start palworld
クライアントからの接続
今回はグローバルIP経由ではなく、Tailscale経由での接続を行うためクライアント側にTailscaleのインストールが必要です。
上記よりTailscaleクライアントをインストールして、TailscaleアカウントでサインインしてTailnetに接続します。
その上で、Tailscale管理画面でパルワールドの専用サーバノード情報内にある、「Full domain」をメモします。
パルワールドを起動して「マルチプレイに参加する(専用サーバー)」をクリックします。
画面下部にあるアドレス欄に、「<先ほどメモしたTailscaleのFull domain>:8211」と入力して「接続」をクリックします。
ローカルIPでテストしたときと同じく、キャラクター作成画面が表示されます。
まとめ
今回は、パルワールドの専用サーバを自宅サーバで試してみたいけど、全世界からアクセスできる状態で構築するのはちょっと不安だな・・・、仲間内でできればいいんだけどなぁというニーズを満たせるようTailscaleを使ったセキュアなパルワールド専用サーバを構築してみました。