LoginSignup
5
3

NintendoSwitch版MinecraftからアクセスするMinecraft統合版サーバを立てる

Posted at

はじめに

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アドレスです)

/etc/hosts
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スクリプトを用意して自動起動するようにしています。

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には以下のように書いてあり、公式サーバのうち選択するサーバによってアクセス先のサーバが変わります。

/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 は以下のような感じ。

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
docker-compose.yml
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スクリプトを用意して自動起動するようにしています。

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

5
3
0

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