機能概要 What you can do by reading this article
dev1.domain.tldでアクセスしたときはdev1のMinecraftサーバへ、
dev2.domain.tldでアクセスしたときはdev2のMinecraftサーバへアクセスできるようにする。
ただし、dev1.domain.tldも、dev2.domain.tldも、同じグローバルIPを指すものとする。
Routing connections of Minecraft based on their domain names such as dev1.domain.tld or dev2.domain.ld WHILE those domains point the same global ip address.
方法概要 Logic explanation
HAProxy(L7プロキシ)を使う。
Minecraftの接続確立時の通信内容(ドメイン名が含まれる)を一部読み取り、その内容に応じてルーティング先を制御する。
We use the Layer-7 proxy called HAProxy. Based on the payload information in the tcp packet after TCP handshake, determine to where the following packets go.
環境 Environment
CentOS 7.1
Craft Bukkit 1.8.8
HAProxy 1.5.14-3.el7
手順 How to
詳しくはここを。
frontendとして以下を記述。
frontend minecraft
mode tcp # MinecraftはTCP接続
bind 0.0.0.0:25565 # Minecraftポート(25565)で待ち受け
tcp-request inspect-delay 5s # 最大5秒の遅延までOK(SSLやSMTPでは必要だけどMinecraftでは要らないかも)
acl mc_dev1_flg payload(4,4) -m sub dev1 # ドメイン名の先頭4文字がdev1なら
tcp-request content accept if mc_dev1_flg # 受け入れる
use_backend mc_dev1_app if mc_dev1_flg # mc_dev1_appのバックエンドへ
acl mc_dev2_flg payload(4,4) -m sub dev2
tcp-request content accept if mc_dev2_flg
use_backend mc_dev2_app if mc_dev2_flg
backendとして以下を記述。
backend mc_dev1_app
server mc_dev1_srv 10.0.0.1 # 同じポートへならポート指定要らず
backend mc_dev2_app
server mc_dev2_srv 10.0.0.2 # 10.0.0.1:25564 とかでもOK
結果 Result
楽しい。XD