LoginSignup
14
11

More than 5 years have passed since last update.

HAProxyでMinecraftでもVirtualHostを実現させる

Last updated at Posted at 2016-01-24

機能概要 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として以下を記述。

/etc/haproxy/haproxy.cfg
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として以下を記述。

/etc/haproxy/haproxy.cfg
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

14
11
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
11