誰かがポートチェックを実行し、開いているという言葉を見て、サーバーは解決済みと考える。その結果が実際に意味するのは限定的で、チェッカーの場所から、その瞬間に、そのアドレスとポートへのTCP接続が受け入れられたということだけである。Minecraftのプロトコルのハンドシェイクやアカウント認証、サーバーがプレイヤーをワールドに入れたかどうかについては何も語らない。

これらは四つの異なる層であり、どれか一つでも失敗すればプレイヤーからは「動かなかった」という同じ言葉が出る。

プローブは見えるものしか検査しない

TCP接続は、双方がスリーウェイハンドシェイクを完了したときに成立し、それはゲームが知っている何事よりも下の層にある。プローブが報告するのは、リスナーが存在し、そのネットワーク上の位置から応答したということだ。どんなプロセスでもポートを束縛して接続を受け入れられる以上、リスナーがゲームそのものだとは言えない。

場所は結果と同じくらい重要だ。公開インターネット上のチェッカーは、一つのネットワークから一つの経路を試す。運営者が同じネットワークの内側から実行するチェッカーは、まったく別の経路を試すのであり、そこの肯定的な結果は、遠隔のプレイヤーが何を経験しているかをほとんど語らない。別々のプロバイダーの別々のチェッカーが、あなたのサーバーとは無関係な理由で食い違うことさえある。

タイミングも重要だ。プローブの結果は実行した瞬間を記述しており、動的アドレスの家庭回線や変更された転送ルールは、本当の答えを数分後にずらすことがある。公開アドレス、ポート、アドレスファミリー、時刻を判定と一緒に記録しなければ、その観察は再現できない。同じ回線のスマートフォンからではなく、本当に別のネットワークからチェックを繰り返してほしい。

ソケットとプレイヤーの間にある複数の層

参加するクライアントが実際に行う順序を思い描いてほしい。まずアドレスを解決し、次に公開されたポートへTCP接続を開き、次にゲーム自身のプロトコルで交渉と認証を行い、最後にサーバーがその身元をワールドに入れてよいか決める。各層には固有の失敗の兆候があり、ポートチェッカーに見えるのは最初の層だけだ。

Java Editionの既定ポートは25565だが、運営者は別の外部ポートを公開して内側へ転送できるので、プレイヤーが入力する番号がサーバーの見る番号と同じとは限らない。誤った外部ポートに向けたチェッカーは、サーバーが完全に健全なのに閉じていると報告し、これがこの分野全体で最も多い誤警報だ。

名前はポートの上にもう一段階を加える。プレイヤーがホスト名を入力した場合、解決は公開アドレスを返さなければならず、ネットワーク内のマシンでは代わりにプライベートアドレスを返すことがある。それはファイアウォールの失敗ではなく、どれだけポート転送をしても変わらない。

内側のプレイヤーが別の経路を通る理由

同じLAN上、またはそのLANに到達するVPN上のプレイヤーは、内側から公開アドレスに届こうとする。要求はルーターの外部アドレスへ向かい、ルーターはそれを内側へ戻す翻訳をしなければならない。これが一般にヘアピンNATやNATリフレクションと呼ばれる構成で、往路の翻訳と復路の両方が噛み合う必要があり、多くの家庭用ルーターはそれをまったく実装していない。

だから外からのゲストは参加でき、サーバーの隣に座っている人はできない。外側の経路は本当に問題ない。失敗しているのは内側の回り道であり、プレイヤーの画面からはサーバーの問題のように見える形で失敗するが、翻訳されなかった接続は決してサーバーに届かないので、どちらが起きたかはサーバー自身のログが決める。

正直な修正は二つ、悪い習慣が一つある。良い選択肢は、内側のプレイヤーにプライベートアドレスまたはsplit-DNS名を使わせること、またはその機能があり正しく動作するならルーターでリフレクションを有効にすることだ。悪い習慣は、ポートをさらに開けたりホストのファイアウォールを無効にしたりすることであり、ルーターが一度も行っていない翻訳には影響しない。

NetgateのNATリフレクションのドキュメントは、外側と内側の区別およびsplit-DNSの代替をより詳しく説明している。これを仕組みの説明として読み、特定のVPNプロバイダーやルーターがすべてのループバック方式をサポートするという約束として読まないでほしい。

それぞれの視点から証拠を集める

テストごとに、誰が、どこから、何時に、どのアドレスとポートに対して実行したか、サーバーが何を記録したかを書き留める。サーバーコンソールに明確な理由のあるゲーム側の拒否は、決して到着しなかった接続とは別の所見であり、両者は逆方向に導く。

許可された遠隔のプレイヤーは参加でき、地元のプレイヤー一人だけが入れないなら、残る疑問はローカル経路であり、独自の調査に値する。クライアントがどのアドレスを使ったか、ルーターが翻訳をどう扱ったか、サーバーが接続の試行をそもそも記録したかという三つの事実を、ポートをでたらめに開け直すのではなくネットワークの所有者に渡してほしい。

関連記事