全力開発部ブログの @Rustumi-Hinata です。身内向けのSatisfactoryのサーバーを建てたのでそれの覚え書きです。

運用環境

項目 仕様
OS Ubuntu 22.04 LTS
CPU Intel Core i5-11400 (4コア)
メモリ 16GB
ストレージ(SSD) 32GB
Caution
私の環境ではサーバーを多目的利用するために仮想化環境の上でサーバーを動かしています。もしも、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
Note

上記のコマンドでエラーが発生する場合、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 でインストールします。

cmd
1
steamcmd
steamcmd
1
2
3
4
force_install_dir インストールしたいディレクトリ
login anonymous
app_update 1690800 validate
quit
Tip
app_update 1690800 validate の数字の部分は、 SteamDB で見つけることもできます。
Tip

インタプリタモードに入らなくても、一行でインストールすることもできます。

cmd
1
steamcmd +force_install_dir インストールしたいディレクトリ +login anonymous +app_update 1690800 validate +quit

各種設定

ここでは、Satisfactoryサーバーで利用されるポートや systemd でservice化を行い、コマンド1つで起動からアップデートを行えるようにします。

Port設定

サーバーで利用されるポートは 7777/tcp 7777/udp 15777/udp15000/udp で、ufwを使いポート開放を行います。

ポート番号 詳細
7777/tcp ゲームポート
7777/udp ゲームポート
15777/udp クエリポート
15000/udp ビーコンポート
Note
正式版リリースにて、ゲームポート以外はほとんど使われなくなったみたいです。
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
Note
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

参考

Dedicated servers - Satisfactory Wiki

This wiki is no longer the current community source for information on Satisfactory in general or Dedicated Servers in specific. Please see the New Wiki at https://satisfactory.wiki.gg/wiki/Dedicated_servers for current information and guides. This page shows a historical archive of previous basics and details on how to set up and operate a Satisfactory dedicated server. At the moment, the dedicated server is available for the Windows and Linux operating systems. It can currently be installed us

OpenVPNのserver.confサンプルファイル和訳 - Qiita - Qiita

manで出てこないと思ったら/usr/share/doc/の方にマニュアルがあったこの辺のページも参考になる(https://www.openvpn.jp/document/how-to/)0.…

OpenVPNのclient.confサンプルファイル和訳 - Qiita - Qiita

manで出てこないと思ったら/usr/share/doc/の方にマニュアルがあったこの辺のページも参考になる(https://www.openvpn.jp/document/how-to/)0.…

最後に

OpenVPNの設定が大変だった割には、性能がいまいち。

次からはWireGuard使うことにする(知見在り)。