設定の名前と既定の値は、2026 年 10 月 25 日時点の Velocity のドキュメントと、GitHub の既定の設定ファイル (default-velocity.toml) によります。
プロキシの役割
Minecraft のクライアントは、1 つのサーバーにしか接続できません。プロキシは、クライアントからはひとつのサーバーに見え、後ろでは複数のサーバーとの接続を切り替えます。
プロキシからの
- ログインの確認: 参加する方が Java 版を購入した正規のアカウントかを、プロキシが Mojang の認証のサーバーで確かめる
- 振り分け: 最初に入るサーバーと、サーバーが止まったときの移動先を決める
- 切り替え:
/serverコマンドやプラグインで、参加する方を別のサーバーへ移す - 保護: 接続の回数、パケットの量、コマンドの回数を制限する
- 統合版の参加: Geyser をプロキシに入れると、統合版の方も同じ入口から参加できる
Velocity と、以前のプロキシ
| 名前 | 状況 (2026 年 10 月) |
|---|---|
| Velocity | PaperMC が開発。現在の標準。1 つのプロキシで数千人を扱うことを目標に掲げている |
| BungeeCord | 2012 年から続く最初のプロキシ。Spigot の開発者が保守を続けている |
| Waterfall | BungeeCord のフォーク。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 modern | Velocity 独自の方式。秘密の値で、プロキシから渡された情報だと確かめる。もっとも安全 | Minecraft 1.13 以降のクライアントだけを受け付ける場合 (通常はこれ) |
| BungeeGuard | BungeeCord の方式に、秘密の値を加えたもの | modern に対応していないバックエンドサーバーがある場合 |
| BungeeCord (legacy) | 互換性は高いが、秘密の値がなく、安全性が低い | 1.12 以前のクライアントも受け付ける場合 |
バックエンドサーバーの設定は、サーバーを分ける構成の「プレイヤーの情報を渡す設定」で説明しています。どの方式でも、バックエンドサーバーは online-mode を切るため、プロキシ以外から接続できないようにすることが欠かせません。バックエンドサーバーに直接接続できると、ほかの人の名前と UUID で参加できてしまいます。forwarding.secret の値も、外部に漏れないよう管理します。
バックエンドサーバーを、プロキシからだけ接続できるようにする
バックエンドサーバーは、server.properties の 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 を使うよう勧めている
参考にした資料
- Velocity (GitHub)
- Configuring Velocity (PaperMC)
- Player information forwarding (PaperMC)
- Announcing the end of life of Waterfall (PaperMC)
- BungeeCord (GitHub)
- Network Installation (LuckPerms)
- Setup (GeyserMC)
- ValioBungee (GitHub)
プロキシの構築と移行は、KEY SELECT に
Velocity の構築と設定、バックエンドサーバーの守り方、BungeeCord や Waterfall からの移行、プロキシを複数にする構成まで、KEY SELECT がお引き受けできます。
- 記事や技術資料の内容についてのご質問とサポートは、保守・サポートのご契約、またはスポットでのご契約をいただいたうえでお受けしています。無償でのサポートは行っておりません。
- 記事や技術資料の内容は、公開の時点の情報にもとづいて作成しています。内容の正確性、完全性、最新性を保証するものではなく、内容にもとづいて行った作業の結果について、弊社は責任を負いかねます。設定や変更は、ご自身の責任で、検証用の環境で確かめてから行ってください。
- 記事や技術資料の内容について、ご指摘や誤りにお気づきの点がありましたら、その他のお問い合わせからお知らせください。
- 技術資料の内容は、引用元として資料の名前と URL を明記していただければ、ご自身の動画や資料としてご利用いただけます。全文の Web サイトでの引用はご遠慮ください。