【Minecraft】Waterfall (BungeeCord) + HaProxy (DDNSあり) の設定メモ
はじめに
ご覧いただきありがとうございます。ペグ酸です。
Minecraft (Java Edition) のマルチプレイサーバーで、DDNS配下のWaterfallプロキシに、HaProxy経由でアクセスする際の設定を、備忘録としてまとめます。
環境は、プレイヤー → HaProxy 2.4.18 → Waterfall 1.19.3、というものです。サーバーのOSはUbuntu 22.04で検証しています。
なお、参考にされる際は自己責任でお願いします。もし良くない設定などあれば、コメント欄でご教示いただけると幸いです。
目次
Waterfallの設定
Waterfallのconfig.yml
において、prevent_proxy_connections
をfalse
に設定変更します。
これを行わないと、プロキシ経由で接続しても弾かれます。
prevent_proxy_connections: false
適宜、Waterfallのポートには、HaProxyのサーバーからしかアクセス出来ないように設定してください。 ufwやiptablesで弾く、VPNで接続する方法などが考えられます。
HaProxyの設定
/etc/haproxy/haproxy.cfg を以下のように設定します。
DDNS配下のIPアドレスが変わっても、数十秒程度で反映されます。死活監視の間隔を変更したい場合は公式のドキュメントを参照してください。
# DDNSの名前解決用のDNSサーバの指定。CloudFlareのものと、Googleのものを指定しています。何でも良いです。 resolvers nameservers nameserver ns1 1.1.1.1:53 nameserver ns2 1.0.0.1:53 nameserver ns3 8.8.8.8:53 nameserver ns4 8.8.4.4:53 # Waterfallへアクセスする設定。Waterfallは、waterfall.example.com:30000で動いているとします。 listen minecraft bind 0.0.0.0:25565 server minecraft-backend waterfall.example.com:30000 send-proxy-v2 check-send-proxy resolvers nameservers init-addr last,libc,none
注意点・内容の軽い説明
3つあります。
send-proxy-v2
を忘れない
忘れるとWaterfallサーバーに繋がらなくなります。
死活監視にはcheck
ではなく、check-send-proxy
を使う
check
でも動きますが、2秒おきに来る死活監視のパケット(っぽいもの)にWaterfallが反応して、エラーでサーバーログが埋め尽くされてしまいます。
check-send-proxy
を使うとサーバーログが埋め尽くされることはありません。
DDNSの名前解決として、resolvers
, init-addr
を使う
resolvers nameservers
で、DNSサーバーを指定しています。
init-addr
は、HaProxy起動時の名前解決をどうするかを指定するものです。last
は最後に名前解決したときのものを使用する、libc
はDNSサーバーに名前解決を問い合わせる、というものです。
おまけ: Votifierもプロキシで行う設定
Votifierは、waterfall.example.com:9000で動いているとします。
こちらは、check-send-proxy
ではなく、check
を使います。
listen votifier bind 0.0.0.0:8192 server votifier-backend waterfall.example.com:9000 check resolvers nameservers init-addr last,libc,none
最後に
Bedrock用のプロキシであるGeyserMCを動かしている関係上(HaProxyはUDPをプロキシ出来ない)、本当はnginxで統一したいのですが、上手く動いていません。このあたりも今後検証していきたいと考えています。
また、nginxでGeyserMC用の通信を中継する設定も近いうちにまとめたいと思います。
再度になりますが、参考にされる際は自己責任でお願いします。もし良くない設定などあれば、コメント欄でご教示いただけると幸いです。
ではまた!