マイクラ統合版のサーバを自分で立ててSwitchから接続する方法

# はじめに
Nintendo Switch 版のマインクラフトでは、Realms と言われる公式サーバか、または、特集サーバと呼ばれるサーバにしか外部サーバへの接続ができません。

自前でサーバを立てて、そのサーバに Switch からつなげるということができないのです。

ここでは、LAN内に自前でサーバを立てて、そのサーバに Switch から入ってみることを試みます。

# とりあえず
Nintendo Switch から特集サーバ以外のサーバに入る裏ワザは色々と公開されていますが、詳しくは "マイクラ 104.238.130.180" などでググってみてください。以下ではこの方法を知っていることを前提としています。

ここではこのアドレスを使わず、LAN内で完結するようにします。

# 注意書き
広く知られている Nintendo Switch から特集サーバ以外のサーバに入る裏ワザにしろ、ここで紹介する方法にしろ、推奨されているものではありません。

私もこの方法を推奨するわけではなく、技術的には可能という意味でここに書きます。実行する場合は自己責任でお願いします。

# 構成
ざっくりとしたイメージはこんな感じ。
![minecraft_switch.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449620/2e3ce879-1b4d-173f-5091-d19e62299309.png)
Nintendo Switch からDNSサーバへ特集サーバのIPアドレスの問い合わせを行いますが、そのDNSサーバを自分で立てておくことによって、特集サーバのIPアドレスを偽り、これまた自分で稼働させておいた BedrockConnectサーバへと導きます。そして BedrockConnectサーバからこれも自分で立てたマイクラサーバへと接続してもらいます。

# 環境構築していきます
## Raspberry Pi
別になんでもいいのですが、DNSサーバとBedrockConnectサーバは Raspberry Pi に担当してもらうことにしました。実際に使用したのは Raspberry Pi 3 Model A+ ですがどの機種でも問題ないと思います。

### IPアドレス固定

最初に IPアドレスを固定しておいた方が便利です。
以下を最後に追加します。それぞれの環境に合わせて設定してください。

```shell:/etc/dhcpcd.conf
interface wlan0
static ip_address=192.168.0.XXX/24
static routers=192.168.0.1
static domain_name_servers=192.168.0.1
```

設定したら再起動して、IPアドレスが設定どおりになっているか確認。

### DNSサーバ
DNSサーバには dnsmasq を使います。とりあえずインストール。

```shell:RaspberryPi
$ sudo apt install dnsmasq
```

設定ファイルの編集。上位サーバはご自分の環境に合わせて適当にどうぞ。
（設定ファイルが長いので必要な所だけ記載）

```shell:/etc/dnsmasq.conf
domain-needed   //コメントアウト外す
bogus-priv      //コメントアウト外す
server=8.8.8.8  //上位サーバ追加（その1）
server=8.8.4.4  //上位サーバ追加（その2）
log-queries     //ログ出力する場合コメントアウト外す
```

IPアドレス返答用のテーブルは `/etc/hosts` でいいらしい。
ここに特集サーバ名と転送先であるこれから立てるBedrockConnectサーバのIPアドレス（ようするに Raspberry Pi のアドレス）を追加。
（特集サーバが変わればここに追記が必要）

```shell:/etc/hosts
#minecraft
192.168.0.XXX    geo.hivebedrock.network
192.168.0.XXX    play.galaxite.net
192.168.0.XXX    mco.mineplex.com
192.168.0.XXX    mco.cubecraft.net
192.168.0.XXX    play.pixelparadise.gg
192.168.0.XXX    mco.lbsg.net
192.168.0.XXX    play.inpvp.net
```

設定ができたら DNSサーバを再起動

```shell:RaspberryPi
$ sudo systemctl restart dnsmasq
```

ログを確認するならこんな感じ。

```shell:RaspberryPi
$ cat /var/log/syslog | grep dnsmasq
```

### BedrockConnectサーバ
BedrockConnectサーバとはようするに、マイクラを自前サーバにつなげるための一時サーバのような感じです。これは [こちら](https://github.com/Pugmatt/BedrockConnect/releases) で公開されています。

BedrockConnectサーバは JAVAで動くようなので、まずは JAVAのインストール。

```shell:RaspberryPi
$ sudo apt install default-jdk-headless
```

で、上記から `BedrockConnect-1.0-SNAPSHOT.jar` をダウンロードして、適当な場所に保存。
保存したディレクトリに移動して、以下のように起動。シェルスクリプトにしてしまったり、Raspberry Pi 起動時に起動するようにしてしまったりしてもいいと思います。

```shell:RaspberryPi
$ java -jar BedrockConnect-1.0-SNAPSHOT.jar nodb=true
```

Raspberry Pi はここまで、続いて Windows PC でマイクラサーバを立てます。

## Windows PC
### マインクラフト（統合版）サーバ
Ubuntu版でもいいのだけど、Windows版の方が起動が簡単そうだったので Windows版にしました。
サーバも公式のアルファ版を使用。非公式サーバを使うのもお好みで可能と思います。

* サーバソフトを [こちら](https://www.minecraft.net/ja-jp/download/server/bedrock) からダウンロード
* 適当なフォルダに保存して解凍
* bedrock_server.exe を実行

これだけです。サーバの設定は `server.properties` にあるので、中身を調べていじってみても面白いと思います。

## Nintendo Switch
本体のインターネット設定を変更した後、マイクラを始めてさらにひと手間必要です。

### 本体設定
* ホーム画面の「設定」を選択
* 左メニューから「インターネット」を選択
* 「インターネット設定」を選択
* 接続中のSSIDを選択して、「設定の変更」を選択
* 「DNS設定」を「自動」から「手動」に変更
* 「優先DNS」に上記で設定した Raspberry Pi の IPアドレスを入力
* 「代替DNS」はご自身の環境に合わせて適切なものを入力（わからなければ "8.8.8.8" とか）
* 「保存する」を選択

### マインクラフト
* マインクラフトを起動
* 「サーバー」タブを選択
* 「特集サーバー」のどれかに接続（/etc/hosts に記載したやつ）
* ここまで成功していれば「ServerList」という画面が出てくるはず
* 「Connect to a Server」を選択
* 「Server Address」にマイクラサーバ動いているPCのIPアドレスを入力<br/>
（ポートなどを変えていればそちらも入力）<br/>
（「Add to server list」をオンにすると一覧にも登録される）
* 「Submit」を選択

これでサーバに接続されてマイクラが始まるはずです。

# まとめ
最初に書いたように、これらの手順で Switch を外部に接続することは推奨されていないです。「こうやりましょう」というより「こんなことも技術的には可能」という意味合いで読んでください。もし本当にやるとすれば自己責任でお願いします。

DNSサーバを "104.238.130.180" にする方法では、特集サーバ以外のサーバを別サーバに誘導されていたりしても分かりにくいですが、この方法であれば、自分でDNSサーバを立てるということでそのような心配はなくなるのではないかと思います。
（この方法を推奨しているわけではないです。いや、本当に、、）