在HAProxy中实现Minecraft的虚拟主机功能

阅读本文后您可以做什么

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.

方法概要:逻辑解释

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.

环境

CentOS 7.1:中文名为“CentOS 7.1”。
Craft Bukkit 1.8.8:中文名为“Craft Bukkit 1.8.8”。
HAProxy 1.5.14-3.el7:中文名为“HAProxy 1.5.14-3.el7”。

如何+手順

詳しくはここを。

frontendとして以下を記述。

mode, bind, tcp-request

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 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

结果

好玩。XD

广告
将在 10 秒后关闭
bannerAds