マイクラのプロキシサーバーとは
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が入口です。lobby、survival、minigameが実際のワールドを持つサーバーです。
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"
]
lobby、survival、minigameという名前でサーバーを登録しています。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
もしバックエンドの25566や25567を外部公開してしまうと、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
バックエンドの25566、25567、25568は開けません。
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設定を合わせることです。
ここさえ間違えなければ、かなり安定したマイクラネットワークを作れます。