ローカルDNSサーバーを構築しNintendo Switch版マインクラフトで外部サーバーに接続する方法

# はじめに
Nintendo Switchのマインクラフトは、特集サーバー以外に接続することはできません。

［BedrockConnect］によって提供されているDNSサーバーをNintendo Switchに設定することでこの問題は解決するのですが、サーバーがアメリカに存在しているため、接続が不安定というデメリットがあります。
[GitHub - Pugmatt/BedrockConnect: Join any Minecraft Bedrock Edition server IP on Xbox One, Nintendo Switch, and PS4/PS5](https://github.com/Pugmatt/BedrockConnect#publicly-available-bedrockconnect-instances)

そこで、ローカルにDNSサーバーを構築することでこの問題を解消します。

# ネットワーク環境
|    |  IPアドレス  |  ポート番号  |
| ---- | ---- | ---- |
|  ルーター(デフォルトゲートウェイ)  |  192.168.0.1  |    |
|  Windows10マシン  |  192.168.0.200  |    |
|  マインクラフト統合版サーバー  |  192.168.0.200  |  19132  |
|  DNSサーバー  |  192.168.0.254  |  53  |
|  Nintendo Switch  |  192.168.0.xxx (DHCP)  |    |

# 用意するモノ
* Windows10がインストールされたマシン
* Ubuntu 22.04がインストールされた仮想マシン (今回はWindows10マシン上のHyper-Vにインストールしています。)

# 使用するプログラム
* dnsmasq
* ufw

# 事前準備
## 1. Ubuntu仮想マシンを仮想スイッチに接続する
Hyper-Vを起動し［仮想スイッチマネージャー］を開きます。
![スクリーンショット 2023-02-24 140307.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1140967/ad69aed9-89ae-89de-97a5-45c4eb300db0.png)

［新しい仮想ネットワークスイッチ］から［外部］の仮想スイッチを作成します。
![スクリーンショット 2023-02-24 140511.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1140967/040b0f76-7149-4885-4a57-329d00e7c011.png)
![スクリーンショット 2023-02-24 140638.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1140967/995b6e32-31fe-e623-ec86-2803a3158d48.png)

次に、ネットワークアダプタの設定画面を開きます。
［名前を指定して実行］で［ncpa.cpl］と入力し実行します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1140967/c93b2efc-75d9-5367-67ac-8fb6ca8640d1.png)

一覧に先ほど作成した［Externa Switch］が表示されているのでダブルクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1140967/f367c92d-e25f-7a7a-4db3-99bbc084fe50.png)

［プロパティ］ > ［インターネット プロトコル バージョン4 (TCP/IPv4)］をダブルクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1140967/3c3e3384-20b3-c0d7-7dfd-955b5f92531a.png)

下図の通り設定を変更し［OK］ボタンをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1140967/da636ab5-7cc3-abcc-0f3d-28ace0a1774e.png)


## 2. Ubuntu仮想マシンのIPアドレスを固定する
```bash
nano /etc/netplan/00-installer-config.yaml
```
下記の通り編集します。
※IPアドレス、デフォルトゲートウェイは環境にあわせて適宜変更してください。
```bash:00-installer-config.yaml
network:
  ethernets:
    eth0:
      addresses:
        - 192.168.0.254/24
      nameservers:
        addresses: [8.8.8.8, 8.8.4.4]
      routes:
        - to: default
          via: 192.168.0.1/24
  version: 2
```
変更を適用します。
```bash
netplan apply
```

## 3. デフォルトルートを追加する
```bash
ip route add default via 192.168.0.1 dev eth0
```

## 4. ファイアウォールの許可設定を追加する
```bash
ufw allow 53
ufw enable
```

# DNSサーバーを構築する
## 1. dnsmasqをインストールする
```bash
apt install -y dnsmasq
```

## 2. コンフィグを編集する
```bash
nano /etc/dnsmasq.conf
```
最下部に下記の4行を追記します。
```bash:dnsmasq.conf
domain-needed
bogus-priv
strict-order
bind-interfaces
```

## 3. hostsを編集する
hostsファイルを編集し、特集サーバーへのアクセスを、ローカルに立てたマインクラフト統合版サーバーに向けます。
```bash
nano /etc/hosts
```

```bash:hosts
192.168.0.200 geo.hivebedrock.network
192.168.0.200 play.galaxite.net
192.168.0.200 mco.mineplex.com
192.168.0.200 mco.cubecraft.net
192.168.0.200 play.pixelparadise.gg
192.168.0.200 mco.lbsg.net
192.168.0.200 play.inpvp.net
```

## 4. dnsmasqサービスを再起動する
```bash
systemctl restart dnsmasq
```

## 5. DNSサーバーの動作確認をする
Windows10マシンの優先DNSサーバーを変更して動作確認をしてみましょう。
下図の［優先DNSサーバー］を、さきほど構築したDNSサーバーのIPアドレス(192.168.0.254)に変更し［OK］ボタンをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1140967/6b7d5ed8-83db-ddf0-057e-7cd8c5357dab.png)

コマンドプロンプトを起動しDNSキャッシュをクリアします。
```
ipconfig /flushdns
```

続いて特集サーバーのドメインにpingを送信します。
192.168.0.200からの応答が返ってきたら動作確認は成功です。
```
ping play.galaxite.net
```

# Nintendo Switchのインターネット設定を変更する
Nintendo Switchの設定画面を開き、［インターネット］ > ［インターネット設定］へ進みます。
![IMG_6038.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1140967/fe811d94-ef74-0d42-cb50-da1add2a2f57.png)

［設定の変更］を押します。
![IMG_6039.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1140967/0f7038ef-ecc9-e772-f2b2-fdaf98baf260.png)

［優先DNS］をさきほど構築したDNSサーバーのIPアドレスに変更します。
![IMG_6040.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1140967/516284a5-040c-3834-230b-e84b12bfb95e.png)

最後に、念のためNintendo Switch本体を再起動し完了です！

# 参考サイト
[【マイクラ】スイッチから統合版サーバーへ安全に接続：家庭内用 | ううら.site](https://uura.site/switch-minecraft-server/)