前書き
皆さん、YSFlight Simulatorというソフトをご存知でしょうか。
Windows98レベルのPCでも動作する(※必ずしも快適であるとは言っていない)フリーのフライトシミュレーターです。
各種優れたアドオンを以てしても、けっしてリッチであるとは言えない描画ですが、フライトシミュレーターとして必要な要素はほぼ全て揃っています。
ネットワーク対戦機能さえ備え、その気になればMODを自作して突っ込める自由度の高さ。
ただ飛ばすも良し、空対空・空対地・空対艦任務をこなすも良し、何なら艦対艦・地対地もできなくはない。
最新鋭の重グラフィックボードを必要としない軽量性など、国内・海外を問わず根強いユーザーが存在するソフトウェアです。
今回、久し振りにYSFlightを飛ばしてみたくなり調べてみたところ、令和5年6月15日時点でQiitaには1つも記事がないことを知り(そもそもYSFlightの記事をQiitaに書こうという人種がアレすぎるきらいはありますが)、じゃあどうせならネットワーク鯖を構築してみるか!と思い、筆を取ってみた次第です。
仕様
今回はお家クラウドの仮想化基盤上に載せたUbuntuServer22.04LTSの上で、YSFlightのネットワーク鯖を動かし、これをVultrのVPSを介してインターネットに公開してネットワークプレイが出来る状態を目指します。
- UbuntuServer22.04LTS(8vCPU、8GBメモリ、100GB SSD)
on Hyper-V Server 2019(Xeon E5-2650L/64GB Dual Channel/2TB NVMe SSD)
ネットワークについては下掲記事にて構築したものを流用します。
環境整備
VultrのFirewallとVPSの双方でTCPポート7915を開放します。
VPSのUFWの場合は以下のようになるでしょう。
-A PREROUTING -i enp1s0 -p tcp --dport 7915 -j DNAT --to-destination <<YSFlightサーバーのIP>>
続いて、UbuntuServer22.04LTSを普通にHyper-V上にインストールします。
インストールウィザードであらかじめ任意のIPを設定する他、SSHもインストールしましょう。
Windows Admin Center越しに設定するとキーボードの入力通りのパスワードが設定されないので、簡単なパスワードを設定の上で、SSHに切り替えた際に変更することをお勧めします。
再起動後、SSHでログインします。
Netplanを編集してIPアドレスや時刻設定やアップデートを適用して、UFWで以下のポートを開けておきます。
sudo ufw allow 7915/tcp
YSFlightを公式ミラーサイトからダウンロードします。
wget https://forum.ysfhq.com/download/file.php?id=499 ysflight.zip
sudo unzip ysflight.zip
インストールスクリプトがありますのでコマンドを叩きます。
sudo python3 ~/Ysflight/InstallInLinux.py
これで /root/YSFLIGHT.COM/ysflight にYSFlightがインストールされました。
YSFlightのサーバーは常駐させたいので、サービスファイルを作成します。
[Unit]
Description=YSFlight Simulator
After=network.target
[Service]
Type=Simple
Restart=on-failure
ExecStart=/root/YSFLIGHT.COM/ysflight/ysflight64_nownd -server <<サーバー名>>
[Install]
WantedBy=multi-user.target
<<サーバー名>>、及びそれ以降の引数は任意の値に置き換えてください。
保存したら、
sudo systemctl enable ysflight.service
してサービスを有効化します。「 sudo systemctl status ysflight.service 」して値がFailedになっていなければ成功です。
動作確認
YSFlightをインストールしたPCを用意します。今回はその辺で埃を被っていたWindows10のPCを使います久しぶりに動かしたらSATA SSDがプチフリしまくりでやっぱSATA SSDはダメだなと思いました。
- Windows 10 Pro
CPU:Core i7-2600
MEM:DDR3 16GB
SSD:SATA 1TB
GPU:GeForce GTX 1050 2GB
公式ミラーサイトから最新版を拾ってきて解凍し、適当なフォルダに放り込みます(今回はProgram Files (x86)に放り込みましたが任意の場所で構いません)。
中に入っているプログラム本体から、今回は「 ysflight32_gl2.exe 」を選択します。
初回起動時の説明をサラッと流し読んで初期画面に到達したら、「ネットワーク(M)」 -> 「クライアント(C)」と進みます。
左上にネットワークを指定するダイアログが出ますので、ユーザ名とサーバーホスト名(IPアドレス)を入力して「確定」をクリックします(特別にポート指定がある場合を除いて、通常はサーバーポート番号は変更しなくて大丈夫です)。
するとIFF(敵味方識別装置)のコードや航空機、開始位置を選択する画面になります。
今回は自由飛行を選択してありますので、IFFは特に触りません。「航空機選択」をクリックします。
お好きな機種を選んで「確定」を押して前の画面に戻り、「飛行開始」をクリックします。
初期位置が上空なのでいきなり空中に放り込まれます。通信量が少なくて大変心配になるのですが、この画面まで辿り着いたということはネットワーク戦モードがきちんと動いているということになります。
本当はジョイスティックで操作した方が本格感があるのですが、残念ながら処分してしまいましたのでマウスとキーボードで何とかしました(Escキー押しまくれば解脱できます)。
後書き
以上駆け足でしたが、令和の時代にYSFlight鯖を立てることが出来ました。
取り敢えず立ち上げまでということで、引数を何も細かく設定していませんが、色々触ってみると良いと思います。
至極あっさり「出来ました」と書いていますが、裏では丸一日ぐらいUFWの設定ミスと格闘していました。誰だDENYをポートレンジで指定したのは!!!!!(お前だ
この記事が誰かの参考になれば幸いです。