現時点の構成をメモ
公開用のネットワークを持つために VPS を利用するとどの VPS プロバイダが快適なのか
きっかけ
今の自宅の回線がマンション共用の物なので、ルーターがいじれません。
ルーターがいじれないという事はインターネットからのアクセスのポートマッピング(ポート開放)ができないという事です。
ただ、回線の速度や安定感はあるので追加で回線を契約するほどのコストをかけたくないですし、
今までは宅内サーバーをインターネットに公開するために ngrok (HTTPやTCP) や localtonet (UDP) を利用して公開していましたが、
localtonet は 日本サーバーが無いために、ping 値が高くなる等、歯がゆい状況でした。
そこで他に方法ないかなと探していたら見つけました。
tailscale の exitnode を利用し、インターネットからのアクセスを受けた マシン(VPS) から tailscale ネットワーク内のマシンにポートフォワーディングして、
VPS のマシンが実質ルーター代わりになるという方法
ポートフォワーディングについては、uredir を使わずに nginx や iptables でフォワーディングの設定をする、でもよかったんですが、以下の理由で uredir を採用してます。
- uredir のコマンドが覚えやすかった (uredir :8211 フォワーディング先IP:8211)
- iptables のコマンドを覚えるのがむずかしかった
- 実際に nginx を使用して比較しても体感できる差が感じられなかった
Azure, Sakura, WebArena の VPS それぞれで パルワールドサーバーのUDP フォワーディング を試した結果、安定性や速度が異なったので感想とともに記録を残します。
テスト環境の構築
OS: ubuntu 22.04 server
- tailscale をインストールして exitnode を有効化
1 | curl -fsSL https://tailscale.com/install.sh | sh |
- tailscale AdminConsole から “Use as exit node” にチェック
IPv4 フォワーディングを許可
1
2
3echo 'net.ipv4.ip_forward = 1' | sudo tee -a /etc/sysctl.d/99-tailscale.conf
echo 'net.ipv6.conf.all.forwarding = 1' | sudo tee -a /etc/sysctl.d/99-tailscale.conf
sudo sysctl -p /etc/sysctl.d/99-tailscale.confその他
vps 側で 22 や 8211 の inbound を許可
注意点
その時たまたま VPS プロバイダ側で障害があったとか、一時的な問題が起きていた可能性もあるのであくまで参考程度にしてください。
条件もきっちり揃えられていません。
各 VPS で試してみた
Azure VM
テストに利用したスペック
- コア数とメモリ: 1コア1GB
- ネットワーク: 100Mbps
- 金額: 1271円/月 以上
速度
速度は出ているけど、レイテンシの値が高い。
何故かコロンビアやインドのサーバーを利用してました。
念のため別のサイトでも試してみる。
Ping も Jitter も良好
パルワールドを遊んでみる
ロードがなかなか終わらない・・・
10分程度待てば接続はされた。
とはいえ建築物の表示にもかなりの時間がかかるため遊ぶのはきびしそう
その他気になった事
tailscale up したときに見覚えのないログが出た、何か改善の余地あり?
Warning: UDP GRO forwarding is suboptimally configured on eth0, UDP forwarding throughput capability will increase with a configuration change.
この方法で最適化されるらしいですが、残念ながら体感できず。。。
- 翻訳
Linux 6.2 以降のカーネルで Tailscale バージョン 1.54 以降を使用すると、トランスポート層のオフロードによって UDP スループットが向上します。
1 | NETDEV=$(ip route show 0/0 | cut -f5 -d' ') |
Sakura VPS
テストに利用したスペック
- コア数とメモリ: 2コア1GB
- ネットワーク: 100Mbps
- 金額: 990円/月
速度
パルワールドを遊んでみる
tailscale ネットワークだけで接続するのと体感は変わらず快適
WebArena Indigo
テストに利用したスペック
- コア数とメモリ: 1コア1GB
- ネットワーク: 100Mbps
- 金額: 449円/月
安くてよさそう
速度
ちょっと遅いかな
パルワールドを遊んでみる
なんだかパケロスが激しい
接続してから数十秒の間、建築物のオブジェクトが読み込まれず、これで遊ぶのは厳しそう、と感じました。
Conoha VPS
テストに利用したスペック
- コア数とメモリ: 2コア1GB
- ネットワーク: 100Mbps(インターネット)
- 金額: 1064円/月(時間課金)
速度
パルワールドを遊んでみる
ロード時間がそこそこ長くかかった
建築物等がなかなか読み込まれず、表示されるまでに5分くらいかかった
Azure VM を少しマシにした様なレベルで、これで遊ぶのは厳しい
AWS Lightsail
テストに利用したスペック
- コア数とメモリ: 2コア1GB
- ネットワーク: 1Gbps?
- 金額: $5/月
速度
シアトル経由になってしまった
別のサイトで測るとジッターもpingも良好
パルワールドを遊んでみる
体感は Sakura と変わらない
その他
採用されたのは・・・
さくら VPS でした。安定感がどエライです。
LIghtsail も快適だったので、こっちへの乗り換えもアリ
Azure VM の回線速度も優秀ではあるけど、不安定すぎる
なんで安定感に差がでるのか
わからないです。知ってる人いたら教えてほしいです。
他の VPS について
他に試したい VPS もいくつかあるので試したら追記していきます。
PalWorld のセーブデータを解析してわかった事
きっかけ
サーバーにある Palworld のデータはローカルプレイで使える様に移動できるのか疑問だったので調べてわかった事をメモ。
ikuma0366 さんの記事を見て、この情報をベースにセーブデータを覗いてみました。
セーブデータの場所
専用サーバーで遊んだ場合
専用サーバー全体のセーブデータとプレイヤー毎のセーブデータがわかれている。
どちらもサーバー側で保存されているので、プレイヤー側でセーブデータを探しても見つからない。
専用サーバーのセーブデータ
1 | PalServer/Pal/Saved/SaveGames/0/<サーバーID>/Level.sav |
内容例
情報量が多く json 化すると 数GBの容量になる、中身を覗いてみて、わかった事だけメモ。
- 接続した事のあるプレイヤー情報
- 捕獲された後のパル情報
- 各プレイヤーの最後にいた位置
- 他にも沢山ありすぎてワロタ
- その他、プレイヤー毎のセーブデータ以外の情報全て
プレイヤー毎のセーブデータ
1 | PalServer/Pal/Saved/SaveGames/0/<サーバーID>/Players/<プレイヤーID※先頭8文字>以降は0.sav |
- ファイル名の例
1
813399F0000000000000000000000000.sav
813399F0 という8文字目までを見れば ok
内容例
こっちは情報量が比較的少なく、json 化しても 数KBの容量、中身を覗いてみて、わかった事だけメモ
- キャラメイクの設定値
- レシピ アンロック情報(アンロックした事があるレシピのみ記載)
- ボスの討伐状況(倒した事があるパルのみ記載)
- パルを捕まえた数(捕まえた事があるパルのみ記載なので全て1以上)
- 手記の入手状況(入手した事がある手記のみ記載)
このファイル内にプレイヤー名の記載はないため Level.sav から確認するのが確実
コンプリートしたデータを一つ用意できればコンプリートしたデータを他のプレイヤーにコピーする事はできそう
ソロで遊んだ場合
以下のパスにセーブデータが保存されている様ですが、この記事では、この中のセーブデータについては触れてないです。
1 | C:\Users\noma3\AppData\Local\Pal\Saved\SaveGames\<ワールドのID> |
.sav の中身の見方
.sav は Unreal Engine のゲームで使われるセーブデータではあるものの、Unreal Engine 経由でないと直接中身を見る事が出来ないので、
有志が作成したツール(convert.py)を使って、json 化する必要がある
また、Unreal Engine のゲームは .json をセーブデータとして扱わないので、もしセーブデータを書き換えて使いたいなら .sav に戻してやる必要がある。
このツールの動作には python 3.9 以上が必要との事、一応 3.12 でも動作した。
json 化の方法
1 | convert.py "savファイルのパス" --to-json |
.sav 化の方法
1 | convert.py ".jsonファイルのパス" --from-json |
おまけ
Level.sav.json からプレイヤーを探す正規表現
vim で使った正規表現なので サクラエディタ だと少し変わるかも。
1 | IsPlayer": {\n.*\": true |
これで接続したことのあるプレイヤー名を確認した。
筆者が管理してるサーバーのプレイヤーID.sav 対応表
ファイル名 | ユーザー名 |
---|---|
813399f0*.sav | noma |
65332aeb*.sav | KOB |
06d842d5*.sav | sakura |
e74926a0*.sav | yocha-424 |
120f57b4*.sav | pia24mo |
e7574940*.sav | にゃんごろげ |
98e4c6ac*.sav | せつこ |
d3a7451e*.sav | mavu33 |
localtonet で UDP ポートフォワーディング
必要になった経緯
ゲームサーバーを自宅で立てるとなると、外からでもそのサーバーにアクセスできる様にポート開放する必要がありますが、
引っ越しをしてからマンション共有の回線を使っているためにルーターの設定ができず、ポート開放できない環境なため別の方法を探しました。
ただ、回線の品質は特に悪くないので自分で回線を契約するのはちょっともったいない・・・と思い別の方法をとりました。
localtonet への課金もしてみましたが、複数のフォワーディングをしない限り無料枠で事足りそうな雰囲気
localtonet の使い方
localtonet に登録
とりあえず登録します。
token をコピー
ダッシュボードに表示される AuthToken をコピーしておく
tunnel を作成し起動しておく
My Tunnels > TCP - UDP から作成する
Protocol Type と Server, ローカルのポートを指定して Create
作成されたら Start もクリックしておく
サーバー側でやる事
localtonet をインストールして次のコマンドを実行
1 | localtonet authtoken <token> |
すると以下の様に tunnel が表示されれば OK
IP/Url に表示されたアドレスに接続できる様になっているはず。
ngrok じゃだめ?
ポートフォワーディングしてくれる有名なツールに ngrok がありますが、そちらは UDP のフォワーディングはできません。
その他所感
リージョンに日本がない・・・
どこのサーバーを経由するか選べますが、日本がありません。ngrok では勝手に日本サーバー使ってくれるけど・・・
中国を選んで使っていて以外とラグも感じないですが、日本サーバーが使えたらよかったな
外部から見たポートの固定は有料でも無料でもできない
localtonet を起動する度に外部から見たポート番号が変わります。
なのでサーバーを複数人で利用している場合、 localtonet を再起動したあとは新しいポート番号の接続先を共有する必要が出てきます。
これは ngrok の有料プランだとできたとおもうので、ちょっとおしい
Steam ゲームのサーバーインストールとアップデート方法
環境
ubuntu 22.04,20.04
SteamCMD のインストール
1 | sudo add-apt-repository multiverse; sudo dpkg --add-architecture i386; sudo apt update |
ゲームサーバーのインストール・アップデート
インストールもアップデートも以下コマンドでできる
1 | steamcmd +login anonymous +app_update <appid> validate +quit |
※ appid は SteamDB で確認、例えば 2394010 は palworld
このコマンドを実行すると、以下のディレクトリが作成される
- ~/Steam
以下のディレクトリ以下に指定したゲームのサーバーファイルが保存される
- ~/Steam/steamapps/common/
例えば palworld は以下になるが、さらにそれより下のファイルはゲームにより異なる
- ~/Steam/steamapps/common/PalServer
vencord の translater プラグインで英語以外の言語に翻訳させる
vencord ってなに
以前から改造版 Discord クライアントとして主流な BetterDiscord がありましたが、
最近出てきた(私が見かける様になった)新しい 改造版 Discord クライアントです。
導入方法
ここを見て Discord PTB をインストールし、Discord PTB に Vencord を適用しました。Canary も前に入れてるので、3ついれてる。
【BetterDiscord超え】新改造版Discord、”Vencord”の入れ方とおすすめプラグイン - その1
Vencord を導入したら 設定 > Plugins から Translater を有効化しましょう。
あれ、日本語にならない。。。
日本語に翻訳させる方法
プラグインを有効化する時に設定画面を開くこともできるのですが、ここには変換先の言語を選べる所がないんですよね。。。
でも、プラグインのソースコードを漁っていたらなんだか変更できたりしちゃいそうな書き方になっている。
色々みていた結果、設定 > Plugin の画面で変更しているのはこのファイルの様でした。
%appdata%\Vencord\settings\settings.json
translate の設定部分も見つかったので見てみると、ありました。
receivedOutput を ja にして保存しましょう。
1 | "Translate": { |
また、英語の発言を右クリックして translate すると、できた。
Windows 11 の Hyper-V マシンに GPU を割り当てる(GPU-PV)
GTX1080 から RTX 3090 に乗り換えたので、GPU-PV(旧名GPU-V) を改めて試してみようかなと
2020/11 頃に某ゲームを多重起動するために Windows 10 で実施していましたが、その時と手順は全く変わりませんでした。
現存する仮想マシンに GPU を使ってもらう方法
- DDA
- グラボが限定されます
- Remote FX
- 廃止済、今はできないはず
- GPU-PV(旧名GPU-P)
- 今回はコレ
前提
- ホストマシン
- Windows 11 OSビルド 22621.1992
- CPU: Ryzen9 3950X (16core/32threads)
- GPU: RTX 3090
- ゲストマシン
- Windows 11
手順
0. Hyper-V を実行するホストマシンでは事前に以下の設定をしておく
- マザーボード側で VT-x または SR-IOV を有効化しておく
- Windows 側で Hyper-V を有効化しておく(機能の有効化)
1. Hyper-V で Windows 11 マシンを作成する
2. ホスト側 で以下コマンドを実行
Windows 11 マシンを停止し、管理者権限で以下 PowerShell を実行
1 | $MachinName="Hyper-V 上のマシン名" |
3. ホストマシンからゲストマシンへファイルをコピーする
ホストからのコピー元とゲストへのコピー先のパスが異なるので別々に記載、2つのファイルがあります。
以下の二つのファイルがコピー元
- PowerShell で以下を実行すると出てくるフォルダ丸ごと
1
2explorer.exe "$(Get-CimInstance -ClassName Win32_VideoController -Property * | Select-Object -ExpandProperty InstalledDisplayDrivers | Write-Output)".Split(",")[0].Trim("\nvldumdx.dll")
例: C:\WINDOWS\System32\DriverStore\FileRepository\nv_dispi.inf_amd64_50916785244854f2
- PowerShell で以下を実行すると出てくるフォルダ丸ごと
- C:\Windows\System32\nvapi64.dll
コピー先
- C:\Windows\System32\HostDriverStore\FileRepository\ #HostDriverStore 以下のフォルダは自身で作成してください。
- C:\Windows\System32\ #ホストと同じ場所
ここまで実施して再起動するとデバイスマネージャーに表示される
どこかに漏れがあるとビックリマークついてるかもしれません。
うまくいった例
うまくいってない例
どんな感じ?
ゲスト側のタスクマネージャでは GPU 表示されない
ゲスト側の使用率はゲスト側で見たかったんですけど見えず、0 % 表示
ただ FF14 ベンチが動作したので GPU は使えている様です
ホスト側 FF14ベンチ (4K)
ホスト側 FF14ベンチ (FullHD)
ゲスト側 FF14ベンチ (4K)
ゲスト側 FF14ベンチ (FullHD)
ゲスト側 FF14ベンチ (4K)
- 設定値を少し変えた、わかりにくいですが、1桁あがっていたりしています。
1
Set-VMGpuPartitionAdapter -VMName "HyperVマシン名" -MinPartitionVRAM 1000000000 -MaxPartitionVRAM 1000000000 -OptimalPartitionVRAM 1000000000 -MinPartitionEncode 1000000000 -MaxPartitionEncode 1000000000 -OptimalPartitionEncode 100000000 -MinPartitionDecode 1000000000 -MaxPartitionDecode 1000000000 -OptimalPartitionDecode 1000000000 -MinPartitionCompute 1000000000 -MaxPartitionCompute 1000000000 -OptimalPartitionCompute 1000000000
- 20230725追記
設定値戻してもスコアがあがる事はありませんでした。何の差なんだ・・・
Surface Laptop 3 (4K)
手元にあった Surface でもベンチしました。驚愕のスコア
体感
GPU-PV ないよりはいいかも、な感じ
-> 20230725追記: 6000くらい出ている時は結構いい
参考にしたサイト
今回↓見て思い出した。ハッ RTX 3090 にしてから試してなかった!
Hyper-VでGPU(GPU-PV)を利用する方法 (Windows 10以降編)2020年に↓見て試した、全く同じ手順だった。この時は GPU-P って名前だった、今書いていて気づいた、同じ人だった!
Hyper-VでGPU(3Dアクセラレーション)を利用する方法 Windows 10以降編 (GPU-P)
おまけ
これを管理者権限有効 PowerShell で実行すると拡張セッション無し解像度4Kが使える様になる
1 | Set-VMVideo -VMName "HyperVマシン名" -HorizontalResolution 3840 -VerticalResolution 2160 -ResolutionType Single |
PowerShell の コマンドの出所と出所で使えるコマンド一覧
コマンド
Get-Command は gcm の alias も持つので、置き換え可です。
コマンドがどこから参照されてるのか確認
1 | > Get-Command echo |
参照元はどんなコマンドが使えるのか
1 | Get-Command -Module Microsoft.PowerShell.Utility |
所感
もっとはやくしりたかった
curl で chatgpt 3.5 を試す
サンプル Spring アプリ を用意、実行するコマンド
java 1.17 を入れる手順も含むので空のVM 等で実施する事をお勧めします。
環境
ubuntu 20.04 on WSL で確認
コマンド
1 | wget https://aka.ms/download-jdk/microsoft-jdk-17-linux-x64.tar.gz |
java-optsを指定する場合
環境変数 MAVEN_OPTS をいじります。
1 | export MAVEN_OPTS="-javaagent:/root/SpringBoot/gs-spring-boot-for-azure/complete/applicationinsights-agent-3.4.13.jar";./mvnw spring-boot:run |