Minecraft Bedrock Editionが個人的に激アツなので nginx でMinecraft Bedrock Edition の通信をフォワードする(ついでにdocker-composeでデプロイする)
Minecraft 10周年めでたいですね!unchamaです。
今回も以下の記事の補足的なものです*1。
私が大学時代から運営しているのはMinecraftのPC版(Java Edition)のマルチプレイサーバーです。それ以外のエディション(スマホでやるやつとか、コンシューマ機でやるやつとか)には全く見向きしていなかったのですが、最近*2Bedrock Editionなるものがリリースされていたようです。
このBedrockというのが個人的に激アツです。なぜかというと、これまでにないレベルでのクロスプラットフォーム対応!!
詳しくは上のナポアンさんの記事がよくまとまっていますのでみていただくとして、このBedrock Edition、対応プラットフォームの量がとにかくすごい(Win10,iOS,Android and more...)。あとはこれはよく調べてないので間違っていたらごめんなさいですが、Xboxアカウントによるプレイヤー認証もやってくれているっぽい(Java版でいうオンラインモードみたいなの)。前はなかったんですよね確か。とにかく知らぬまに色々進化しているっぽいのです。
MinecraftJava版だとBukkitのフォーク?であるSpigotなどを使用することでプラグインによる機能拡張が可能なマルチプレイサーバーを立てることが可能ですが、Bedrock EditionにもSpigotのようなものは存在するっぽいです。Nukkitとか、Pockermine-MPとかですね。
NukkitはJavaベースみたいなので、Spigotのプラグインを書いた経験のある方ならちょっと勉強すればかけるようになるかもしれないです。私はずーっとインフラ側を中心に弄ってきた関係でプログラミングには疎いわけですが、これを機に何か書いてみるのも面白いのかなーなんて考えています。
ちなみにPocketMine-MPはまさかのphpベースらしいです。phpってweb系の言語じゃなかったっけ!?!?!?
すみません、やっと本題です
自称通信フォワードおじさんです。今回も根城のIPを隠蔽するためにリバースプロキシサーバーを建ててみました。
まず前置きになりますが、上記の記事では、Minecraft "Java(ここ大事)" Editionの通信をリバースプロキシ噛ませる(中継させる)ためにhaproxyというソフトウェアを使用しています。
実は、haproxyはTCP通信のみ対応でした。それに対してMinecraft Bedrock Editionの通信はUDPです。つまりhaproxyは使えません。
…と思ってggりはじめたら割と一瞬で見つかってしまいました。どうやらnginxのロードバランシング機能がudpに対応しているっぽいです。nginxはapacheとかと並んでwebサーバーの代表的なソフトウェアの一つっていう認識があったのですが、こんなこともできるんですね。
そんなわけで、錬成してみました。今回はnukkitの検証も兼ねていたので、一緒にnukkit+nginxのコンテナが立ち上がるdocker-compose.ymlになっています。
なおBedrock Editionのサーバーを運営したことがないため、例えばDDoS攻撃を受けた時に中継サーバーや根城のサーバーがどのような挙動をするかは全く不明です*3。参考にしていただいて構いませんが、自己責任ということでよろしくお願いします。