Minecraft Java版プロキシサーバーの立て方|Velocityで複数サーバーをつなぐ構成と設定

マイクラのプロキシサーバーとは

Minecraft Java版のプロキシサーバーは、複数のマイクラサーバーを1つの入口にまとめるための仕組みです。

たとえば、次のような構成を作れます。

プレイヤー
  ↓
Velocityプロキシ: 25565
  ├─ lobbyサーバー: 25566
  ├─ survivalサーバー: 25567
  └─ minigameサーバー: 25568

プレイヤーは25565番のプロキシに接続します。
その後、プロキシがロビー、サバイバル、ミニゲームなどのバックエンドサーバーへ振り分けます。

つまり、プレイヤーから見ると1つのサーバーですが、裏側では複数のサーバーを分けて動かせます。

VelocityとBungeeCord、どっちを使う?

マイクラのプロキシといえば、昔からBungeeCordが有名です。
ただ、今から新しく構築するなら、基本的にはVelocityがおすすめです。

VelocityはPaperMC系のプロキシで、現代的な構成に向いています。
特に、Paperサーバーと組み合わせる場合は、modern forwardingを使ってUUIDやスキン情報を安全にバックエンドへ渡せます。

この記事ではVelocityを中心に説明します。

新規で作るなら
  Velocityがおすすめ

昔からある構成や古いプラグイン互換を重視するなら
  BungeeCordも選択肢

必要なもの

最低限必要なものは次の通りです。

  • Java 21以上
  • Velocityのjarファイル
  • Paperなどのバックエンドサーバー
  • ルーターのポート開放
  • サーバーを動かすPCまたはVPS

最近のVelocityはJava 21以上が必要です。
古いJavaだと起動できないので、最初に確認します。

java -version

21以上ならOKです。

フォルダ構成の例

わかりやすくするために、次のようなフォルダ構成にします。

minecraft-network/
├─ proxy/
│  └─ velocity.jar
├─ lobby/
│  └─ paper.jar
├─ survival/
│  └─ paper.jar
└─ minigame/
   └─ paper.jar

proxyが入口です。
lobbysurvivalminigameが実際のワールドを持つサーバーです。

Velocityを起動する

まず、Velocity用のフォルダを作ります。

mkdir proxy
cd proxy

Velocityのjarを置いたら、次のコマンドで起動します。

java -Xms512M -Xmx512M -jar velocity.jar

初回起動すると、velocity.tomlなどの設定ファイルが生成されます。
生成されたら一度停止して、設定を編集します。

velocity.tomlの基本設定

velocity.tomlでまず見るべき場所は、待ち受けポートと接続先サーバーです。

bind = "0.0.0.0:25565"
online-mode = true

bindは、VelocityがどのIPとポートで待ち受けるかです。
公開サーバーの入口にするなら、基本は0.0.0.0:25565で待ち受けます。

online-mode = trueは、プロキシ側で正規アカウント認証を行う設定です。
通常はプロキシ側をtrueにします。

次に、バックエンドサーバーを登録します。

[servers]
lobby = "127.0.0.1:25566"
survival = "127.0.0.1:25567"
minigame = "127.0.0.1:25568"

try = [
  "lobby"
]

lobbysurvivalminigameという名前でサーバーを登録しています。
tryには、最初に接続させたいサーバーを書きます。

この例では、プレイヤーがプロキシに入るとまずlobbyへ接続されます。

modern forwardingを有効にする

Velocityを使うなら、player information forwardingの設定が重要です。

おすすめはmodernです。

player-info-forwarding-mode = "modern"
forwarding-secret-file = "forwarding.secret"

modernを使うことで、プレイヤーのUUIDやスキン情報をバックエンドサーバーへ正しく渡せます。
さらに、secretを使って「本当にVelocityから来た接続か」を確認できます。

forwarding.secretというファイルには、共有シークレットが入っています。
この中身を、バックエンドのPaper側にも設定します。

バックエンドサーバーのserver.properties

次に、lobbyやsurvivalなどのバックエンドサーバー側を設定します。

たとえばlobby/server.propertiesでは、次のようにします。

server-port=25566
online-mode=false

survivalなら、

server-port=25567
online-mode=false

minigameなら、

server-port=25568
online-mode=false

ここで注意が必要です。

バックエンドサーバーはonline-mode=falseにします。
なぜなら、認証はVelocity側で行うからです。

ただし、online-mode=falseのバックエンドを直接インターネットへ公開するのは危険です。
必ずVelocity経由でしか入れないようにします。

Paper側でVelocityを有効にする

Paperサーバーをバックエンドにする場合は、config/paper-global.ymlを編集します。

forwarding.secretの中身をコピーして、Paper側のsecretに貼ります。

proxies:
  velocity:
    enabled: true
    online-mode: true
    secret: "forwarding.secretの中身をここに貼る"

ポイントは次の通りです。

Velocity側
  player-info-forwarding-mode = "modern"
  forwarding.secret に秘密文字列

Paper側
  proxies.velocity.enabled = true
  proxies.velocity.secret = forwarding.secret と同じ値

このsecretが一致していないと、接続時にエラーになります。

バックエンドを直接公開しない

プロキシ構成で一番大事なのは、バックエンドサーバーを直接公開しないことです。

公開するのはVelocityの25565だけにします。

公開する
  Velocity: 25565

公開しない
  lobby: 25566
  survival: 25567
  minigame: 25568

もしバックエンドの2556625567を外部公開してしまうと、Velocityを通らずに入られる可能性があります。
バックエンドはonline-mode=falseなので、直接入れる状態は危険です。

同じPC内で動かすなら、Velocityの接続先を127.0.0.1にしておくのが安全です。

lobby = "127.0.0.1:25566"
survival = "127.0.0.1:25567"

別PCにバックエンドを置く場合は、ファイアウォールで「VelocityのPCからだけ接続許可」にします。

ルーターのポート開放

自宅サーバーで公開するなら、ルーター側で開けるポートは基本的に25565だけです。

外部 25565
  -> Velocityを動かしているPCの 25565

バックエンドの255662556725568は開けません。

25565: 開ける
25566: 開けない
25567: 開けない
25568: 開けない

ここを間違えると、プロキシ構成の意味が薄くなります。

サーバー間移動の方法

Velocityに接続したあと、サーバー間を移動するにはコマンドを使います。

/server

登録されているサーバー一覧が表示されます。

特定のサーバーへ移動するなら、

/server survival

のように入力します。

プラグインを入れれば、ロビーのアイテムをクリックしてサーバー移動するような構成も作れます。

forced-hostsでドメインごとに接続先を変える

Velocityでは、接続してきたドメインによって最初に入るサーバーを変えることもできます。

[forced-hosts]
"survival.example.com" = [
  "survival"
]

"minigame.example.com" = [
  "minigame"
]

たとえば、

survival.example.com -> survival
minigame.example.com -> minigame

のように分けられます。

ただし、最初は無理に設定しなくて大丈夫です。
まずはtry = ["lobby"]でロビーに入れる構成を作る方がわかりやすいです。

よくあるエラー

Unable to connect you to server

Velocityからバックエンドに接続できないときに出やすいです。

確認する場所はここです。

バックエンドサーバーが起動しているか
server-portがvelocity.tomlと一致しているか
IPアドレスが正しいか
ファイアウォールで止まっていないか

If you wish to use IP forwarding...

forwarding設定が合っていないと出ることがあります。

確認する場所はここです。

velocity.toml
  player-info-forwarding-mode = "modern"

Paperのconfig/paper-global.yml
  proxies.velocity.enabled = true
  secretがforwarding.secretと一致

ログインできるけどスキンやUUIDがおかしい

player forwardingが正しく設定されていない可能性があります。

Velocity側とPaper側のmodern forwarding設定、secretの一致を確認します。

バックエンドに直接入れてしまう

これは危険です。

ルーターのポート開放とファイアウォールを見直します。

開けるのはVelocityの25565だけ
バックエンドのポートは外部公開しない

BungeeCordで立てる場合

BungeeCordでも基本の考え方は同じです。

BungeeCord
  ↓
lobby
survival
minigame

ただし、設定ファイルやforwardingの方法がVelocityとは違います。
新しく作るならVelocityの方がわかりやすいと思います。

BungeeCordを使う場合は、バックエンド側でBungeeCord向けの設定を有効にします。
Velocityのmodern forwardingとは混ぜないようにします。

Velocity構成
  Velocityのmodern forwardingを使う

BungeeCord構成
  BungeeCord向けのIP forwardingを使う

ここを混ぜると、接続エラーの原因になります。

まとめ

Minecraft Java版のプロキシサーバーを立てるなら、今からならVelocityがおすすめです。

基本構成はこうです。

プレイヤー
  ↓
Velocity: 25565
  ↓
lobby / survival / minigame

大事な設定は次の通りです。

Velocity側
  bind = "0.0.0.0:25565"
  online-mode = true
  player-info-forwarding-mode = "modern"
  serversにバックエンドを登録

Paper側
  server.propertiesで online-mode=false
  config/paper-global.ymlで velocity.enabled=true
  secretをforwarding.secretと合わせる

公開設定
  外部公開するのはVelocityの25565だけ
  バックエンドのポートは直接公開しない

プロキシ構成にすると、ロビー、サバイバル、ミニゲーム、イベントワールドなどを分けて管理できます。
最初は少し設定が多く見えますが、仕組みを理解するとかなり便利です。

特に大事なのは、バックエンドを直接公開しないことと、VelocityとPaperのforwarding設定を合わせることです。
ここさえ間違えなければ、かなり安定したマイクラネットワークを作れます。

参考にした公式情報