10G光クロス(MAP-E)の罠。自宅サーバーで「開放できるポート番号」を自力で割り出す計算式と突破術

この記事は約10分で読めます。

1. なぜあの時「50080」だったのか?MAP-Eのブラックボックスを暴く

以前の記事で、私たちは「中継VPS(固定IPv4/443番)」から「自宅サーバーのMAP-E制限ポート(50080など)」へリバーストンネルを掘り、見事に自宅WordPressをリバースプロキシ(以下「串」)経由で世界に公開することに成功しました。
あの時、ルーター(HGW:XG-100NEなど)の設定画面を開き、利用可能なポートとして表示された「50080」や「64975」という、妙に中途半端でニッチな数字をそのまま言われるがままにコピペして使ったのを覚えているでしょうか。
動いたからヨシ!……ではありますが、インフラ好き、サーバーオタクとしては、どうしても一つの疑問が頭を離れないはずです。

「なぜ、私の家には『50080番』なんていう奇妙なピンポイントの数字が割り当てられたんだ?」

従来のPPPoE接続であれば、0〜65,535番までのすべてのポートを1人で丸ごと占有できました。しかし、現代の爆速10G回線を支えるMAP-E(IPv4 over IPv6)環境では、1つのグローバルIPv4アドレスを同じ地域の複数ユーザーで切り売り(シェア)しています。そのため、全員が使いたがる80番や443番は塞がれ、代わりに「1人あたり240個前後」の飛び飛びのポートが強制的に割り振られます。

前回は、ルーターの設定画面に「たまたま表示されていた数字」をそのまま使いました。しかし、ルーターが頑なに隠している、あなたが使える「残りの230個以上のポート」が一体何番なのか、その全貌はブラックボックスのままでした。
実は、この飛び飛びのポート番号は、ランダムに選ばれているわけではありません。あなたのルーターの奥底に眠る「PSID(ポート制御符号)」という鍵をもとに構成された、緻密な『16進数のパズル』によって完全に決定されています。
つまり、数式さえ知っていれば、ルーターの画面を見ずとも、自分が使えるすべてのポート番号を自力で、かつ100%正確に割り出すことができるのです。

今回は、前回の配管構築からさらに一歩踏み込み、MAP-Eのポート制限の裏側を完全にハックします。「なぜあのポート番号だったのか」という伏線を完璧に回収し、自宅のモンスターインフラをロジックで支配する快感を味わい尽くしましょう!

2. 基礎知識:1つのIPを256人で分ける「ポート数240個」のカラクリ

自力でポートを割り出す前に、まずはMAP-Eが裏側でやっている「ポートの切り売り」の仕組みを正しく理解しておきましょう。ここを掴んでおくと、後半の計算式が驚くほどスッと頭に入ってきます。

通常、1つのIPv4アドレスには 0 から 65,535 まで、合計 65,536個 のポートが存在します。
MAP-Eでは、この膨大なポートを地域のユーザー256人で均等に分配するわけですが、ここにネットワーク特有の「あるルール」が適用されます。

1. ウェルノウンポート(0〜1023)は全員一律で「使用禁止」

Webサーバーの標準である80番や443番、SSHの22番などを含む 0〜1,023 番(最初の1,024個)は、誰か1人に渡すと不公平になるため、MAP-E環境では全員一律で開放不可能な「禁止領域」として一瞬で除外されます。
つまり、実際にユーザーに配られるのは、残りの 1,024〜65,535 番の領域です。

2. 残った領域を256人で分ける「ポート数240個」のカラクリ

禁止領域を除いたポートを全体のユーザー数(256人)で単純に割り算してみましょう。

$$\frac{65,536 – 1,024}{256} \approx 252 \text{ 個}$$

「あれ? 1人あたり252個使えるんじゃないの?」と思いますよね。しかし、MAP-Eのルーターがあなたに割り振ってくれるポート数は、実際には240個になります。
この数字が導き出される理由は、MAP-Eがポート番号を人間の感覚ではなく、16進数(およびそのベースとなるビット構造)の規則正しい塊で強制的に切り分けているからです。
通常、日本国内の主要なMAP-Eサービス(v6プラスやOCNバーチャルコネクトなど)で「1人あたり240ポート割り当て」を行う場合、1つのIPv4アドレスを256人でシェアするため、16ビットのポート番号を次のような3つのブロックに分割しています。

自由ビット(4bit)PSID:あなた専用のID(8bit)自由ビット(4bit)
00001111ルーターごとに固定された値00001111
前半 4bit: 0 〜 15 の16パターン真ん中 8bit
256人で識別する固有ID
後半 4bit: 0 〜 15 の16パターン

このビット構造をもとに、システムが「利用可能なポート」を計算するロジックは次の通りです。

① ポートが「飛び飛び」になる理由

ビットの後半が 4ビット(16パターン) しかないため、一度に連続して使えるポートは「16個の塊(ブロック)」になります。

この16個を使い切って繰り上がろうとすると、そのすぐ上(真ん中)には「PSID(8bit=256パターン分)」が壁として存在しています。他人のPSID領域を飛び越える必要があるため、自分が使える次のポート群に到達するまでに 256番ごとのジャンプ(スキップ) が発生します。

つまり、「16個の連続したポート群」が「256番ごとの間隔」を空けて飛び飛びで現れるのが、MAP-Eの仕組み上の正体です。

② 利用可能ポートが「240個」になる計算式

前半の4ビット(自由領域)は 0 〜 15 まで動くので、本来なら「16個の塊」が全部で 16セット作れるはずです。

$$16 \times 16 = 256\text{個}$$

しかし、前半が 0(0000) のときは、後半(0〜15)と組み合わせたポート番号が 0〜4,095 (16×256人) の範囲内(ウェルノウンポートなどを含む予約・禁止領域) に丸ごと引っかかってしまうため、システム的に使用禁止(除外)となります。

そのため、実際に使うことができるのは前半が 1 〜 15 の「15セット」 だけになります。

これを計算すると、以下のようになります。

$$\text{利用可能ポート数} = 15 \text{ セット(前半)} \times 16 \text{ 個(後半)} = \mathbf{240 \text{ 個}}$$

3. 実践:あなたのルーターから情報を集める(ただし公開は厳禁!)

仕組みが分かったところで、次はいよいよパズルを解くための唯一の鍵、あなた専用の「PSID」または「配信ポート」の情報をルーターから手に入れましょう。
NTTの10G光クロス用ホームゲートウェイ(HGW:XG-100NEなど)であれば、管理画面の「裏メニュー」からあっさりと確認することができます。
手元にPCやスマホを用意して、以下の手順でルーターの内部に潜入してください。

Step 1. ルーターの管理画面にログインする

まずはブラウザを開き、アドレスバーにHGWのIPアドレス(デフォルトでは http://192.168.1.1 など)を入力して管理画面にログインします。

Step 2. 通常のメニューを無視して「隠しURL」へ直行する

実は、XG-100NEの通常の左メニュー(「現在の状態」など)をどれだけ探しても、MAP-Eや配信ポートに関する情報は1ミリも表示されません。
ルーターの心臓部にアクセスするには、ログインした状態のブラウザのアドレスバーに、以下のURLを直接手入力してエンターキーを押す必要があります。

Plaintext
http://192.168.1.1/t/

💡 ポイント: 末尾に /t/ をつけるのが最大のコツです。これがNTT系ルーターでおなじみの「配信情報・隠しメニュー」への入り口になります。

Step 3. メニューから「配信済IPv4アドレス・ポートセット」を開く

隠しページに切り替わると現れるメニューの中から、「配信済IPv4アドレス・ポートセット」(またはIPoE IPv4設定などの項目)をクリックしてください。

そこに潜入すると、ついにブラックボックスが開きます。プロバイダから割り当てられた「グローバルIPv4アドレス」と、利用可能なポートの一覧(グレーのボックスの羅列)がバシッと表示されているはずです。

⚠️ 超重要セキュリティ注意:
この画面に表示されるグローバルIPアドレスやポート一覧は、絶対にブログやSNSにスクショを無加工で載せてはいけません。 IPを隠しても、利用可能ポートの組み合わせパターン自体が「あなたの回線の指紋(フィンガープリント)」となり、攻撃者に住所を特定される足がかりになります。今回は安全のため、すべて架空のダミー数値を使って解説していきます。

4. 逆算パズル:表示されたポートから「PSID」を特定し、全ポートを再現する

それでは、ルーターの画面に表示されたポート情報から、ルーターに割り振られた隠された鍵「PSID」を逆算し、すべてのポートを数式で再現してみましょう。
ここでは解説用の例として、画面の一番最初のブロックに「1920-1935」という16個のポートが表示されていたと仮定してパズルを解いていきましょう。

① 最初のポート番号からPSIDを逆算する

MAP-E(256人分配環境)において、一番最初のポート番号の塊(前半の4ビットがすべて0の領域)は、次の簡単な数式で表されます。

$$\text{開始ポート番号} = \text{PSID} \times 16$$

画面に表示されている最初のポート番号は「1,920」です。これをそのまま数式に当てはめて、16で割り算してみましょう。

$$1920 \div 16 = \mathbf{120}$$

端数なしで美しく割り切れました!つまり、このダミー環境のルーターに割り当てられている固有のPSID(10進数)は「120」(16進数に変換すると 0x78)であることがここで導き出されました。

② 数式を使って「すべてのポート」を完全再現する

PSIDが「120」だと判明すれば、もうルーターの画面を見る必要はありません。MAP-Eの全ポートを網羅する以下の「マスター計算式」を使えば、残りの240個のポートをすべて自力で算出できます。

$$\text{ポート番号} = (\text{セット数} \times 4,096) + (\text{PSID} \times 16) + \text{範囲}$$

  • セット数: 015 までの数字(ただし 0 のときはウェルノウンポートと被るため、実質 115 の15セットが有効)
  • PSID: 120(固定)
  • 範囲: 015(16個の連番)

試しに、2番目のブロック(セット数 = 1)をこの数式で計算してみましょう。

$$(1 \times 4,096) + (120 \times 16) + 0 = 4,096 + 1,920 = \mathbf{6,016}$$

範囲を最大の15にすると、

$$4,096 + 1,920 + 15 = \mathbf{6,031}$$

計算結果は 6016-6031 となります。ルーターの画面の2番目のボックスには、まさにこの数字が印字されることになります。
さらに、最終ブロック(セット数 = 15)で計算してみます。

$$(15 \times 4,096) + (120 \times 16) + 0 = 61,440 + 1,920 = \mathbf{63,360}$$

範囲を最大の15にすると、

$$61,440 + 1,920 + 15 = \mathbf{63,375}$$

計算結果は 63360-63375。これも画面の最下部にあるボックスの数字と完璧に一致します。

結論:ルーターの画面は、数式の通りに動いている

これで、HGWが吐き出している謎のポートの羅列は、ランダムに割り振られたものではなく、「PSID」という鍵をベースに、4,096ずつジャンプしながら規則正しく生成された芸術的な数字の塊であることが証明されました。

自分の環境の数値を当てはめれば、いつでも自由に自分のポートを全量リスト化できます。

おわりに

今回は、MAP-E環境における「ポート制限」のブラックボックスを16進数の美しいロジックから徹底的に解剖し、ルーターの裏メニューから全ポートを逆算するパズルに挑戦しました。
一見すると「自由にポートを開放できない不自由な回線」に思えるMAP-Eですが、その裏側にある仕様(PSID)を正しく理解すれば、「家の中の自由(LAN)」と「外の世界の制限(WAN)」を完全にコントロールできるようになります。
そして、この2つの世界の境界線を最も安全に、かつ美しく繋ぎ止める最適解こそが、先の記事で構築した「中継VPS × リバーストンネル」による自宅サーバー公開の布陣です。

ルーターに与えられた数字をただ眺めるだけのフェーズはもう終わりです。構造を完全に掌握したあなたなら、10G光クロスの圧倒的な帯域を、これまで以上にクリエイティブに、そして安全に使い倒せるはずです。
ロジックを味方につけた最強のインフラで、次なるハックへ進みましょう。

10G自宅サーバー運用、今日も一日、ご安全に!(ヨシ!)

コメント

タイトルとURLをコピーしました