プロキシサーバー

プロキシサーバーは、参加する方の接続を受け、後ろにある複数の Minecraft のサーバーにつなぎます。参加する方は、接続し直さずにサーバーの間を移動できます。
この資料では、現在の標準の Velocity を中心に、役割、設定、安全な使い方を説明します。

設定の名前と既定の値は、2026 年 10 月 25 日時点の Velocity のドキュメントと、GitHub の既定の設定ファイル (default-velocity.toml) によります。

プロキシの役割

Minecraft のクライアントは、1 つのサーバーにしか接続できません。プロキシは、クライアントからはひとつのサーバーに見え、後ろでは複数のサーバーとの接続を切り替えます。

プロキシは、接続を 1 つのまま、バックエンドサーバーを切り替える。
参加する方play.example.jp に 1 回だけ接続
Velocityログインの確認、サーバーの切り替え、通信の制限

プロキシからの接続だけを受け付ける

ロビー最初に入る
ゲーム/server game で移動
イベント企画の会場
  • ログインの確認: 参加する方が Java 版を購入した正規のアカウントかを、プロキシが Mojang の認証のサーバーで確かめる
  • 振り分け: 最初に入るサーバーと、サーバーが止まったときの移動先を決める
  • 切り替え: /server コマンドやプラグインで、参加する方を別のサーバーへ移す
  • 保護: 接続の回数、パケットの量、コマンドの回数を制限する
  • 統合版の参加: Geyser をプロキシに入れると、統合版の方も同じ入口から参加できる

Velocity と、以前のプロキシ

名前状況 (2026 年 10 月)
VelocityPaperMC が開発。現在の標準。1 つのプロキシで数千人を扱うことを目標に掲げている
BungeeCord2012 年から続く最初のプロキシ。Spigot の開発者が保守を続けている
WaterfallBungeeCord のフォーク。2024 年 3 月に開発を終了。PaperMC は Velocity への移行を勧めている

BungeeCord 用のプラグインは、Velocity ではそのまま動きません。移行するときは、使っているプロキシのプラグインに Velocity に対応したものがあるかを先に確かめます。LuckPerms、ViaVersion、Geyser などの主なプラグインは、Velocity に対応しています。

velocity.toml の主な設定

bind = "0.0.0.0:25565"               # 接続を受けるアドレスとポート
online-mode = true                   # 正規のアカウントか確かめる(切らない)
force-key-authentication = true      # チャットの署名の鍵を確かめる
player-info-forwarding-mode = "MODERN"  # 既定は NONE。バックエンドサーバーに情報を渡す方式
forwarding-secret-file = "forwarding.secret"
kick-existing-players = false        # 同じ人が再接続したとき、前の接続を切るか

[servers]
lobby = "10.0.0.11:25565"            # バックエンドサーバー(プライベートなアドレス)
game  = "10.0.0.12:25565"
event = "10.0.0.13:25565"
try = ["lobby"]                      # 最初に入るサーバー、止まったときの移動先

[forced-hosts]
"event.example.jp" = ["event"]       # この名前で接続した人は、イベントのサーバーへ

[advanced]
compression-threshold = 256          # この大きさ(バイト)を超えた通信を圧縮する
login-ratelimit = 3000               # 同じ IP アドレスからの接続の最短の間隔(ミリ秒)
failover-on-unexpected-server-disconnect = true
log-player-connections = true
haproxy-protocol = false             # Proxy Protocol を使う場合だけ true

[packet-limiter]
interval = 7
decompressed-bytes-per-second = 5242880

サーバーのアドレスは例です。forced-hosts を使うと、接続に使ったドメインで入るサーバーを分けられます。企画ごとに別のドメインを用意して、参加する方を直接その会場に案内できます。

プレイヤーの情報の渡し方

バックエンドサーバー (プロキシの先で、ワールドを動かすサーバー) は、プロキシから接続を受けるため、そのままでは参加する方の UUID や IP アドレス、スキンが分かりません。プロキシがこれらを渡す方式は 3 つあり、1 つだけを選びます。

方式内容使う場面
Velocity modernVelocity 独自の方式。秘密の値で、プロキシから渡された情報だと確かめる。もっとも安全Minecraft 1.13 以降のクライアントだけを受け付ける場合 (通常はこれ)
BungeeGuardBungeeCord の方式に、秘密の値を加えたものmodern に対応していないバックエンドサーバーがある場合
BungeeCord (legacy)互換性は高いが、秘密の値がなく、安全性が低い1.12 以前のクライアントも受け付ける場合

バックエンドサーバーの設定は、サーバーを分ける構成の「プレイヤーの情報を渡す設定」で説明しています。どの方式でも、バックエンドサーバーは online-mode を切るため、プロキシ以外から接続できないようにすることが欠かせません。バックエンドサーバーに直接接続できると、ほかの人の名前と UUID で参加できてしまいます。forwarding.secret の値も、外部に漏れないよう管理します。

バックエンドサーバーを、プロキシからだけ接続できるようにする

バックエンドサーバーは、server.properties の server-ip で待ち受けるアドレスを決め、ファイアウォールで接続できる相手をプロキシだけに絞ります。server-ip に何を書くかは、プロキシとバックエンドサーバーが同じマシンか、別のマシンかで変わります。

構成バックエンドサーバーの server-ipファイアウォール
同じマシン (1 台)127.0.0.1。サーバーごとにポートを変える (例: 25566、25567)バックエンドサーバーのポートは、外から届かない。参加に使うプロキシのポートだけを開ける
別のマシン (複数台)そのマシンのプライベートなアドレス (例: 10.0.0.11)バックエンドサーバーのポートは、プロキシのプライベートなアドレス (例: 10.0.0.10) からだけ許可する
  • 127.0.0.1 は「そのマシンの中だけ」を意味します。プロキシが別のマシンにある構成で 127.0.0.1 にすると、プロキシからバックエンドサーバーに接続できません
  • プライベートなアドレスで待ち受けるだけでは足りません。同じネットワークのほかのマシン (データベース、管理の PC、ほかのバックエンドサーバー) からも接続できるため、ファイアウォールかクラウドのセキュリティグループで、送信元をプロキシに絞ります
  • server-ip を空欄のままにすると、そのマシンのすべてのアドレスで待ち受けます。この場合、守りはファイアウォールだけになります
  • 1 台のマシンで複数のサーバーを動かす場合は、ポートが重ならないようにします。25565 番はプロキシが使うため、バックエンドサーバーは別の番号にします
  • プロキシを複数にする場合は、すべてのプロキシのアドレスを許可します。プロキシを増やしたときに、許可の設定を忘れないようにします
  • Docker などのコンテナで動かす場合は、バックエンドサーバーのポートをマシンの外に公開せず、プロキシと同じ内部のネットワークだけで接続します
# 複数台の例
# プロキシ(10.0.0.10)の velocity.toml
[servers]
lobby = "10.0.0.11:25565"
game  = "10.0.0.12:25565"

# ロビーのサーバー(10.0.0.11)の server.properties
server-ip=10.0.0.11
server-port=25565
# ファイアウォール: 25565/TCP は 10.0.0.10 からだけ許可する

通信の制限

プロキシは、すべての接続の入口になるため、迷惑な接続をここで止めます。

  • login-ratelimit: 同じ IP アドレスからの接続の間隔を制限する (既定 3,000 ミリ秒)
  • [packet-limiter]: 1 秒あたりのパケットの数と量を制限する。展開したあとのデータの量は、既定で 1 秒あたり 5 MB まで
  • command-rate-limit: コマンドの実行の間隔を制限する (既定 50 ミリ秒)
  • prevent-client-proxy-connections: Mojang の認証のサーバーから見た接続元と、プロキシへの接続元が違う人を切断する。VPN などを一部防げるが、効果は弱いとドキュメントは書いている

Cloudflare Spectrum の Pro と Business のプランでは、プロキシから見える接続元はすべて Cloudflare の IP アドレスになるため、IP アドレスでの制限は意図どおりに働きません。Cloudflare Spectrum と組み合わせる場合の考え方は、Cloudflare Spectrum での保護で説明しています。

プロキシに入れるプラグイン

Velocity には、Velocity 用のプラグインを入れます。バックエンドサーバー (Paper) のプラグインとは別のものです。

  • LuckPerms: プロキシとバックエンドサーバーの両方に入れ、同じデータベースにつなぐ (MySQL との連動)
  • ViaVersion・ViaBackwards: サーバーと違うバージョンのクライアントでも参加できるようにする
  • Geyser・Floodgate: 統合版の参加。Geyser はプロキシにだけ入れる
  • 参加の制限: ホワイトリストやメンバーシップとの連携は、入口のプロキシで行うと、後ろのすべてのサーバーにまとめて効く

プロキシを複数にする

1 つのプロキシが止まると、全員が接続できなくなります。人数が多い場合や、止められない企画では、プロキシを複数にします。

  • 振り分け: DNS や負荷分散の仕組みで、参加する方を複数のプロキシに振り分ける
  • 情報の共有: 誰がどのプロキシにいるか、同じ人が二重に接続していないかを、プロキシの間で共有する必要がある。Velocity には組み込まれていないため、Redis を使うプラグインで共有する
  • 権限の連絡: LuckPerms のドキュメントは、プロキシが複数のときは、変更の連絡に Redis を使うよう勧めている

参考にした資料

プロキシの構築と移行は、KEY SELECT に

Velocity の構築と設定、バックエンドサーバーの守り方、BungeeCord や Waterfall からの移行、プロキシを複数にする構成まで、KEY SELECT がお引き受けできます。

  • 記事や技術資料の内容についてのご質問とサポートは、保守・サポートのご契約、またはスポットでのご契約をいただいたうえでお受けしています。無償でのサポートは行っておりません。
  • 記事や技術資料の内容は、公開の時点の情報にもとづいて作成しています。内容の正確性、完全性、最新性を保証するものではなく、内容にもとづいて行った作業の結果について、弊社は責任を負いかねます。設定や変更は、ご自身の責任で、検証用の環境で確かめてから行ってください。
  • 記事や技術資料の内容について、ご指摘や誤りにお気づきの点がありましたら、その他のお問い合わせからお知らせください。
  • 技術資料の内容は、引用元として資料の名前と URL を明記していただければ、ご自身の動画や資料としてご利用いただけます。全文の Web サイトでの引用はご遠慮ください。

ご相談・お問い合わせ

内容が固まっていない段階からご相談いただけます。各分野のプロフェッショナルがご対応いたします。ご相談・お見積もりは無料です。