Synology NAS で Nintendo Switch用のマイクラサーバーをDockerでつくる

Posted: March 26, 2022


以前やろうと思ったら4000円くらいして意外と高かったので断念してたんですが、たまたまつけてたTVの有吉いいeeeeで「あ、目黒川だ。OGGIだ。チョコ食べたい」と思ってふと目を止めてしまって、その後おそらく雅叙園内でマイクラやってるところまで見続けてしまい、流れでその後にヒカキン見て、さらにSwitch公式のよいこの動画を見てすっかりやる気で購入しました。

プライベートな友人とプレイする共有サーバーは有料で契約するかホスティングするっていう知識は仕入れてたので、(ゲーム内でたいまつやベッドを作ることすらまだ出来てないのに)妻と一緒にやるのに無料でDockerで出来そうだなと思ったので設定した結果を書きます。

必要なもの

  • Minecraftサーバー用のDockerコンテナ
    • うちでは Synology NAS
  • DNSサーバー
    • うちでは SynologyのルーターのDNS機能
    • 無い場合はニンテンドースイッチ側でDNS設定しないといけない

1: Dockerサーバーの用意

Bedrock版のDockerイメージを用意します。

https://minecraft.fandom.com/ja/wiki/Bedrock_Edition

私は itzg/minecraft-bedrock-server (GitHub)を使いました。

以下はSynology NASでの参考設定手順になります。

1-1: Dockerパッケージのインストール

まずは「パッケージセンター」からDockerのパッケージをインストールします。

すると「メインメニュー」にDockerが追加されるので選択します。

1-2: マイクラ用のDockerイメージ・コンテナの設定

「レジストリ」タブから minecraft bedrock とかのキーワードで検索します。

星が多いやつがみんなが使っているものだと思いますが、安易に選択するのはセキュリティリスク高くて怖いので一応GitHubやDocker Hubで作者や構成を確認することをおすすめします。

Docker registry

イメージをダブルクリックするとバージョンタグの選択がでるので適当なバージョンや latest を選択してください。

ダウンロードが完了すると「イメージ」タブのリストに表示されるようになるのでダブルクリックするか「起動」を選択してください。

Docker image

全般設定のコンテナ名やリソース制限は適当に設定してください

(うちは最大プレイ人数は2~3人、MOD等は入れずに素のままで動かすので最低要件の1GBにしました)

詳細設定では以下のようにしています(itzg/docker-minecraft-bedrock-server の設定なので他のイメージでは微妙に異なる可能性大)

  • ボリューム
    • docker/minecraft : /data (rw)
    • /data 以下を保存しておかないと再起動毎にリセットされてしまうと思うので適当なパスに保存
  • ネットワーク
    • bridge のまま
  • ポート設定
    • ローカルポート: 適当に固定しておく。特にこだわりがなければ分かりやすいように 19132
    • コンテナのポート: デフォルトで 19132 が指定されてるはずなのでそのまま
    • タイプ: UDP
  • リンク
    • なし
  • 環境

設定し終わったらそのまま起動させてください。(「次へ」→「適用」)

すると「コンテナ」タブのリストに追加されるので、該当コンテナをダブルクリックし、「ログ」でログみたり「端末」で新規作成してシェルからコマンド叩いてみて状況を確認してください。

うちの環境だと初回起動は30~50秒程度で終わりました。

2: DNSサーバー

iOS版とかではそのままDockerのIPアドレスとポートを指定すれば動くようですが、Nintendo SwitchのようなCSゲーム機では指定されているサーバー以外繋げないようなので一工夫必要なようです。

メジャーな方法として、BedrockConnectサーバーを自身で建てるか、公開されているものに繋ぐ必要があります。

https://github.com/Pugmatt/BedrockConnect

多くの記事で紹介されている方法は Pugmatt さんがメンテしている 104.238.130.180 に繋ぐ方法です。

ここでもこの方法で設定を進めます。

Switch本体のDNS設定を変更するでも良いですが、セキュリティリスク面と機器分の設定変更が必要になるため、DNSサーバー側の設定で解決できるようにします。

幸いな事にSynologyのルーターやNASにはDNSアプリが入ってるのでそれを使います。

(DNS設定や正引きの解決ができない場合は、自身でDNS(キャッシュ)サーバーを立てるかSwitch本体の設定変更をする必要があります)

2-1: DNSサーバーパッケージのインストール

まずはSynologyルーター(またはNAS)のパッケージセンターからDNSサーバーをインストールします。

2-2: DNSサーバー設定: リゾルバ

「メインメニュー」にDNSサーバーが追加されたら開き、まずは「解決」タブを開きます。

そして以下の項目をチェックします。

  • 「解決機能を有効にする」
  • 「フォワーダーを有効にする」
    • フォワーダ1, 2 は適当に設定します(例: Googleのやつ 8.8.8.8 Cloudflareのやつ 1.1.1.1
    • 転送ポリシーはフォワーダのダウン時のフォールバックポリシーのようなので好きな方を選択してください。

2-3: DNSサーバー設定: ゾーン

次に「ゾーン」タブを選択し「作成」から「Master ゾーン」の作成をします。

  • ドメインタイプ
    • 正引きゾーン (マイクラ特集サーバーのドメインからIPアドレスを解決するため)
  • ゾーンID
  • マスターDNSサーバー: Synologyルーター(またはNAS)自身のIPアドレス
    • 例: 192.168.0.1
  • シリアル番号のフォーマット
    • どちらでも良い
    • RFC1912では日付ベースの値が推奨されているようですが、このケースでは整数値で問題ないと思います
  • ゾーン転送の制限, ソースIPサービスを制限する, ゾーンアップデートの制限
    • 宅内LANでしか使わないと思うので適当に制限してください
    • (外部公開しなければ、そこまで頑張って設定しなくても良さそうだが)

「OK」を押して作成すると一覧にゾーンが追加されるので、そのゾーンを再度ダブルクリックで選択します。

既にデフォルトのネームサーバーが設定されていますがそれは無視して、「作成」から 「A Type」(Aレコード)を追加します。

  • 名前
    • ゾーンIDにサブドメインまで含めたFQDNを指定した場合は空で良い
    • ゾーンIDにサブドメインを含めなかった場合は適宜指定してください
      • 例: ゾーンIDに [inpvp.net](http://play.inpvp.net) だけ指定しているので、「名前」には play を入力
  • TTL
    • 適当に秒数を指定します
    • 頻繁にいじるなら数分程度(120とか300とか)を指定した方が良いかも
  • IPアドレス

これで準備は整いました。

digコマンド等でうまく設定されているか確認します。

↓の例ではANSWERセクションに正しく設定されています

# dig <特集サーバーのドメイン> @<DNSサーバー>
$ dig play.inpvp.net @192.168.0.1

;; ANSWER SECTION:
play.inpvp.net.		300	IN	A	104.238.130.180

;; ADDITIONAL SECTION:
ns.play.inpvp.net.	86400	IN	A	192.168.101.1

# うまくDNS設定されていない場合は↓みたいになる
# ;; ANSWER SECTION:
# play.inpvp.net.		5	IN	A	52.170.155.8

3: スイッチの起動と接続

スイッチのマイクラを起動し、Nintentdoアカウント(おそらくOnline契約必須)とMicrosoftアカウントでログインします。

「遊ぶ」を選択し、「サーバー」タブから「Mineville」を選択します。 (正常にDNSが設定されている場合「Join to Open Server List」というサブタイトルが表示されているはず) この時、「選択したサーバーの接続状態が不安定です。」のような注意書きが出ますがそのまま「参加」をします。

「サーバーに参加する」を選ぶとサーバーリスト画面になるので「Connect to a Server」を選びます(初回)

「Server Address」IPアドレスを入力し(例: Dockerを起動しているSynology NASのもの, 192.168.0.2)、Server PortにDockerホストのローカルポートを設定します(デフォルトでは19132) 「Display name」には適当な名前をつけて、「Add to server list」はOnにします。 そうすると2回目以降は下部の一覧に表示されるのでそこから選択することができます。

これで新しい世界へ接続することができます。

Sleepすると毎回接続が切れる事以外は割と

追記

ようやくたいまつを作る事ができました。