雑に書いてるので分かりにくいかと、すみません。
XboxやSwitchでの現行のマインクラフトは統合版(Bedrock Edition)である(かつてはXbox One版とSwitch版のそれぞれ専用版があった)。
なので、基本的な仕様はWindowsの統合版とほぼ同一なはずなのだが、CS機ならではのネットワークの方針なのか、外部サーバーに接続する際は「特集サーバー」という、事前にMSのほうでメニュー登録がされているサーバーにしか接続できない。
実はこの対処方法は有名で、YouTubeとか検索するとすぐに解決策が出てくる。
DNSサーバーとして特定のサーバーを指定することで回避できる。……が、そのサーバーはおそらく有志が提供しているものなので、セキュリティ的な面で使いたいと思いにくい部分がある。
というわけで、それらのサーバーが用いているソフトウェアの「Bedrock Connect 」を使用して自前のサーバーを建てることで対応する方法を紹介する。
なお、Xbox版の場合はLAN内にサーバーを建てるとLANサーバー扱いで接続して中継してくれるため、DNS変更すらしなくてよいので普通にメリットがある(PS5も多分これでいけるんじゃないかな?)。
Switch版は結局DNSの変更が必要だし、もう少し複雑になるので一般の人には難しいかも。一応後のほうでmacOSでの説明は書くけど覚書程度で、Windowsでは頑張ってくださいとしかいえない。
Linuxなら簡単なのでLinuxサブシステムだったかなんだったか使えば案外簡単かも?
さて本題。
まず、上記のリンクからBedrock Connectを入手してくる。
ただし、動作環境がJavaなので、Javaランタイムを別途入手 する必要がある。
(2023年2月28日追記)Java 8 は古いような気がするがまあパッチは当たっているので……かな。
ツールのシンプルな起動は以下のコマンドでよい。細かい使い方は英語で書かれているが、正直あんまりオプション弄る必要を感じない。
java -jar BedrockConnect-1.0-SNAPSHOT.jar nodb=true
PCでこうやって起動すると、XboxでのMinecraft起動時のワールド選択で、「フレンド」のところに「LANゲーム」として「join To Open Server List」が追加される。
選択すると「ServerList」が表示されるので、「Connect to a Server」を選んでIPなどを入力して、任意のサーバーに接続すればよい。
チェックを入れることで次回以降のためにサーバーの保存はできるが、サーバーに日本語名は使えない。ハイフンもダメなので素直に英数字でなんとかしよう。
ゲームしたいときは上のコマンドで都度起動の必要がある。パス移動も当然必要なので、こんな感じでコマンドを実行することになるだろう。スクリプト書いたほうが早いので後で書こうと思います。
cd ~/Documents/Minecraft_BedrockConnect
java -jar BedrockConnect-1.0-SNAPSHOT.jar nodb=true
で、問題のSwitchである。
SwitchはLANプレイの仕様が違っていて、LANサーバーとして見えない。
というわけで、自前でローカルなDNSサーバーを建てて、特集サーバーのホスト名から引かれるIPを自前のBedrock Connectサーバーに変更してやる形で中継するしかない。
Mac(やLinux)ならdnsmasqを使うのが一番楽だと思う。
brew install dnsmasqして、 設定ファイルの「 $(brew –prefix)/etc/dnsmasq.conf」の終わりに以下の行を追加する ホスト名は特集サーバーのホスト名なのでそのままにして、IPアドレスのところだけ自分のネットワークに応じて変更する。
DHCPで都度IPが変わると面倒くさいので、DHCP IDを使うかMACアドレス等で振られるIPを固定してやればよい。今どきのブロードバンドルーターなら設定で多分できるはず。
no-hosts
bogus-priv
address=/geo.hivebedrock.network/192.168.1.1
address=/hivebedrock.network/192.168.1.1
address=/mco.mineplex.com/192.168.1.1
address=/play.inpvp.net/192.168.1.1
address=/mco.lbsg.net/192.168.1.1
address=/mco.cubecraft.net/192.168.1.1
address=/play.galaxite.net/192.168.1.1
address=/play.pixelparadise.gg/192.168.1.1
no-hostsとbogus-privは環境によってはなくてもいいかも。
ちなみに、macOSだと特定のホストだけdnsmasqに問い合わせるみたいな設定が可能です。今回の件とはあまり関係ない。dnsmasqで検索すれば分かると思う。
んでもって、sudo brew services start dnsmasqしてサービス登録する。知らなかった。なにこれ便利。
なんだけど、最初sudoなしでやろうとしてハマった。権限不足でポートのリッスンに失敗するらしい。
ちなみに、macOSのファイアウォールをONで運用している場合、ちゃんと起動できたらファイアウォールで待ち受け許可するかどうか聞いてくれるので、ファイアウォールONにしてたほうが逆に分かりやすかった……。
ポートのリッスン状態は「sudo lsof -i -P | grep “LISTEN” 」で確認できる、ちょい時間かかるけど。
ゲームしたいときはこちらも動いてないといけない。(基本自動起動するはずだが、メッセージを見ると再起動時はユーザー権限で起動する的なことが書かれているのが不安……)
都度sudo brew services start dnsmasqしなきゃいけないかも。後日確認で。
で、もちろん、SwitchのDNSサーバーの変更も必要(インターネット接続のところで変更できるようになっている。優先を自前のサーバーにして、セカンダリはGoogle DNSの8.8.8.8とかにすればいいと思う)。
一応名前解決だけなので、他ゲーするときに自前サーバー経由する影響は少ないと思う。優先がダメなときはセカンダリになるわけだが、そのときの切り替わりはちょい問題かも。
正直Switchのほうの解決策はuglyだと思うけど、Xboxは実用的だよねと思っている。
とはいえWindowsがあれば必要ないかな……自宅の場合Windowsが動かせる一番よいマシンがSteam Deckで、動くには動くのだが、ファンが常に100%回るし画面は小さくてチャットするときtypoしまくりだし、見た目だけでも大きくしようとHDMIで外部ディスプレイにつなぐと音が本体から出てHDMIに回す方法が分からない(のでヘッドフォン端子からオーディオインターフェースに入れてた……)し……とか、わりと不便だったのでよさげなんですが。