Rust Dedicated Server(以下RDS)のコンテナをDocker NATを経由せずホストに直接バインドすれば、ちょっと困っていたことが解消できそうな気がしたので、昨晩ログイン数が0になっているときにネットワーク構成を変えてみました。

ネットワーク構成のイメージは構成変更前後でこんなふうに変わっています。

ネットワーク構成変更前後

左が変更前、右が変更後です。NATを経由しないのでIPアドレス変換は起こらなくなるはず。果たしてその結果は…

ログやユーザ一覧にプライベートIPアドレスで記録される件

変更した結果、ユーザ一覧に表示されるユーザのIPアドレスが変わりました。

RconWebアプリのユーザ一覧

完璧です。

ゲーム内のサーバ一覧から消える件

昨晩の設定変更後、数時間プレイした後、今朝の出勤前にRustのサーバ一覧を確認しましたがしっかり掲載されていました。それだけではなく、今までちゃんと表示できていなかったサーバ説明欄もしっかり表示されるようになっています!

サーバ説明欄

完璧です。

結論

昨日の予想通り、NAT環境下からホストに直接バインドすることで万事上手く動作するようになりました。

これでF1キーでコンソールを開いたりすることなく簡単にサーバに入ることができます! 入ってくる人いないけど!

おまけ

現在docker stack deployで使用しているcomposeファイルはこんなふうに変わっています。

version: '3.3'
services:
  rustds:
    image: didstopia/rust-server
    networks:
      - on-host
    volumes:
      - rustds-data:/steamcmd/rust
    environment:
      TZ: Asia/Tokyo
      RUST_SERVER_STARTUP_ARGUMENTS: -batchmode -nographics -logfile /dev/stdout +decay.scale 0.3
      RUST_SERVER_IDENTITY: plusultra
      RUST_SERVER_SEED: 1234568
      RUST_SERVER_NAME: PlusUltra dedicated server
      RUST_SERVER_DESCRIPTION: A playroom for PlusUltra members.
      RUST_SERVER_URL: https://xxx.xxx.xxx/
      RUST_SERVER_BANNER_URL: http://xxx.xxx.xxx/banner.jpg
      RUST_RCON_PASSWORD: xxxxxxxxxxxxxxxx
      RUST_UPDATE_CHECKING: 1
      RUST_SERVER_WORLDSIZE: 3500
      RUST_SERVER_MAXPLAYERS: 15
      RUST_SERVER_SAVE_INTERVAL: 300
      RUST_OXIDE_ENABLED: 1
    deploy:
      replicas: 1
      restart_policy:
        condition: any
      update_config:
        parallelism: 1

networks:
  on-host:
    external:
      name: "host"

volumes:
  rustds-data:
    driver_opts:
      type: none
      device: /var/rust/rustds
      o: bind

composeファイルのバージョンを3.3にしたのと、rustdsサービスが使用するネットワークを「このcomposeファイルの外で宣言している"host"というネットワーク」に指定することでホストに直接バインドしています。この指定ができるのはおそらくDocker 17.06.02以降かなと思います。