profile picture

Rust のサーバーを立てる

June 03, 2023 - game rust mod gcp rathole

概要

Rust のサーバーを立てます。

参考情報

GCP

GCP のファイアウォール、リバースプロキシ、DNS を設定します。

ファイアウォールの設定

VPC ファイアウォールのルールを作成します。

  1. サイドメニューから VPC ネットワークファイアウォール 選択します。

  2. ファイアウォール ルールを作成 を選択します。

  3. 項目に次の値を入力し 作成 ボタンを選択します。

    項目名入力値備考
    名前rust任意の値
    説明rust のルール任意の値
    ターゲットタグrust任意の値
    送信元 IPV4 範囲0.0.0.0/0
    プロトコルとポート > 指定したプロトコルとポート > TCP28015,2801628015: Rust
    28016: rcon
    プロトコルとポート > 指定したプロトコルとポート > UDP28015,2801728015: Rust
    28017: Steam Networking

リバースプロキシの設定

Compute Engine で rathole を起動してリバースプロキシを立ち上げます。

Compute Engine のインスタンスは Google Cloud の無料プログラム を参考に設定します。

  1. サイドメニューから Compute EngineVM インスタンス 選択します。

  2. インスタンスを作成 を選択します。

  3. 項目に次の値を入力し 作成 ボタンを選択します。

    項目名入力値備考
    名前instance-1任意の値
    リージョンオレゴン: us-west1
    マシン構成 > シリーズE2
    マシン構成 > マシンタイプe2-micro
    ブートディスク > OSUbuntu
    ブートディスク > バージョンUbuntu 18.04 LTS
    ブートディスク > ブートディスクの種類標準永続ディスク
    ブートディスク > サイズ (GB)30
    ファイアウォール > HTTP トラフィックを許可する許可チェックボックスにチェックを入れる
    ファイアウォール > HTTPS トラフィックを許可する許可チェックボックスにチェックを入れる
    詳細オプション > ネットワーキング > ネットワーク タグrustファイアウォールのターゲットタグを入力する
  1. 作成したインスタンスの SSH を選択し SSH 接続します。

  2. インスタンスのポートを開放します。2333 は rathole のポート番号です。

    sudo ufw allow 2333
    sudo ufw allow 28015
    sudo ufw allow 28015/udp
    sudo ufw allow 28016
    sudo ufw allow 28017/udp
    sudo ufw reload
    
  3. rathole の設定ファイル server.toml を作成します。詳細は readme を参照してください。

    # server.toml
    [server]
    bind_addr = "0.0.0.0:2333"
    
    [server.services.rust-tcp]
    token = "token"
    type = "tcp"
    bind_addr = "0.0.0.0:28015"
    
    [server.services.rust-udp]
    token = "token"
    type = "udp"
    bind_addr = "0.0.0.0:28015"
    
    [server.services.rust-rcon]
    token = "token"
    type = "tcp"
    bind_addr = "0.0.0.0:28016"
    
    [server.services.rust-steam]
    token = "token"
    type = "udp"
    bind_addr = "0.0.0.0:28017"
    
  4. rathole を起動します。

    sudo docker run -d -it --rm -p 28015:28015 -p 28015:28015/udp -p 28016:28016 -p 28017:28017/udp  -v "/home/server.toml:/app/server.toml" rapiz1/rathole:latest --server /app/server.toml
    

予算の設定

  1. サイドメニューから お支払い を選択します。

  2. お支払いのサイドメニューから 請求先アカウント を選択します。

  3. お支払いのサイドメニューから 予算とアラート を選択します。

  4. 予算を作成 を選択します。

  5. 項目に次の値を入力し 終了 ボタンを選択します。

    項目名入力値備考
    範囲 > 名前rust任意の値
    金額 > 目標金額1000予算の上限金額

Rust のサーバー

didstopia/rust-server で Rust のサーバーを立ち上げます。

準備

Rust に必要なフォルダ、ファイルを作成します。

  1. フォルダを作成します。

    フォルダ名備考
    dataRust データ用のフォルダ
  2. サーバーの環境変数を記述したファイル「rust.env」を作成します。

    RUST_SERVER_STARTUP_ARGUMENTS=-batchmode -load -logfile - +server.secure 1 +fps.limit 30
    RUST_SERVER_IDENTITY=private_rust_server
    RUST_SERVER_SEED=2107922314
    RUST_SERVER_WORLDSIZE=2500
    RUST_SERVER_NAME=Private Rust Server
    RUST_SERVER_DESCRIPTION=Private Rust Server
    RUST_RCON_PASSWORD=mypw
    RUST_OXIDE_ENABLED=1
    RUST_SERVER_MAXPLAYERS=5
    

    環境変数の補足

    環境変数補足
    RUST_SERVER_STARTUP_ARGUMENTS+fps.limit でサーバー側の FPS を制限します。
    RUST_SERVER_SEEDシード値を設定します。
    RUST_SERVER_WORLDSIZEマップの広さを設定します。
    RUST_RCON_PASSWORDパスワードはできるだけ複雑な値にします。
    RUST_OXIDE_ENABLEDMOD を使用するため 1 を設定します。
    RUST_SERVER_MAXPLAYERSサーバーに接続できるプレイヤーの人数の上限を設定します。
  3. rathole の設定ファイル client.toml を作成します。詳細は readme を参照してください。

    # client.toml
    [client]
    remote_addr = "myserver:2333"
    
    [client.services.rust-tcp]
    token = "token"
    type = "tcp"
    local_addr = "rust:28015"
    
    [client.services.rust-udp]
    token = "token"
    type = "udp"
    local_addr = "rust:28015"
    
    [client.services.rust-rcon]
    token = "token"
    type = "tcp"
    local_addr = "rust:28016"
    
    [client.services.rust-steam]
    token = "token"
    type = "udp"
    local_addr = "rust:28017"
    

コンテナ

サーバーのコンテナを作成、起動します。

  1. コンテナの定義を作成します。

    version: '3.7'
    
    services:
      # https://hub.docker.com/r/didstopia/rust-server
      rust:
        image: didstopia/rust-server
        container_name: rust-server
        ports:
          # Rust クライアント接続ポート
          - 28015:28015
          - 28015:28015/udp
          # Rcon クライアント接続ポート
          - 28016:28016
          # Steam Networking
          - 28017:28017/udp
          # Web Console
          - 28018:8080
        env_file:
          - /Users/st-little/Documents/rust/rust.env
        deploy:
          resources:
           limits:
             # メモリの上限
             memory: 4g
       stdin_open: true
       tty: true
       volumes:
          - /Users/st-little/Documents/rust/data:/steamcmd/rust
       networks:
        - internal
    
     # https://github.com/rapiz1/rathole
     port_forwarding:
       depends_on:
        - rust
      image: rapiz1/rathole
       restart: unless-stopped
       command: ["--client", "/app/client.toml"]
       tty: true
       volumes:
         - /Users/st-little/Documents/rust/client.toml:/app/client.toml
      networks:
        - internal
    
    networks:
     internal:
    
  2. コンテナを起動します。

    docker-compose up
    

サーバへ接続

クライアントからサーバーに接続します。

  1. Rust が起動したら F1 キーを押します。

  2. 次のコマンドを入力してエンターキーを押します。

    client.connect myserver:28015 
    

MOD

uMod Plugins で Rust 用の Mod を探すことができます。

Whitelist

ホワイトリストに登録されたプレイヤーのうち、許可を得た人にサーバーへのアクセスを制限します。

  1. 「Download」ボタンを選択し Whitelist.cs をダウンロードします。

  2. Whitelist.cs を data/oxide/plugins にコピーします。

  3. ブラウザで管理画面 myserver:28018/ を開きます。

  4. Console を開いて一番下にある入力フィールドに次のコマンドを入力しエンターキーを押します。myid は SteamID64 です。

    oxide.grant user myid whitelist.allow
    

Backpacks

バックパックを持つことで、インベントリを増やすことができます。

  1. 「Download」ボタンを選択し Backpacks.cs をダウンロードします。

  2. Backpacks.cs を data/oxide/plugins にコピーします。

  3. ブラウザで管理画面 myserver:28018/ を開きます。

  4. Console を開いて一番下にある入力フィールドに次のコマンドを入力しエンターキーを押します。

    すべてのプレイヤーがバックパックを使用できるようにします。

    o.grant group default backpacks.use
    

    すべてのプレイヤーがバックパック GUI ボタン​​を表示できるようにします。

    o.grant group default backpacks.gui
    

    バックアップ容量をデフォルトの 6 から 24 に変更します。

    o.grant group default backpacks.size.24
    

Recycler Speed

リサイクラーのスピードを変更します。

  1. 「Download」ボタンを選択し RecyclerSpeed.cs をダウンロードします。

  2. RecyclerSpeed.cs を data/oxide/plugins にコピーします。

  3. data/oxide/config/RecyclerSpeed.json の Recyler Speed でスピードを設定します。

    {
     "Recyler Speed (Lower = Faster) (Seconds)": 1.0
    }
    
  4. ブラウザで管理画面 myserver:28018/ を開きます。

  5. Console を開いて一番下にある入力フィールドに次のコマンドを入力しエンターキーを押します。

    すべてのプレイヤーが Recycler Speed を使用できるようにします。

    o.grant group default recyclerspeed.use
    

Discord Messages

メッセージを Discord に送信します。

  1. 「Download」ボタンを選択し DiscordMessages.cs をダウンロードします。

  2. DiscordMessages.cs を data/oxide/plugins にコピーします。

Inbound

パトロールヘリや補給物資の投下、貨物船などの入港を Discord でお知らせします。

前提条件

  1. 「Download」ボタンを選択し Inbound.cs をダウンロードします。

  2. Inbound.cs を data/oxide/plugins にコピーします。

  3. data/oxide/config/Inbound.json を修正します。

    Discord Messages の有効化、Webhook URL の設定を行います。

    {
        "Discord Messages": {
            "Enabled": true,
            "Webhook URL": "my Webhook url",
        },
    }
    

Ingame Clock GUI

ゲーム内の時刻を表示します。

  1. 「Download」ボタンを選択し IngameClockGUI.cs をダウンロードします。

  2. IngameClockGUI.cs を data/oxide/plugins にコピーします。

  3. data/oxide/config/IngameClockGUI.json で設定を変更します。

    時刻のフォントサイズ、表示位置を変更します。

    {
        "FontSize": 16,
        "Position": {
            "Bottom": 0.015,
            "Left": 0.30
        },
    }
    

Wipe

ワイプの確認、変更ができます。詳細は Rust Wiki - Server Wipe Timer を参照してください。

PrintWipe コマンドでワイプの確認ができます。

タイムゾーンの変更

デフォルトのタイムゾーンは wipetimer.wipetimezone: "Europe/London" です。次のコマンドで日本に変更します。

wipeTimezone Japan

ワイプ日の指定

UNIX タイムスタンプを使用して、正確なワイプ日時を設定できます。2023/7/31 15:00:00 GMT+0 を指定する場合は次のコマンドを実行します。

wipeUnixTimestampOverride 1690815600

Misc