はじめに
2023年夏頃から自宅サーバで動作させているMinecraft統合版サーバについてまとめてみました。
まとめたといっても、各ソフトウェアの設定方法などは他サイトの説明に譲って、工夫した点の説明が中心です。
NintendoSwitch からアクセスしたいため一工夫しています。
自宅内からは、自宅内にDNSサーバを建てて公式サーバをだまして直接アクセス。
自宅外からは、VPS上にDNSサーバを建ててVPS経由でアクセスするようにしています。
なお、本記事はMarkdown記法の練習とPlantUMLでネットワーク構成を書いてみる練習も兼ねてます。
ネットワーク構成
インターネットからのアクセスは、すべてVPSで受け付けてMinecraftサーバへのアクセスをVPNで接続した自宅サーバに転送しています。
IPアドレス | ポート番号 | 備考 | |
---|---|---|---|
VPS | XXX.XXX.XXX.XXX | 19132 | BedrockConnect用 |
XXX.XXX.XXX.XXX | XXXXX | サバイバルモード用 | |
XXX.XXX.XXX.XXX | YYYYY | クリエイティブモード用 | |
10.0.1.1 | VPN | ||
自宅サーバ | 10.0.1.15 | 19132 | サバイバルモード用(VPN) |
10.0.1.15 | 19232 | クリエイティブモード用(VPN) | |
192.168.1.15 | 19132 | BedrockConnect用(自宅LAN) | |
192.168.1.24 | 19132 | サバイバルモード用(自宅LAN) | |
192.168.1.25 | 19132 | クリエイティブモード用(自宅LAN) |
以下は伏字にさせていただいています。
XXX.XXX.XXX.XXX: VPSに割り当てられたグローバルIPアドレス
XXXXX: サバイバルモード用ポート番号
YYYYY: クリエイティブモード用ポート番号
利用するアプリケーションなど
OS
自宅サーバ: ubuntu 20.04LTS
VPS: AlmaLinux 8.7
BedrockServer
Minecraft統合版のサーバソフト
以下からWindowsまたはLinux(ubuntu)用のバイナリが入手できます。
https://www.minecraft.net/ja-jp/download/server/bedrock
今回は自宅サーバ上でdocker-composeで起動します。
BedrockConnect
Nintendo switch版 Minecraft でサーバ選択できるようにするソフト。
以下にて公開されています。
https://github.com/Pugmatt/BedrockConnect
(Javaで書かれているのでちょっとだけソース読んでみましたが、そんな難しいことはやってなさそう)
今回はVPSと自宅サーバ上で起動してます。
dnsmasq
簡易DNSソフト
/etc/hostsの内容をDNS queryに対して返してくれるのでちょっとしたDNSサーバを建てたいときはこれが楽かと。
BedrockConnectの公開サイトでDNSサーバも用意されていますが、だれが管理しているのかわからないDNSサーバを信頼して利用するのはさすがに怖いので自分で建てます。
NintendoSwitchのネットワーク設定でDNSサーバとして自分で建てたDNSサーバのIPアドレスを指定しています。これによりNintendoSwitchから公式サーバへのアクセスをMinecraft統合版サーバに誘導してます。
今回はVPS(外部からのアクセス用)と自宅サーバ(自宅内からのアクセス用)上で起動してます。
wireguard
比較的新しいOSSのVPNソフトウェア
https://www.wireguard.com/
自宅サーバとVPSの接続用に使用しています。
フロントエンドサーバ(VPS)の設定
Wireguard によるVPN
今回のメインはVPN設定ではないので詳細は省略しますが、VPS側にはIPアドレス10.0.1.1を割り当ててサーバとして起動しておいて、自宅サーバ(10.0.1.15)からVPN接続するようにしています。
ポート開放(Firewalld)
以下のポートを開放してます。
DNS用に 53/udp
マイクラサーバ用のudpポート (サバイバルサーバ、クリエイティブサーバ、BedrockConnect用の3つ)
Wireguard用のポート
サバイバルサーバ、クリエイティブサーバのポートへのアクセスは、Firewalldで自宅サーバへの転送も行います。
以下のような感じでVPSの特定のudpポートに来たアクセスを自宅サーバに転送するようにしています。
forward-ports:
port=XXXXX:proto=udp:toport=19132:toaddr=10.0.1.15
port=YYYYY:proto=udp:toport=19232:toaddr=10.0.1.15
インターネットからMinecraft統合版サーバへのアクセスはすべてVPS経由です。
VPS経由にすることにより自宅(ルータ)のポートは一切解放せずに済んでいます。
DNSサーバ(dnsmasq)の設定
自宅外からのアクセス用にVPS上にDNSサーバを建ててあり、NintendoSwitchのネットワーク設定でDNSサーバとしてVPSのIPアドレスを指定しています。これによりNintendoSwitchから公式サーバへのアクセスをVPSに誘導してます。
パッケージを導入後、設定ファイル(/etc/dnsmasq.conf)を修正してサービス起動するだけ。
/etc/hostsに以下のような記載をして公式サーバのIPアドレスをVPSのグローバルIPアドレスとして返却するように設定してあります。(XXX.XXX.XXX.XXXはVPSに割り当てられているグローバルIPアドレスです)
XXX.XXX.XXX.XXX geo.hivebedrock.network
XXX.XXX.XXX.XXX play.galaxite.net
XXX.XXX.XXX.XXX mco.mineplex.com
XXX.XXX.XXX.XXX mco.cubecraft.net
XXX.XXX.XXX.XXX play.pixelparadise.gg
XXX.XXX.XXX.XXX mco.lbsg.net
XXX.XXX.XXX.XXX play.inpvp.net
NintendoSwitchのネットワーク設定で、自宅外の場合はDNSサーバにXXX.XXX.XXX.XXXを指定することにより、公式サーバにアクセスしようとするとVPS上のBedrockConnectに繋がるようにしています。
このDNSサーバのためにVPS上で53/udpをインターネットに公開している点が不安。
BedrockConnect の設定
配布サイト(https://github.com/Pugmatt/BedrockConnect) から取得した最新のBedrockConnect-1.0-SNAPSHOT.jarを/home/minecraft/BedrockConnect/に配置。
以下のserviceスクリプトを用意して自動起動するようにしています。
[Unit]
Description=Minecraft Bedrock Connect Server
After=network.target local-fs.target
[Service]
Type=simple
User=minecraft
Group=games
WorkingDirectory=/home/minecraft/BedrockConnect
Environment=LD_LIBRARY_PATH=.
ExecStart=java -jar /home/minecraft/BedrockConnect/BedrockConnect-1.0-SNAPSHOT.jar nodb=true language=/home/minecraft/BedrockConnect/language.conf custom_servers=/home/minecraft/BedrockConnect/serverlist.json whitelist=/home/minecraft/BedrockConnect/whitelist.conf
Restart=yes
[Install]
WantedBy=multi-user.target
whitelist.confには身内アカウントのみ記載。アクセスを限定してます。
Mincraft統合版サーバを動作させるサーバの設定
WireguardによるVPN
今回のメインはVPN設定ではないので詳細は省略しますが、自宅サーバ側にはIPアドレス10.0.1.15を割り当ててVPS(10.0.1.1)にVPN接続するようにしています。
DNSサーバ(dnsmasq)の設定
子供たちのNintendo switch用に自宅内からのアクセスは宅内DNSをたててMinecraftサーバに誘導してます。
/etc/hostsには以下のように書いてあり、公式サーバのうち選択するサーバによってアクセス先のサーバが変わります。
192.168.1.24 play.galaxite.net # my-server
192.168.1.25 mco.lbsg.net # my-creative
192.168.1.15 play.inpvp.net # BedrockConnect
IPアドレスの割り当て
Minecraft統合版サーバを建てるホストのIPアドレスは192.168.1.15なのですが、NintendoSwitchから直接アクセスできるようにするために以下2つのIPアドレスを割り当てています。
- 192.168.1.24
- 192.168.1.25
Minecraft統合版サーバ(BedrockServer)は上記のIPアドレスで起動するように設定します。
Minecraft統合版サーバ(BedrockServer)の設定
BedrockServer
docker-composeにて起動してます。
再起動すれば新バージョンのチェック&更新ができるので便利。
クリエイティブモードのサーバと
サバイバルモードのサーバの2つ起動しています。
自宅内向けには、ポート番号は19132でIPアドレスを変えて
外部向け(VPSからのアクセス向け)には、IPアドレスは10.0.1.15でポート番号を変えて起動しています。
docker-compose.yml は以下のような感じ。
version: '3.4'
services:
my-server:
container_name: my-server
restart: always
image: itzg/minecraft-bedrock-server:latest
environment:
SERVER_NAME: my-server
EULA: "TRUE"
GAMEMODE: survival
DIFFICULTY: normal
LEVEL_NAME: my-server
TZ: Asia/Tokyo
ports:
- 192.168.1.24:19132:19132/udp
- 10.0.1.15:19132:19132/udp
volumes:
- /home/minecraft/my-server/data:/data
stdin_open: true
tty: true
portsでIPアドレスを明示的に指定しているところがポイントです。
- クリエイティブモードのBedrockServer
version: '3.4'
services:
my-creative:
container_name: my-creative
restart: always
image: itzg/minecraft-bedrock-server:latest
environment:
SERVER_NAME: my-creative
EULA: "TRUE"
GAMEMODE: creative
DIFFICULTY: normal
LEVEL_NAME: my-creative
TZ: Asia/Tokyo
ports:
- 192.168.1.25:19132:19132/udp
- 10.0.1.15:19232:19132/udp
volumes:
- /home/minecraft/my-creative/data:/data
stdin_open: true
tty: true
portsでIPアドレスを明示的に指定しているところがポイントです。
また、自宅外からのアクセス(VPSからのアクセス)はサバイバルモードと分けるためにポート番号を変えています。
BedrockConnectの設定
自宅内でも公式サーバをだましているので、公式サーバにアクセスしたくなった時のためにBedrockConnectも用意しています。
配布サイト(https://github.com/Pugmatt/BedrockConnect) から取得した最新のBedrockConnect-1.0-SNAPSHOT.jarを/home/minecraft/BedrockConnect/に配置。
以下のserviceスクリプトを用意して自動起動するようにしています。
[Unit]
Description=Minecraft Bedrock Connect Server
After=network.target local-fs.target
[Service]
Type=simple
User=minecraft
Group=users
WorkingDirectory=/home/minecraft/BedrockConnect
Environment=LD_LIBRARY_PATH=.
ExecStart=java -jar /home/minecraft/BedrockConnect/BedrockConnect-1.0-SNAPSHOT.jar nodb=true language=/home/minecraft/BedrockConnect/language.conf custom_servers=/home/minecraft/BedrockConnect/serverlist.json whitelist=/home/minecraft/BedrockConnect/whitelist.conf bindip=192.168.1.15
Restart=always
[Install]
WantedBy=multi-user.target
bindip=192.168.1.15 を指定して、IPアドレス192.168.1.15:19132をbindするようにしている点がポイントです。
まとめ
BedrockServerに割り当てるIPアドレスとポート番号を分けて自宅外/自宅内のアクセスを分けていますという説明でした。
参考にした情報
http://www.terasol.co.jp/linux/8122
https://supilog.supisupi.com/blog/7w9btr97kaj8/
https://qiita.com/manontroppo1974/items/78f4b1b8d81694f9fd4a
https://bitto.jp/ubuntu-minecraft-bedrock-server/
https://internet.watch.impress.co.jp/docs/column/shimizu/1492072.html