6
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

MinecraftのサーバにRCONで接続する

Last updated at Posted at 2023-04-25

RCONとは

  • RCONはRemote Consoleの略称
  • ゲームサーバをリモートで管理するための機能全般を指す用語
  • Minecraft以外でも、ARK: Survival EvolvedやBattlefield、Call of Duty、Rust等、ユーザ自身がサーバをホスティングできるFPSやマルチプレイのゲームを中心に広くサポートされている

プロトコル

  • RCONのプロトコルの仕様はRFC等の形で標準化されているわけではなく、一般的に各ゲームによって独自の仕様を持つ
  • Minecraftの場合は、SteamやVALVE INDEXを開発・運営しているValve CorporationがゲームエンジンのSource Engineで採用していたSource RCON Protocolの仕様(パケットのフォーマット等)をベースに、Minecraft固有のコマンドを使用できるよう拡張している
  • MinecraftのRCONに関する公式なプロトコルの仕様書やクライアントの実装は存在しない
  • MinecraftのRCONのプロトコルは、トランスポート層にTCPを使用するアプリケーション層のプロトコルで、テキストベースで通信を行い、デフォルトでは通信は暗号化されない(パスワードもプレーンテキストで送信される)といった特徴を持つ
  • そのため、安全に使用したい場合は、SSHトンネリングやVPNを用いて通信経路を別途、暗号化する必要がある

クライアント

  • MinecraftのRCONのクライアントはいくつか選択肢があるが、代表的なクライアントにはmcrconが挙げられる
  • mcrconはCで実装されたCLIのクライアントでクロスプラットフォーム対応(Linux、macOS、Windows)している

検証

  • 実際に、MinecraftのサーバにRCONで接続してみる
  • OSはmacOS Venturaにて検証を行った
  • MinecraftのサーバはMinecraft: Java Edition 1.19.4を使用している
  • RCONのクライアントにはmcrconを使用する

サーバの設定

  • 事前にMinecraftのサーバでRCONを有効化し、任意のポートを設定(デフォルトは25575)し、RCONのパスワードを設定しておく
  • Minecraftのサーバでファイアウォールやパケットフィルタリングが設定されている場合は、TCPのポート25575番のインバウンドの通信を許可しておく
server.properties
...
rcon.port=25575
...
enable-rcon=true
...
rcon.password=password
...

mcrconのインストール

$ git clone https://github.com/Tiiffi/mcrcon.git
$ cd mcrcon/
$ make
$ sudo make install

# mcrconのバージョンが表示されたらインストール成功
$ mcrcon -v
mcrcon 0.7.2 (built: Apr 19 2023 18:21:37) - https://github.com/Tiiffi/mcrcon
Bug reports:
	tiiffi+mcrcon at gmail
	https://github.com/Tiiffi/mcrcon/issues/

mcrconから接続

# -HオプションにはMinecraftのサーバのIPアドレスを指定する
# -tオプションはインタラクティブモードで起動する
$ mcrcon -H X.X.X.X -P 25575 -p password -t
Logged in.
Type 'Q' or press Ctrl-D / Ctrl-C to disconnect.
>

# 試しにホワイトリストの確認をしてみる
>whitelist list
There is/are 1 whitelisted player(s): XXXXXXXX

# Ctrl + d で抜ける
>^D

SSHトンネリングする

  • MinecraftのRCONは、デフォルトでは通信経路が暗号化されないため、盗聴や改ざんのリスクが存在する
  • SSHトンネリング(SSHローカルポートフォワーディング)の仕組みを利用することで通信を暗号化し、安全な通信を実現できる
# -fオプションはバックグラウンド実行するためのオプション
# -Nオプションはシェルを起動しないようにするためのオプション
# -LオプションはSSHローカルポートフォワーディングを設定するためのオプション
# この場合、localhost:25575への通信がSSHで暗号化され、X.X.X.X:25575に転送される
$ ssh -f -N -L 25575:localhost:25575 username@X.X.X.X

# -Hオプションにはlocalhostを指定する
$ mcrcon -H localhost -P 25575 -p password -t
Logged in.
Type 'Q' or press Ctrl-D / Ctrl-C to disconnect.
>

SSHトンネリングの終了

# ポート25575番でリッスンしているプロセスを調べる
$ lsof -i :25575 | awk '{print $1, $2, $5, $9, $10}'
COMMAND PID TYPE NAME
ssh 58995 IPv6 localhost:25575 (LISTEN)
ssh 58995 IPv4 localhost:25575 (LISTEN)

# 該当するプロセスを終了する
$ kill 58995

# プロセスが表示されなくなった
$ lsof -i :25575

# RCONで接続できなくなった
$ mcrcon -H localhost -P 25575 -p password -t
Connection failed.
Error 61: Connection refused
6
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?