ツール/BungeeCord
ツール名 | BungeeCord |
製作者 | md_5 他(SpigotMC) |
配布場所.1 | 【1.8-1.15】 BungeeCord |
配布場所.2 | http://ci.md-5.net/job/BungeeCord/ |
最新バージョン | (参照:https://ci.md-5.net/job/BungeeCord/lastStableBuild/) |
最新版対応バージョン | Minecraft 1.8~1.15 |
ライセンス | GitHub参照 |
ソースコード | https://github.com/SpigotMC/BungeeCord/ |
関連サイト | 公式Wiki(en) |
備考 | - |
BungeeCordについて
BungeeCordとは、SpigotMCによるMinecraft用のプロキシサーバーです。
BungeeCordは、サーバー(Spigot等のサーバー)とプレイヤーの間に設置され、プレイヤーを切断させること無く別の実際のサーバーに移動させたりすることが出来ます。
BungeeCordの機能
プレイヤーの認証
BungeeCordは、プレイヤーが実際にMinecraftを購入している正規のユーザーか確認してくれる(online-modeの場合)
なので、実際のサーバーはoffline-mode(後述)でも、online-modeのBungeeCordを経由していれば、 非正規のユーザーが入ってくることはない。
サーバー間移動
BungeeCordを使う大きな理由として、 プレイヤーが切断して別のサーバーにログインするという作業をしなくても、 別のサーバーに移動させることが出来る。 しかしこれは、接続先のサーバーがそのBungeeCordから接続されることを想定して設定している場合に限り、 関係ない他人のサーバーに繋げることが出来るわけではない。 そして、この機能を使い実際のサーバーを分けて、BungeeCord自体も複数に分けることで、 数万人規模のユーザーを同時に接続させているサーバーもある。
BungeeCordが、ユーザーを移動させる時には以下の様なことをしている。 また、ユーザーがBungeeCordにログインしてきた時に、 少し異なるが同じような方法で実際のサーバーに接続している。
接続先のサーバーに、移動させるユーザーとしてログインする。
技術的に、online-modeのサーバーにユーザーとしてログインさせることは出来ないので、 独自のIP Forwardingという技術(後述)を使って、移動させるユーザーの情報を送信している。
ログインに成功した場合は、ユーザーに対してワールドを移動したように見せかけて、 移動先のサーバーの情報を送信する。 またこの際に、移動元のサーバーの一部の情報(プレイヤーリストやスコアボード等)を、 削除するように通知する。
移動先のサーバーから送られてきている、ワールドやエンティティなどの様々な情報を、 プレイヤーに転送する。
しかし、移動先のサーバーからはBungeeCordがクライアントだと思っているので、 一部Entity ID等の問題があるので、それは書き換えて転送する。
IP Forwarding
BungeeCordを使う場合、実際のサーバーはoffline-modeである必要がある。 offline-modeだとプレイヤーのUUID等はプレイヤーネームから生成されるので、 プレイヤーネームを変更された場合に問題が発生する。 またoffline-modeだとスキン等も反映されず、いろいろな問題がある。 そし>て、実際のサーバーからは、BungeeCordをクライアントとして処理されるので、 プレイヤーのIPアドレスもBungeeCordのものになり、IP BAN等も使えなくなってしまう。
その問題を解決するために使われるのがIP Forwardingだ。 これは、Spigot等のIP Forwardingに対応するパッチを適応されているサーバーで、 かつ設定でそれが有効になっている実際のサーバーに対して、 BungeeCordがプレイヤーの情報を送信する仕組みだ。
BungeeCordのconfig.yml内のip_forwardを有効にし、 Spigot又はそれのフォークでは、spigot.yml内のbungeecordを有効にした場合に利用出来る。 forgeやCraftBukkitサーバーとはこの機能は利用出来ないが、 バニラサーバーならVanillaCordを使ってパッチを当てたサーバーなら利用出来る。
IP Forwardingでは、プレイヤーのIPアドレスとUUID、そして存在するならGameProfile(スキン等の情報)を、 BungeeCordから実際のサーバーに送信している。
online-mode
何度も同じことを言っているがBungeeCordを使う場合、 実際のサーバーはoffline-modeである必要がある。 これをそのままにして、サーバーを運用すると、セキュリティーに問題があるため、対策をする必要がある。 具体的には、BungeeCordを動かしているホスト以外から接続出来ないようにする必要がある。
実際のサーバーとBungeeCordを同じホストで動かすのならば、 server.properties内のserver-ipを127.0.0.1にすることで対策出来るだろう。 別のホストで動かすのならば、iptables等のファイヤーウォールを使って対策するべきだろう。 詳しくはSpigotMCのページを見るといいだろう。
対策をしなかったら、何が起きるのか。 簡単に説明すると、悪意のある人が他人に成りすましてログインすることが出来てしまう。
権限を持った運営に成りすましてログインしてきたらどうなるだろうか? 当然サーバーは荒らされたり、負荷を掛けられたり、サーバーを止められるかもしれない。
バックアップを取っておけばそんなの問題にならないし、対策するの面倒だしそのままでいいと思う人が居ないとは限らない。 でも、そんな身勝手なことは許されない。 セキュリティーに対して意識が無い人はサーバーやサービスを運用するべきではない。 もしも、プラグイン等に外部にアクセスするものが含まれていたとしたら、 攻撃者はそれを悪用して貴方のではない第三者のサーバーやサービスを攻撃する可能性だってある。
BungeeCordの構築方法
始めはサーバー一つでのやり方を説明し、その後サーバー二つでのやり方を説明します。
なお、BungeeCordの構築は、先にサーバーを建てられる技能がないと厳しいため、
マルチプレイやサーバー、CraftBukkit・Spigotを読んでいることを推薦します。
目次
前提:CraftBukkit・Spigotを参考にしてサーバーを立ておいて下さい。
できればBungeeCordを使用するのであれば、SpigotMCが開発しているためSpigotを使用することをおすすめします。
ここではSpigotで説明を行っていきます。バニラサーバー少し手順が異なるため、バニラサーバーでの利用を参照下さい。
- ダウンロード
- BungeeCordの起動/ファイル生成
- チュートリアル
- 詳細設定
- 起動
ダウンロード
http://ci.md-5.net/job/BungeeCord/より
「最新成功ビルドの成果物」
の下のBungeeCord.jarクリックしてダウンロードして下さい。
そのファイルを適当なフォルダに入れてください。
BungeeCordの起動/ファイル生成
BungeeCordを入れたフォルダ内に、以下の様な内容のスクリプトを作成して下さい。
Windows(拡張子:bat)
@echo off java -Xms512M -Xmx512M -jar BungeeCord.jar pause
Linux(拡張子:sh)
#!/bin/bash java -Xms512M -Xmx512M -jar BungeeCord.jar
作成したスクリプトを実行して下さい。
すると、jarがあるフォルダ内にファイルが生成されます。
生成がされたら終了しましょう。
終了するには「end」とコマンドプロンプトに打つことで可能です。
(基本的にendで終了して下さい)
チュートリアル
BungeeCordの起動は完了しましたが、この状態では何も出来ません。
ですので以下の様にファイルを編集しましょう。
(詳しいconfig.ymlの説明については、下のconfigファイルを見て下さい。)
先にYAMLファイルを見ていることをおすすめします。
BungeeCordのconfig.ymlの編集
- 権限を与えるために、groupsにmd_5を置き換えて自分のMinecraftIDを追加しましょう。
- BungeeCordが読み込むサーバーを追加するために、serversの項目を設定します。
設定例
servers: s1: address: 127.0.0.1:25566 restricted: false motd: 'A Minecraft Server'
項目 | 解説 |
---|---|
s1 | BungeeCordで扱う時のサーバー名前を設定します。 |
address | サーバーのあるアドレスを指定します。(127.0.0.1ならびにlocalhostは自分のアドレスを指します) |
restricted | restrictedとは、権限を持っていなければ移動できないようにするための設定です。 trueにすると「bungeecord.server.鯖の名前」の権限が無いとサーバーに移動できなくなります。(falseで無効) |
motd | あまり使っているところを見たことがないが、BungeeCordから表示されるMOTDを設定します。 |
- ip_forwardの設定をtrueにします。
基本的にtrueを推薦します。
serversで設定した鯖を使用する際にサーバーをオフラインにする必要があり、プレイヤーUUIDも正常に取得できない問題があります。
その問題に対して対策する機能です。
これをtrueにした後、serversに登録したサーバーのspigot.yml内のBungeeCord:をtrueにすることによって利用できるようになります。
ただし、バニラサーバーではip_forwardを有効にしていると、標準では接続できない仕様になっているので、
バニラサーバーの項目を御覧ください。
- online_modeの設定をtrueにします。
基本的にtrueにしておいて下さい。
BungeeCord全体のonline_modeを設定します。
falseにするとオフラインのプレーヤーが入れてしまうため、おすすめしません。
なぜここをfalseにしてはならないかと言えば、BungeeCordは接続するサーバーにアドレスとプレーヤーの情報を渡すためには、利用下のサーバーのonline_modeをfalseにしなければなりません。
そのため、BungeeCordでしかオンライン判定が出来ないためです。
※割れサーバーと間違えられてしまった場合は、BungeeCordを利用しているのでと言えばよいでしょう。
サーバーのserver.propertiesの編集
- max-tick-time=-1にしてください。
→問題が起こった問に自動停止するかの設定で、ラグでも止まってしまう事があるため
- max-players=の人数とかはご自由に。(例)max-players=20
- server-port=25565をserver-port=25566にする。
- online-mode=trueをonline-mode=falseにする。
→BungeeCordポートが被らないようにするため。
→BungeeCordではサーバーがofflineでないとサーバーに接続できないため。
サーバーのbukkit.ymlの編集
- connection-throttle: -1
→接続する速さが設定した時間より早かったらそれを弾くという設定ですが、BungeeCordだと邪魔になるので無効(-1)にします。
そして以上の設定を全て保存してください。
起動にあたって
スクリプトの記述はそのままでも良いですが、安定動作のためにはメモリの割当を変更したり、する必要があります。
スクリプトの記述についての説明は起動用スクリプトの書き方にかかれているので参照して下さい。
起動
- BungeeCordのbatを押してBungeeCordを起動する。
- サーバーのbatを押して鯖を起動する。
- クライアントのMinecraftを起動する。
- 127.0.0.1もしくはlocalhostでサーバーに入る。
- /server等でサーバーがあること、BungeeCordが構築できたことを確認する。
- それぞれを終了する。
これで、サーバーが作られたことを確認できました。
起動時、接続時にエラーが出た時は、そのエラーを読んで下さい。
以降は、サーバーを複数作る時の方法となります。
BungeeCordの最も主な機能の設定です。
サーバーを複数繋げる
既に上記で構築済みのBungeeCordとサーバーがあり、なおかつまだ追加していないサーバーがあることを前提とします。
BungeeCordのconfig.ymlの編集
serversの項目に、一つサーバーがあると思います。(例)
s1: address: 127.0.0.1:25566 restricted: false motd: 'A Minecraft Server'
それをコピペしてもう一つ作ります。
そのコピーした方の名前とポートをそれぞれ変更して下さい。
※port番号を変更するのは、port番号が被ってしまうのを防ぐためです。
するとserversの項目が以下のようになっていると思います。(例)
servers: s1: address: 127.0.0.1:25566 restricted: false motd: 'A Minecraft Server' s2: address: 127.0.0.1:25567 restricted: false motd: 'A Minecraft Server'
config.ymlを保存して下さい。
追加する方サーバーのserver.propertiesの編集
server-port=25565をserver-port=25567にする。
要するに先ほどのaddressのポート番号と同じにしてください。
server.propertiesを保存して下さい。
増設後の起動
※起動の項目とほぼ同じです。
- BungeeCordのbatを押してBungeeCordを起動する。
- サーバーのbatを押してサーバーを起動する。
- もう一方のサーバーのbatを押してサーバーを起動する。
- クライアントのMinecraftを起動する。
- 127.0.0.1で鯖に入る。
- /server s2をしてみて、s2のサーバーに移動できたら増設完了です。
- それぞれを終了する。
以上の方法で、BungeeCordに読み込むサーバーの増築が可能です。
BungeeCordの構築が終わったら、次は設定をいじったり、BungeeCordのプラグイン(下記)を追加したりしましょう。
バニラサーバーでの利用
バニラサーバーでは、ip_forward機能を有効にすると接続できない仕様(上記)になっています。
解決策は、基本的に以下の二つです。
- ip_forwardを無効にする。
- VanillaCordでパッチを当てる。
1.は楽ですが、当然BungeeCord下のSpigotでUUIDの利用ができなくなってしまいます。
ですので2.の方法を使用する必要があります。
2.のVanillaCordは、バニラサーバーでBungeeCordを利用する際、
ip_forwardを利用できるようにパッチを当ててくれるソフトです。
まず、VanillaCordからVanillaCordをダウンロードします。
次に、起動用スクリプトを作成、保存し、実行します。
すると、inフォルダ(パッチを当てる前のバニラサーバーが入ってる)とoutフォルダ(パッチを当てた後のサーバーが入ってる)が生成されます。
ですのでoutフォルダ内の<サーバーのバージョン>-bungee.jarを既存のサーバーjarと置き換えて、
起動すれば良いです。(サーバー起動用スクリプトの-jar部分の変更を忘れず)
それ以降は、基本的に同じように設定することで、構築可能です。
設定ファイルの初期設定/記述
config.ymlの初期記述
BungeeCord ver:1088 config.yml
player_limit: -1 ip_forward: false permissions: default: - bungeecord.command.server - bungeecord.command.list admin: - bungeecord.command.alert - bungeecord.command.end - bungeecord.command.ip - bungeecord.command.reload timeout: 30000 online_mode: true servers: lobby: motd: '&1Just another BungeeCord - Forced Host' address: localhost:25565 restricted: false listeners: - query_port: 25577 motd: '&1Another Bungee server' tab_list: GLOBAL_PING query_enabled: false forced_hosts: pvp.md-5.net: pvp ping_passthrough: false default_server: lobby bind_local_address: true fallback_server: lobby host: 0.0.0.0:25577 max_players: 1 tab_size: 60 force_default_server: false disabled_commands: - disabledcommandhere network_compression_threshold: 256 groups: md_5: - admin connection_throttle: 4000 stats: (それぞれによる)
configファイルでの設定変更
プラグイン導入後に生成されるplugins/(プラグイン名)フォルダのconfig.ymlを書き変えることで、設定を変更できる。
また、この(プラグイン名)ではconfig.ymlにYAML形式が使用されています。YAML形式についてはYAMLファイルを参照して下さい。
項目 | 説明 |
---|---|
player_limit | BungeeCordで入れる最大人数を設定します。後述されているlistners内にあるmax_playersと違い、実際に入れる人数の方を指定します。 -1と設定することで上限なしになります。 |
stats | 統計に使ってる値です。触る必要は無いでしょう。 |
groups | 権限を設定するユーザーを追加します。 |
permissions | 権限を設定出来ます。 |
listeners | リスナーの項目を始めるという目印です。 |
max_players | 表示上のプレーヤー上限を設定出来ます。 |
fallback_server | 接続ミスした時に接続するサーバーを設定出来ます。 |
host | BungeeCordのIPとポートを設定します。0.0.0.0:25565を推薦。 |
tab_list | 動作していないのことです。 |
default_server | 接続時に入るサーバーを設定出来ます。 |
forced_hosts | 鯖ごとにIPを設定する感じです。ただし他にもいろいろしなければなりません。 |
tab_size | Tabキーを押した時のプレーヤーリストの大きさを設定します。 |
force_default_server | BungeeCordに接続するときに、毎回default_serverで設定したサーバーに入るのかを設定します。 |
motd | 鯖選択時(サーバーリスト)に表示される文字列を設定します。 |
query_enabled | APIなどで特定の情報を取得する時に使うもの。 |
query_port | 情報を公開時のポートを設定します。サーバーに使われているポートでも設定可能です |
timeout | 接続がタイムアウトする時間の設定。 |
connection_throttle | 次の接続までの接続が制限されるミリ秒を設定できます。(サーバーに対する連続攻撃を防ぐ目的です) |
servers | BungeeCordで読み込むサーバーを追加します。 |
ip_forward | 基本的にtrueを推薦します。(詳細は上記) |
online_mode | 基本的にtrueにしておいて下さい。BungeeCord全体のonline_modeを設定します。 |
コマンド一覧
コマンド | パーミッションノード | 説明 |
alert <message> | bungeecord.command.alert | BungeeCordに入っているプレーヤーにメッセージを送ります。これはBungeeCordが読み込んでいるサーバー全てに表示されます。 「&」でカラーコードを使用することが出来ます。カラーコードではないが、&hは完全にカスタムメッセージを可能にし、すべてのデフォルトの書式設定を非表示になります。 |
alertraw <json> | bungeecord.command.alert | BungeeCordに入っているプレーヤーにメッセージを送ります。これはMinecraft JSONフォーマットを使用します。 |
bungee | なし | 実行しているBungeeCordのバージョンを表示します。 |
end | bungeecord.command.end | 全てのプレーヤーの接続を切り、BungeeCordを終了します。 |
find <player> | bungeecord.command.find | 選択したユーザーがどのサーバーに居るのかを表示します。 |
glist | bungeecord.command.list | BungeeCordに接続しているプレーヤーを表示します。 BungeeCordが読み込んでいるサーバーごとに分け、またBungeeCordに接続している総プレーヤーも表示します。 |
greload | bungeecord.command.reload | BungeeCordのconfigを再読込します。このコマンドはBukkitのreloadコマンド同様、このコマンドは予期しない動作が発生することがあるため使用を推薦しません。 このコマンドでは、BungeeCordのconfig.yml内のserversとlistenersと幾つかのオプションを再読込します。しかしパーミッションとプラグインは再読込しません。 |
ip <player> | bungeecord.command.ip | BungeeCordに接続するプレーヤーのIPアドレスを表示します。 このコマンドはBukkitプラグインがIPコマンドが存在していると、正しく動作しない時にはBungeeCordのIPコマンドを使用すると良いと思います。 |
perms | なし | どのグループに入っていて、どんなパーミッションがあるのかを表示します。 |
send <player/current/all> <target> | bungeecord.command.send | 選択したプレーヤーを<target>のサーバーに移動します。 「all」を入力するとBungeeCordに接続ししている全てのプレーヤーを選択します。 プレーヤー名を入力するとそのプレーヤーを選択します。 「current」と入力すると現在居るサーバーのプレーヤーを選択します。 |
server [server] | bungeecord.command.server | [server]の部分に何も入力しなかった時は、接続可能なサーバーのリストを表示します。 [server]の部分にサーバー名を入力すると、選択したサーバーに移動します。 |
BungeeCordのプラグイン
BungeeCordはプラグインを追加することで、機能の拡張が出来ます。
ここでは使うと良いプラグインを紹介します。
※導入は、殆どBungeeCord/pluginsに入れ、起動するだけで可能なことが多い。
しかし、設定等はそれぞれの配布ページを見たり、検索をしたりして行わなくてはなりません。
BungeeCordでタブリストを設定出来るプラグイン。
BungeeTabListPlus_BukkitBridge.jarはBukkit/Spigotのpluginsに入れる必要があります。
MCBansのBungeeCord版。荒らしの対策が可能なプラグイン。
単一IPで接続できる最大数を設定出来るプラグイン。
サーバーのチャットで日本語化したり、他の鯖にチャットを表示出来るプラグイン。
serversの鯖間をポータルで移動できるようにするプラグイン。
サーバー間を看板で移動できるようにするプラグイン。Bukkitサーバーに導入する。
サーバー間を移動できるネザーゲートを作成できるプラグイン。Bukkitサーバーに導入する。(公式md_5氏作成)
リンク
Wiki内のマルチプレイ項目
参考にしたリンク等です。