【改造なし】Xbox One、スイッチ、PS4で特集サーバー以外に接続する方法

【改造なし】Xbox One、スイッチ、PS4で特集サーバー以外に接続する方法

数年前にWindows10、Xbox One、Nintendo Switch、iOS、Android等にてクロスプレイができるようにBetterTogetherアップデートが行われました。
それに伴って、統合版ユーザーが増えてきているように思います。
特にスイッチについては子供に大人気で、スイッチ版ユーザーをよく見かけます。
(あースイッチほしい…)
ですが今のところ、Xbox One、スイッチ、PS4では、特集サーバーにしか入れません!

あー残念だなぁって思った方も多いと思います。
ところが、海外の天才さんが改造なしでほかのサーバーにも入る方法を考え出していました!!
まだあまり知られていない方法なので、今回ご紹介したいと思います。

注意
今回紹介するのは、Switch等で特集サーバー以外の「統合版サーバー」に接続する方法です。
当記事では統合版でJava版サーバーに入る方法は紹介していません。
Java版と統合版でクロスプレイする方法についてはマイクラ統合版とJava版の完全なクロスプレイを実現する方法を参照してください。

任意の外部サーバーに入る方法

ぶっちゃけこの動画見ればすぐにできます。

※PS4ユーザーの方は次章を読んでください

英語版なのでわからないユーザーが多いと思いますので(じゃないと記事のネタが…)、日本語で大体のやり方を説明しようと思います。(と言っても筆者はWindows10版しか持っていないので、説明があいまいなところがあります)

<スイッチ>
①ホーム画面の「設定」を開きます
②左メニューから「インターネット」を選びます
③「インターネット設定」を選びます
④接続中のSSIDを選択して、「設定の変更」を選びます
⑤「DNS設定」を「自動」から「手動」に変えます
⑥「優先DNS」に「104.238.130.180」を入力します(ポイント!!)
⑦「代替DNS」に「8.8.8.8」を入力します
⑧「保存する」をタップして保存します

これで設定は完了です。次に実際にサーバーに接続してみましょう。

<すべてのゲーム機器共通の手順>
①マインクラフトを起動します
②「サーバー」タブを選択します
③「特集サーバー」のどれかに接続します(どれでもいいです)
④接続に完了すると、「ServerList」という画面が出てきます。
⑤「Connect to a Server」を選びます
⑥「Server Address」にサーバーのアドレスを、「Server Port」にサーバーのポート番号を入力します。
 (「Add to server list」をオンにすると、次回接続時に一覧として登録されます)
⑦「Submit」をタップします。

これでサーバーに接続されました!!

※DNSの設定をもとに戻すと、特集サーバー以外に接続できなくなります
 通常時はgoogleのDNS(8.8.8.8)を参照するので、そのままの設定でもほかのゲームはプレイできます。

(2021/10/24 追記)PS4で設定する

読者さんがコメント欄で、DNSの設定だけで任意のサーバーに入る方法を教えてくださいました。
「きんぎょ」さん、ありがとうございます!!

https://gaming-nerd.jp/ps4-dns/#h2-1を参考に、「プライマリ(DNS)」を「173.82.100.84」に変更します。

後は前章で書いた、「すべてのゲーム機器共通の手順」を実行します

(2020/05/09 追記)自分でBedrockConnectサーバーを建てる

DNSを使った方法で接続できない場合、自分で一時接続サーバーを建ててみましょう。

同じLAN内にいる人とマルチプレイする「LAN ゲーム」機能を利用して、任意のサーバーに接続するための一時サーバーに接続します。
以下の方法はインターネットに接続しているPC必須です!!
Windows前提で話を進めます。
また、JREが導入済みであると仮定して話を進めます。

https://github.com/Pugmatt/BedrockConnect/releasesから最新版のBedrockConnect-1.0-SNAPSHOT.jarをダウンロードします。

②ダウンロードしたファイルを、デスクトップ等にフォルダを作成して、その中に移動させます。

③そのフォルダをエクスプローラーで開いて、ファイルリストの何もないところで「Shift+右クリック」をして、メニューを開きます。

④「PowerShell ウィンドウをここで開く」を選択して、PowerShellを起動します。

⑤「java -jar BedrockConnect-1.0-SNAPSHOT.jar nodb=true」コマンドを実行して、ServerListサーバーを起動します。

これでPC側の準備は完了です。
ゲーム機に移ってください。

①Minecraftを起動して、「フレンド」タブを選択します。

②「LANゲーム」に表示されている「Join to open Server List」に参加します。

③あとは前章の「すべてのゲーム機器共通の手順」⑤からと同じです。

(2021/11/07 追記)起動用バッチファイルを作成する

毎回この作業をするのは面倒なので、バッチファイルを作って一クリックで起動できるようにしましょう!

①「メモ帳」を開きます

②以下の文字を入力します

@ECHO OFF
java -jar BedrockConnect-1.0-SNAPSHOT.jar nodb=true
pause

③「ファイル(F)」→「名前を付けて保存(A)…」で、bedrockconnectが入っているフォルダまで移動します

④「ファイルの種類(T)」で「すべてのファイル(*.*)」を選択して、「ファイル名(N)」に「start.bat」と入力します

⑤「保存(S)」します

これで起動用バッチファイルを作成できました!!
今後は「start.bat」をダブルクリックでServerListサーバーを起動できます。

仕組みについて考察

これだけじゃただ動画を日本語化しただけになってしまうので、仕組みについても考えていこうと思います。
興味のある方は見てってくださいね。

実はソースコードが公開されています。
https://github.com/Pugmatt/BedrockConnect
(このソースコードは一時接続するマイクラサーバーのソースコードだけです。DNSサーバーのソースコードは含まれてません)

オープンソースだと、たくさんの人のバグ修正もあり、ウイルスが含まれていないかのチェックも見ればすぐにできるのでちょっと安心ですね。(改造されたら別ですが)

DNS設定って何?

今回の肝となるのがあのDNS設定。
DNS設定では、参照するDNSサーバーを指定します。
「自動」にしておけば、自動で適切なサーバーを選んでくれます。

DNSサーバーは何をするのか?

通常、相手とインターネット通信をするときは、IPアドレス(111.222.111.222やABCD:EF01:2345:6789:ABCD:EF01:2345:6789)で接続先を判断して通信します。
いわば住所みたいなものです。
でも、これってただの数字の羅列だから、覚えにくいですよね?(IPv6アドレスなんて覚えられたらすごいですよ)

そこで考えられたのがDNSです。
DNSというのはIPアドレスと人が覚えやすい文字列(ドメイン)とを紐づけるシステムです。
例えば「google.co.jp」。
これはIPアドレスではないですが、DNSサーバーがこのドメインをIPアドレスに変換(正引きと言います)して、クライアント側に返して、そのIPアドレスを使い、目的のサーバーに接続できるようになります。
(DNSサーバーは一つのサーバーですべての情報を管理しているのではなくて、複数のサーバーで分散して検索を行います。)
DNSはそのような役割をしています。

なぜ別のサーバーに接続されるのか?

先ほどのセクションでDNSサーバーについて考えました。
DNSサーバーは、ドメイン(例: google.co.jp)をIPアドレス(例 : 2404:6800:4004:80d::2003、172.217.26.35)に変換する役割があります。

じゃあ、ドメインとIPアドレスの紐づけをDNSサーバーで変更すれば、接続先も変えれるのでは?

この方法を使ったのが、今回ご紹介した動画です。
試しにDNSサーバーを先ほど紹介したように設定し、hiveのドメインを正引きしてみました。(PCで検証しています)
(hiveのドメインは「hivebedrock.network」です)

見事に変わってますねー
このように特殊なDNSサーバーに接続すると、通常とは違う結果が返ってきます。
(ほかの特集サーバーも同様)

こうして、接続先を無理やり(?)変更しています。

一時接続サーバーの仕組み

BetterTogetherアップデートでクロスプレイができるように、プロトコル(通信の決まり)が統一されました。(と思う)
なので、スイッチでも、ほかのWindows10Editionやスマホ版と同じように統合版サーバーに接続できると考えられます。

書き換えられた接続先(104.238.130.180)には、統合版サーバーが建っています。(NukkitX Protocol Library使用)
よって、本来の特集サーバーに接続しようとすると、その一時サーバーに接続されることになります。

一時サーバーからほかのサーバーへ転送する仕組み

筆者はこれが一番気になりました。
ソースコードを読むと、以下のようなメソッドが見つかりました。

public void transfer(String ip, int port) {
    TransferPacket tp = new TransferPacket();
    tp.setAddress(ip);
    tp.setPort(port);
    session.sendPacketImmediately(tp);
}

GUIでボタンをタップされると、このメソッドやそれに近い処理で転送しているんだと思います。
HiveMCの各地域サーバー移動もこのような処理をしているのかな?(筆者の単なる推測です)

/*YouTube jQuery(".youtube").each(function() { if(jQuery(this).attr("data-src")){ var iframe = jQuery("