DynmapのURLをIPアドレスレベルで変更したかったのでメモを残します。経緯は以下の通りです。
Minecraftの公開サーバーではお馴染みのDynmapですが、設定を変更していなければ「***.***.***.***:8123」ってなりますよね。
「:8123」を取り除きたいのであれば単純に「:80」の設定に変更すれば「***.***.***.***」でアクセスできるようになります。
私もこれで解決しようと思ったのですが、うちはログインするサーバーとゲームサーバーを分けているので「***.***.***.***」ですら隠匿したかったんです...。
なのでサーバーへの接続アドレスを「play.minecraft.jp.net」ってしているのでこれを活用したいなと思いました。(BungeeCord + Spigotって環境でサーバーを分けています)
Minecraftは「play.minecraft.jp.net」と接続試行すると「play.minecraft.jp.net:25565」となって接続試行されます。
WEBページは「play.minecraft.jp.net」と接続試行すると「play.minecraft.jp.net:80」となって接続試行されます。
ですのでWEBページ(ChromeとかFirefox)で「play.minecraft.jp.net」って接続したら隠匿しているゲームサーバーのDynmapを呼び出せるようにしたかったのです。
その方法を簡単ですがご紹介します。
※ログインサーバーとゲームサーバーは別のグローバルIPアドレスが割り当てられています。
BungeeCordの設定は各自行ってください。ここではFirewalldの設定を中心に行います。
まずはログインサーバーの25565ポートを解放しておきましょう。
[user@*** ~]# firewall-cmd --zone=public --add-port=25565/tcp
success
次にFirewalldの設定を確認します。
[user@*** ~]# firewall-cmd --list-all --zone=public
public (active)
target: default
icmp-block-inversion: no
interfaces: eth0
sources:
services: dhcpv6-client http
ports: 25565/tcp
protocols:
masquerade: no
forward-ports:
sourceports:
icmp-blocks:
rich rules:
とくに何も弄ってないですが環境によっては若干違うと思います。
パケットを別のサーバーに投げて受信できるマスカレード設定を行います。
[user@*** ~]# firewall-cmd --zone=public --add-masquerade
success
飛ばすための前準備ができたら80番ポートに来たパケットをゲームサーバーの8123ポートに飛ばす設定をしましょう。
[user@*** ~]# firewall-cmd --permanent --add-forward-port="port=80:proto=tcp:toaddr=***.***.***.***:toport=8123"
sucess
***.***.***.***にはゲームサーバーのアドレスを入れてくださいね。
設定を反映させます。
[user@*** ~]# firewall-cmd --reload
success
設定を確認します。
[user@*** ~]# firewall-cmd --list-all --zone=public
public (active)
target: default
icmp-block-inversion: no
interfaces: eth0
sources:
services: dhcpv6-client http
ports: 25565/tcp
protocols:
masquerade: yes
forward-ports: port=80:proto=tcp:toport=8123:toaddr=***.***.***.***
sourceports:
icmp-blocks:
rich rules:
25565のポートは解放されてますし、マスカレード設定もされてます。ポートフォワード設定もできてますのでログインサーバーの設定は終わりです。
25565ポートと8123ポートには知らないところからアクセスされると困りますのでリッチルールでログインサーバーからのパケットのみ許可しましょう。
***.***.***.***はログインサーバーのアドレスを入力しましょう。
[root@*** ~]# firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address="***.***.***.***" port port="8123" protocol="tcp" accept'
success
[root@*** ~]# firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address="***.***.***.***" port port="25565" protocol="tcp" accept'
success
設定を反映させます。
[user@*** ~]# firewall-cmd --reload
success
設定を確認します。
[root@133-130-116-112 ~]# firewall-cmd --list-all --zone=public
public (active)
target: default
icmp-block-inversion: no
interfaces: eth0
sources:
services: dhcpv6-client http
ports:
protocols:
masquerade: no
forward-ports:
sourceports:
icmp-blocks:
rich rules:
rule family="ipv4" source address="***.***.***.***" port port="8123" protocol="tcp" accept
rule family="ipv4" source address="***.***.***.***" port port="25565" protocol="tcp" accept
8123と25565のパケットを***.***.***.***からのアクセスであれば許可するようにできました。
plugins/dynmap/configuration.txtを書き換えます。
webserver-bindaddress: 0.0.0.0
設定を反映するためにコンソール等からリロードします。
/dynmap reload
以上の手順を踏めばMinecraftへログインするアドレスとDynmapのアドレスが一緒になったのではないでしょうか。
なお Teisyoku Server のDynmapはこちらです。
今回は隠匿がメインになりました。Dynmap以外にも使えると思いますし、「dynmap.minecraft.jp.net」などにしたければサブドメインに「dynmap」とかを割り当ててHTMLのiframe要素で埋め込むのも手軽で良いと思います。