全力開発部ブログの @Rustumi-Hinata
です。身内向けのSatisfactoryのサーバーを建てたのでそれの覚え書きです。
運用環境#
項目
仕様
OS
Ubuntu 22.04 LTS
CPU
Intel Core i5-11400 (4コア)
メモリ
16GB
ストレージ(SSD)
32GB
私の環境ではサーバーを多目的利用するために仮想化環境の上でサーバーを動かしています。もしも、kvm環境で建てる場合は、kvm64 ではSatisfactoryのサーバーソフトウェアは起動できません。なのでCPUの項目はx64環境にする必要があります。
必要なソフトウェアのインストール#
では、定例のいつもコマンド sudo apt-get update
を打ち込んでAPTのローカルレポジトリ更新します。
必要であればインストール済みのソフトウェアのアップグレード sudo apt-get upgrade
をしておくのも良いかもしれません。
更新が完了したらこれらのライブラリとソフトウェアをインストールします。
lib32gcc-s1
:サーバーソフトウェアを動かすために必要なライブラリ
steamcmd
:サーバーソフトウェアをインストールするために必要なソフトウェア
cmd
1
sudo apt-get install -y lib32gcc-s1 steamcmd
上記のコマンドでエラーが発生する場合、APTのローカルレポジトリ内に情報がないのかもしれないので登録する必要があります。
cmd
1
2
3
sudo add-apt-repository multiverse
sudo dpkg --add-architecture i386
sudo apt-get update
Satisfacotryのサーバーソフトウェアのインストール#
まずは、SteamCMDを起動します。
入力可能になったら、 force_install_dir インストールしたいディレクトリ
でインストールするディレクトリを選択し、 login anonymous
app_update 1690800 validate
でインストールします。
steamcmd
1
2
3
4
force_install_dir インストールしたいディレクトリ
login anonymous
app_update 1690800 validate
quit
app_update 1690800 validate
の数字の部分は、
SteamDB
で見つけることもできます。
インタプリタモードに入らなくても、一行でインストールすることもできます。
cmd
1
steamcmd +force_install_dir インストールしたいディレクトリ +login anonymous +app_update 1690800 validate +quit
各種設定#
ここでは、Satisfactoryサーバーで利用されるポートや systemd
でservice化を行い、コマンド1つで起動からアップデートを行えるようにします。
Port設定#
サーバーで利用されるポートは 7777/tcp
7777/udp
15777/udp
と 15000/udp
で、ufwを使いポート開放を行います。
ポート番号
詳細
7777/tcp
ゲームポート
7777/udp
ゲームポート
15777/udp
クエリポート
15000/udp
ビーコンポート
正式版リリースにて、ゲームポート以外はほとんど使われなくなったみたいです。
cmd
1
2
3
4
sudo ufw allow 7777/tcp
sudo ufw allow 7777/udp
sudo ufw allow 15777/udp
sudo ufw allow 15000/udp
上記のコマンドで、ひとつひとつ開けても良いが、ufwの機能を使って一括管理をするファイルを作ります。
/etc/ufw/application.d/satisfactory
1
2
3
[Satisfactory]
title=Satisfactory Ports
ports=7777/tcp|7777/udp|15777/udp|15000/udp
起動ファイル#
サーバー再起動時に、自動でサーバーソフトウェアを立ち上げるためのサービスファイルを作成します。
ExecStartPre
に、アップデートコマンドを記述する再起動時に自動でアップデートを行います。
/etc/systemd/system/satisfactory.service
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[Unit]
Description=Service to automatically start the Satisfactory server
Wants=network-online.target
After=syslog.target network.target nss-lookup.target network-online.target
[Service]
ExecStartPre=/usr/games/steamcmd +login anonymous +app_update 1690800 validate +quit
ExecStart=/home/rutsumi/Steam/steamapps/common/SatisfactoryDedicatedServer/FactoryServer.sh
User=rutsumi
Restart=on-failure
RestartSec=60
KillSignal=SIGINT
[Install]
WantedBy=multi-user.target
ExecStart
は、FactoryServer.shファイルがあるディレクトリを記入してください。User
は、Ubuntu内にあるユーザーを使用してください。
最後に、作成したserviceファイルを起動します。正常に起動すれば終了です。
cmd
1
sudo systemctl start satisfactory.service
自宅サーバー向け#
今回、私はSatisfactoryのサーバーを自宅のPC内に建てたが、自宅のルーターのポートを開けたくなかったのでVPN経由で接続する構成になっています。
OpenVPNを利用してVPN接続を行ったがレイテンシーが高く、個人的にはあまり良いものでは無かったです。覚え書きを残しておく。
インストール#
OpenVPNはサーバー側もクライアント側も必要なのでインストールしてください。
cmd
1
2
sudo apt-get update && apt-get upgrade -y
sudo apt-get install openvpn
証明書の発行#
OpenVPNでは証明書が必要です。
認証局自体は、セキュリティ的に問題がなければどこでも良いので、メインPCにソフト
をUSBにダウンロードして、その中でオレオレ証明書を作ってそれぞれのサーバーやクライアントに送りました。
OpenVPNのコンフィグファイル#
サーバーコンフィグ#
まずは、サーバー側のコンフィグファイル
server.conf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# コアな部分
port ポート番号
proto udp
dev tun
keepalive 10 120
# compress lzo
# push "compress lzo"
user nobody
group nobody
# 認証関連
ca ca.crt
cert SatisNetConnectVPNServer.crt
key SatisNetConnectVPNServer.key
dh dh2048.pem
tls-auth ta.key 0
persist-key
persist-tun
ncp-ciphers AES-128-GCM
tun-mtu 1500
fragment 1300
mssfix
explicit-exit-notify 1
# ルーティング
topology subnet
# VPNのIPアドレス # 8つしか割り当てられない
server 10.8.0.0 255.255.255.224
# クライアントに通知
push "route 10.8.0.0 255.255.255.224"
# 接続されたクライアントの通信をすべてVPN上で行うようにする
push "redirect-gateway def1"
# ccd
client-config-dir /etc/openvpn/ccd
# 諸々
verb 4
status /var/log/openvpn-status.log
log /var/log/openvpn.log
log-append /var/log/openvpn.log
port [番号]
VPNで使われるポート番号を指定する。使うためにはポートが解放されていることが必要。
proto [udp or tcp]
接続方式
dev tun
IPトンネル
ca ca.crt
認証局の証明書
cert server.crt
サーバーの証明書
key server.key
静的鍵
dh [dh].pem
DiffieHellmanのパラメーター、鍵交換を行うアルゴリズムに使う
server [IP] [サブネットマスク]
VPNのIPを指定する
push ""
クライアント側に接続時の設定を渡す
tls-auth ta.key 0
HMAC ddos対策
user nobody
クライアントが接続後の権限
group nobody
クライアントが接続後の権限
status openvpn-status.log
接続状態をログに出力する
client-config-dir /etc/openvpn/ccd
ccdを有効にする
サーバー側のディレクトリ構成#
サーバー側のディレクトリなので、 client
ディレクトリ内には、とくに何も入れる必要ないです。
ccd
ディレクトリには ifconfig-push 10.8.0.15 255.255.255.224
を記述し、VPN内でのIPを固定します。
1
2
3
4
5
6
7
8
9
10
11
12
13
/etc/openvpn
|--ccd
| |--StaisGameServerClient
|--client
|--server
| |--ca.crt
| |--dh2048.pem
| |--SatisNetConnectVPNServer.crt
| |--SatisNetConnectVPNServer.key
| |--server.conf 上記のファイル
| |--StaisGameServerClient.key
| |--ta.key
|--update-resolv-conf
クライアントコンフィグ#
次に、クライアント側のコンフィグファイル
client.conf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# クライアントであることを意味する
client
# コアな部分
proto udp
dev tun
remote OpenVPNサーバーIPアドレス ポート番号
remote-cert-tls server
nobind
ncp-ciphers AES-128-GCM
tun-mtu 1500
fragment 1300
mssfix
user nobody
group nobody
# 認証関連
ca ca.crt
cert StaisGameServerClient.crt
key StaisGameServerClient.key
remote-cert-tls server
tls-auth ta.key 1
クライアント側のディレクトリ構成#
こちらにはクライアント側なので、 server
フォルダーにはとくに入れる必要ないです。
1
2
3
4
5
6
7
8
9
/etc/openvpn
|--client
| |--StaisGameServerClient.crt
| |--StaisGameServerClient.key
| |--ca.crt
| |--client.conf
| |--ta.key
|--server
|--update-resolv-conf
OpenVPNを起動#
最後に起動します。 @
の後ろは、それぞれのコンフィグファイルの名前を記入してください。
クライアント側のIPアドレスがサーバー側のIPアドレスに変っていれば成功です。
サーバー
1
systemctl status openvpn-server@server
クライアント
1
systemctl status openvpn-client@client
最後に#
OpenVPNの設定が大変だった割には、性能がいまいち。
次からはWireGuard使うことにする(知見在り)。