#機能概要 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