「NAT」「NAT越え」「NATタイプ」ってなーに?

「NAT(ナット)※1」はオンラインゲームを支える重要な技術のひとつです。

「NAT越え※2」に失敗するとマルチプレイができなくなりますし、「NATタイプ※3」の違いはマルチプレイのしやすさに影響します。

 ところが、NAT は仕組みが難しく、初心者向けの記事も少ないため、イカスミカフェには NAT についての質問がよく寄せられます。

 そこで今回は、Nintendo Switch(ニンテンドースイッチ)を例にして、世界一わかりやすく NAT を解説してみたいと思います。

「NAT」ってなーに?

IPアドレスを変換する技術のこと

(図1)

【NAT】(Network Address Translation):インターネットプロトコルによって構築されたコンピュータネットワークにおいて、パケットヘッダに含まれるIPアドレスを、別のIPアドレスに変換する技術である。

ウィキペディア(Wikipedia)

 上記は「最短で NAT を説明する非常に優れた文章」なのですが、突然「インターネットプロトコル」とか「パケットヘッダ」とか言い出すので、軽い気持ちで NAT を検索した人は、ここでブラウザをそっと閉じて、なにも見なかったことにしてしまうかもしれません。そこでー

イカすネットワーク用語
  • プロトコル:データをやりとりするための手順
  • パケット:データが入った小包
  • ヘッダ:小包の宛名/差出人ラベル
  • IPアドレス:住所

 これくらいの解釈でもう一度読んでみましょう。

【NAT】(ナット):インターネットでデータをやりとりするための手順において、データの入った小包の宛名/差出人ラベルに書いてある住所を、別の住所に書き換える技術です。

イカスミカフェ店長

 OK、ぜんぜん意味が分かりません。

 それどころか、なまじ翻訳したせいで、「なんで勝手に住所を書き換えるんだよ」と、NAT への怒りで我を忘れそうです。

 まずは、深呼吸をして落ち着きを取り戻しましょう、そして、NAT が勝手に住所を書き換えてしまう理由を問いただしてみましょう。

なんで変換しなきゃダメなの?

(図2)

 アナタの部屋のルーターに接続している「ゲーム機」は、部屋の中では『プライベートIPアドレス』で識別されていますが、部屋の外(インターネット)では、『グローバルIPアドレス』で識別されています。これが NAT です。

Nintendo Switch の IPアドレス

 Nintendo Switch(ニンテンドースイッチ)本体で、『プライベートIPアドレス』と『グローバルIPアドレス』を確認することができます。

プライベートIPアドレスの確認

ホーム画面 > 設定 >「インターネット」を選択した画面

(図3)

グローバルIPアドレスの確認

ホーム画面 > 設定 > インターネット >「接続テスト」の結果画面

(図4)

※グローバルIPアドレス単体から個人を特定することはできませんが、SNSなどの情報がセットになると、類推される可能性もあるので注意しましょう。

 どうして、わざわざIPアドレスを変換する必要があるのでしょうか?

 最近、イカスミカフェではデリバリーサービスをはじめたので、アルバイトのカトルくんの配達に例えて解説してみたいと思います。

イラスト|カカポ

 カトルくんは、イカスミカフェでアルバイトをしていて、お店の中では「カトル」と呼ばれています。

 お店の中がルーターの内側の世界だとすると、「カトル」という名前は『プライベートIPアドレス』になります。

イラスト|カカポ

 けれども、配達先のお客さまはカトルくんを知りません。ですから、「カトル」という名前は通じないので、配達が完了できないのです。

イラスト|カカポ

 そのため、カトルくんは、配達先のお客さまにも通じる「イカスミカフェ」という名前を使って配達をします。

(図5)

 お店の外がルーターの外側の世界(インターネット)だとすると、「イカスミカフェ」という名前は『グローバルIPアドレス』になります。(図5)

 このように、ルーターの内側でしか通じない名前を、インターネットでも通じる名前に変換する技術のことを「NAT」といいます。

NATが誕生した背景

 最初から「グローバルIPアドレス」だけを使用すれば、いちいち変換する必要がないのに、どうして NAT なんてややこしい方法を使うのでしょうか?

 これには、阿部寛の眉間のシワよりも深い理由があるのです。

(※うんちくなので読み飛ばしてOKです)

阿部寛の眉間のシワよりも深い理由

インターネットが普及しはじめた1990年代、団塊世代が「エッチな画像を見るんだもん」という、恐ろしく高いモチベーションで Windows を勉強していたころ、「NAT」という技術はまだ存在せず、インターネットは『グローバルIPアドレス』だけで運用されていました。

 1990年の世界人口は約53億人でしたが、従来のIPv4方式のIPアドレス(150.150.0.1みたいなやつ)は、約43億通りの組み合わせしかないので、10億個くらい足りません。

 けれども、当時はパソコンが一家に1台あれば勝ち組で、「えっ?部長の家、エッチな画像見れるんですか?OKバブリー!」みたいにはしゃいでいた時代なので、誰も心配していませんでした。

 ところが、インターネットの利用者はどんどん増加し、「オレも見るんだもん!」「ワシも見るんじゃもん!」と、家庭内で複数のパソコンを接続したいという要求も増え、『グローバルIPアドレス』はあっという間に枯渇しました。

 IPアドレスの数と男子の数が合わないことに、なぜ誰も危機感を持たなかったのでしょうか?男子の探究心を舐めていたのでしょうか?

【探究心】物事に興味をもち、追求しようとする心。

 いずれにせよ、残り少ない『グローバルIPアドレス』をやりくりするために、登場したのが NAT機能を持つ「ルーター」です。(図6)

(図6)

 ルーターに接続された個々のパソコンには、「プライベートIPアドレス」が与えられ、ルーターは「NAT」を使って『グローバルIPアドレス』に変換します。

 1つの『グローバルIPアドレス』で、複数端末のインターネット接続を可能にした「NAT」は、IPアドレス枯渇問題を回避する節約術として誕生し、今もなお世界中のインターネット通信を支える技術として活躍しています。

 ありがとうNAT、ありがとう団塊世代の先輩方。

「NAT越え」ってなーに?

ルーターを越えて通信すること

(図7)

 アナタの部屋のルーターに接続している端末が、フレンドさんの部屋のルーターに接続している端末と通信することを「NAT越え」といいます。(図7)

「NAT越え」は、オンラインゲームはもちろん、LINE や Zoom などでも毎日当たり前のようにしているので、普段はまったく意識することがない技術ですが、実はけっこう難しいことをしてくれています。

なんで越えなきゃダメなの?

(図8)

 アナタの部屋のルーターに接続している端末は、「プライベートIPアドレス」で運用されていますが、インターネットでは NAT によって「グローバルIPアドレス」に変換されます。

 このとき、プロバイダーがユーザーに提供している「グローバルIPアドレスは1つ」なので、同じルーターに接続されている端末は、「全部同じグローバルIPアドレス」になってしまうのです。(図8)

同じルーターの端末は同じアドレスになる

 スマホやパソコンの「グローバルIPアドレス」が、Nintendo Switch の「グローバルIPアドレス」と同じか確認してみましょう。

【スマホやパソコン】のグローバルIPアドレスを確認

 日本初のネットセキュリティ会社「アルテミス」を起業した「石川英治」氏のサイト『確認くん(https://www.ugtop.com/spill.shtml)』で、スマホやパソコンの「グローバルIPアドレス」を確認できます。

【Switch】のグローバルIPアドレスを確認

ホーム画面 > 設定 > インターネット >「接続テスト」の結果画面。

 パソコンの「グローバルIPアドレス」とSwitchの「グローバルIPアドレス」が同じであることが確認できました。

※グローバルIPアドレス単体から個人を特定することはできませんが、SNSなどの情報がセットになると、類推される可能性もあるので注意しましょう。

(図9)

 仮に、アナタの「グローバルIPアドレス」が『150.150.0.1』だとして、フレンドさんがアナタとオンラインゲームをするために、『150.150.0.1』へパケットを送信したとします。

 けれども、インターネットからは、ルーターの内側にあるゲーム機を特定できないため、「ルーター(NAT)を越えて通信すること」ができないのです(図9)。

( ˘ω˘ ) スヤァ…

 たぶん、今、ブラウザを閉じようとしていると思うので、急いでカトルくんの配達に例えて説明してみます。

イラスト|カカポ

 カトルくんが商品の配達に出かけました。車に気をつけてね。

イラスト|カカポ

 お店では「カトル」と呼ばれていますが、お店の外では「イカスミカフェ」と名乗ります。えらいえらい。

イラスト|カカポ

 あれ?配達中に飲み物がひっくり返ったのでしょうか、商品の入った袋がビショビショです…これは絶対に叱られるやつですね。

イラスト|カカポ

 お客さまはカンカンに怒って、『配達担当を厳しく指導してください!』と、「お店」にクレームが入りました。

 ところが、カトルくんは「イカスミカフェ」としか名乗っていないので、「配達担当」は特定されず、カトルくんは叱られませんでした。

「NAT越え失敗」です。

(図10)

 このように、インターネットからはルーターの内側にある端末を特定することができないので、通常は「ルーターを越えて通信すること」はできないのです。(図10)

イラスト|カカポ

 でも、実際のデリバリーサービスでは、注文番号などから配達担当を特定できますよね?

 そうです、フレンドさんとマルチプレイで遊ぶときも、なんらかの方法でルーターの内側にある端末を特定して、「NAT越え」をする必要があるというわけなのです。

どうやって「NAT越え」するの?

「NAT越え」には明確な決まりがないので、「UPnP」や「TURN(ターン)」など様々な方法があります。

 今回は Nintendo Switch で採用されている『STUN(スタン)』というNAT越え手法を、スプラトゥーンのガチマッチを例にして解説したいと思います。

(図11)

 オンラインゲームには、プレイヤーが同じゲームサーバーに集まって対戦しているイメージがありますが、この方法はハイスペックなゲームサーバーが必要な上にラグの問題もあるため、実はあまり採用されていません。(図11)

(図12)

 スプラトゥーンのマルチプレイは、マッチングサーバー(STUN)でチーム分けを行い、バトル中は「P2P(ピア・ツー・ピア)」と呼ばれる通信方式で、Switch同士が直接通信を行なっています。(図12)

「ガチマッチ」の流れ
  1. 広場からロビーに入る
    • インターネットに接続
  2. ガチマッチの部屋に入る
    • マッチングサーバーに接続
  3. チーム分け
    • NAT越え
  4. ガチマッチ開始
  5. ガチマッチ終了
  6. リザルト画面
「NAT越え」の流れ

❶マッチングサーバーにパケットを送信

(図13)

 ガチマッチの部屋に入った【Switch A】と【Switch B】は、最初に「マッチングサーバー」に対してパケット(データ)を送信します。

 このとき「ルーター」の外部ポート(パケットの出入り口)が開き、パケットヘッダ(宛名/差出人ラベル)に「グロバールIPアドレス」と「ポート番号」が付与されます。(図13)

❷マッチングサーバーから自分の情報を取得

(図14)

 次に、【Switch A】と【Switch B】は、マッチングサーバーから「自分の情報(自分のグローバルIPアドレスとポート番号)」を取得します。(図14)

 不思議に思うかもしれませんが、端末である【Switch】はNAT機能をもっていないので、自分の「グローバルIPアドレス」や「ポート番号」が分かりません。

 そのため、マッチングサーバーに電話をかけて、着信履歴から自分の番号を教えてもらう要領で、自分の情報を取得するのです。

❸マッチングサーバーから相手の情報を取得

(図15)

 さらに、【Switch A】と【Switch B】は、マッチングサーバーから「通信相手の情報(通信相手のグローバルIPアドレスとポート番号)」を取得します。(図15)

❹NAT越え成功

(図16)

 最後に❸で取得した「相手のグローバルIPアドレス」と「ポート番号」に向けてパケットを送信すればNAT越え成功です。(図16)

「NATタイプ」ってなーに?

(図17)

 Nintendo Switch(ニンテンドースイッチ)のNATタイプは、「A、B、C、D、F」の5種類あり、「NAT越え」のしやすさを表しています。(図17)

「NAT」は明確な仕様が決まっていないので、Nintendo Switch の NATタイプは、利用している「ルーターの仕様」や、契約している「インターネット回線の仕様」で決まります。

 特に、ルーターがパケットの通過を許可したり禁止したりする「アクセス制御(フルコーンNAT、アドレス制御コーンNAT、ポート制御コーンNAT、対象NAT)」は、Nintendo Switch の NATタイプを決定する重要な仕様なので、合わせて解説していきたいと思います。

うんちく

 ルーターの「アクセス制御方式」はNATタイプを決定する重要な仕様ですが、製品の仕様表に記載されることはほとんどありません。

①NATタイプ A

(図18)

 ルーターのアクセス制御が「フルコーンNAT」の場合、Nintendo Switch は「NATタイプ A」になります。

【Switch A】の宛先「A.A.A.A:1000(グローバルIPアドレス:ポート番号)」に向かって送信されたパケットは、全て「NAT越え」に成功します。(図18)

 マッチングサーバーを利用するので実際にはあり得ませんが、一度も通信したことがない【Switch C】から送信されたパケットも、宛先が「A.A.A.A:1000」であれば「NAT越え」に成功します。

イラスト|カカポ

 グルメサイトでイカスミカフェを予約すると、指名したスタッフが一発ギャグをしてくれる特典があったとして、「NATタイプ A」は、お店の住所(グローバルIPアドレス)とスタッフの名前(ポート番号)さえ合っていれば、誰でも特典を受けられるシステムになります。

 上のイラストでは「お客さま」が『天使!』と言っています。固有名詞じゃないのでホントはアウトですが、「パオさん応援うちわ」を持ってるので店長はセーフにしています。

②NATタイプ B

(図19)

 ルーターのアクセス制御が「アドレス制限コーンNAT」の場合、Nintendo Switch は「NATタイプ B」になります。

【Switch A】の宛先「A.A.A.A:1000(グローバルIPアドレス:ポート番号)」に向かって送信されたパケットのうち、通信をしたことがある【Switch B】のパケットのみ「NAT越え」に成功します。(図19)

「グローバルIPアドレス」が同じなら、ポート番号が変わっても「NAT越え」できます。

 また、一度も通信したことがない【Switch C】からのパケットは「NAT越え」できません。

(図20)

 ルーターのアクセス制御が「ポート制限コーンNAT」の場合も、Nintendo Switch は「NATタイプ B」になります。

【Switch A】の宛先「A.A.A.A:1000(グローバルIPアドレス:ポート番号)」に向かって送信されたパケットのうち、通信をしたことがある【Switch B】のパケットのみ「NAT越え」に成功します。(図20)

 ただし、「グローバルIPアドレス」が同じでも「ポート番号」が変わると「NAT越え」できません。

 また、一度も通信したことがない【Switch C】からのパケットは「NAT越え」できません。

イラスト|カカポ

 グルメサイトでイカスミカフェを予約すると、指名したスタッフが一発ギャグをしてくれる特典があったとして、「NATタイプ B」は、お店の住所(グローバルIPアドレス)とスタッフの名前(ポート番号)が合っていることに加え、「予約の確認」がとれると特典を受けられるシステムになります。

 ほとんどのルーターが「NATタイプB」になると思いますが、なんらかの原因で「グローバルIPアドレス」や「ポート番号」が変わると「NAT越え」に失敗します。

 上の画像ではお客さまが『イカスミカフェの会員証』を提示して本人確認をしています。店長は、熱烈なパオさん推しの「たけし」さんは、もう顔パスでいいと思っています。

③NATタイプ C/D

(図21)

 ルーターのアクセス制御が「対称NAT」の場合、Nintendo Switch は「NATタイプ C/D」になります(どっちになるか分かりません)。

「対称NAT」は、通信したことがある「グローバルIPアドレス」と「ポート番号」に対して「専用ポート」を用意し、その他の「グローバルIPアドレス」や「ポート番号」から届いたパケットは全て破棄します。(図21)

「ポート制限コーンNAT」と同じようにも見えますが、Switch がマルチプレイをするとき、最初に通信するのは、「マッチングサーバー(STUN)」のグローバルIPアドレスなので、グローバルIPアドレスが違う「その他のSwitch」とは通信することができません。

イラスト|カカポ

 グルメサイトでイカスミカフェを予約すると、指名したスタッフが一発ギャグをしてくれる特典があったとして、「対称NAT」は、先着1名様限定の激レア特典のうえに、必ずグルメサイトの中の人がゲットしていくシステムのことです。

 たけしさんがこんなに見たがる「パオさんの一発ギャグ」っていったい。

④NATタイプ F

 契約している「インターネット回線」の仕様で「UDPが使えない」場合、Nintendo Switch は「NATタイプ F」になります。

「TCP」と「UDP」と「ダチョウ倶楽部」

 インターネットでデータを送受信するプロトコル(手順)には、「TCP(Transmission Control Protocol)」と、「UDP(User Datagram Protocol)」があります。

TCP
イラスト|カカポ

「ダチョウ倶楽部」がお茶の間に笑いを発生させるプロトコル(手順)に例えると、『押すなよ!押すなよ!絶対に押すなよ!』と、事前に「準備」や「確認」をしてから熱湯風呂に落ちる伝統芸能が「TCP」です。

『信頼性を重視した通信』なので、Switch本体やゲームの更新データのダウンロードに向いています。

 ちなみに『押すなよ!』は「確認」、『絶対に押すなよ!』は「準備完了」を表しています。

UDP
イラスト|カカポ

 一方、『絶対にウケるタイミング』を優先し、「準備」も「確認」も省略して一方的に熱湯風呂に突き落とす荒技が「UDP」です。

『高速性を重視した通信』なので、動画のストリーミングや遅延を抑えたいゲームの通信に向いています。

 ちなみにダチョウ倶楽部は、思ったよりウケなかったとき、『殺す気か!』や『つかみはOK!』などで、速やかにリスクヘッジをとります。

 恐るべし絶対にすべらないダチョウ倶楽部。

 Nintendo Switch が採用している『STUN(スタン)』というNAT越え手法は、『UDPホールパンチング』と呼ばれる技術を応用しているので、おもいっきり「UDP」を使います。

 そのため、「UDP」を利用できない「インターネット回線」は、『STUN』を使った「NAT越え」をすることができず、「NATタイプF」になります。

イラスト|カカポ

 グルメサイトでイカスミカフェを予約すると、指名したスタッフが一発ギャグをしてくれる特典があったとして、『そもそも予約できない状態』が「NATタイプ F」です。

 ……たけしさん本当に申し訳ないと思っています。

その他のやつ

二重ルーター(NATタイプ C/D)

(図23)

 ルーターを2台接続することで、NATが二重に働いている状態のことを「二重ルーター(多段NAT)」といい、Nintendo Switch は「NATタイプ C/D」になります(どっちになるか分かりません)。

「二重ルーター」は、ウェブサイトの閲覧や動画の視聴などは普通にできますが、UDPを利用する「NAT越え」で問題が起こります。

(図23)では、【Switch A】のパケットが二段目ルーターの「1000番ポート」を開きましたが、一段目ルーターが開いたのは「2000番ポート」です。

 インターネットから【Switch A】に向けてのパケットは、「1000番ポート」に送信されますが、インターネット側からは「2000番ポート」しか見えていないので、【Switch B】と【Switch C】のパケットは、「一段目ルーター」にはじかれ「NAT越え」できません。

 フレッツ光のHGW(ホームゲートウェイ)に他社ルーターを接続する場合などは、HGW側でこの問題が起こらないように処理されますし、設定をカスタマイズすることでも対策できるので、実際に「二重ルーター」が問題になることは少ないです。

 ただし、「マンションに備え付けのインターネット回線」や、一部の「CATV」には、共用部に設置されている業者ルーターが、「二重ルーター」を引き起こしている場合があるので、インターネット回線の契約を見直すしかないケースもあります。

イラスト|カカポ

 グルメサイトでイカスミカフェを予約すると、指名したスタッフが一発ギャグをしてくれる特典があったとして、お店の前に受付を設置した状態が「二重ルーター」です。

 上のイラストでは、たけしさんが『天使!』と言って「宛先(スタッフ)」がパオさんであることを伝えています。

 受付のカトルくんはパオさんを天使だと思っていないので「人違い」と判断。たけしさんは入店することができませんでした。

 店長があらかじめ『天使!』=「パオさん」と、カトルくん(一段目ルーター)に教えておく(設定をカスタマイズする)ことで改善することができます。

v6プラスのNAT(NATタイプ B)

 現在、インターネットでデータをやりとりする方法は、「IPv4」と「IPv6」の2種類があります。

 NAT は「IPv4」専用の技術なので、「IPv6」しか利用できない環境では、Nintendo Switch は「NAT タイプ C/D」になります。

 v6プラスの「v6」は『IPv6』のことなので「NATタイプ C/D」の判定を受けそうですが、v6プラスの「プラス」は『+IPv4』のことなので、『IPv6+IPv4』という意味になり、v6プラスでも「NAT越え」が可能です。

 しかし、v6プラスは「利用できるポート範囲が制限されている」ので、Nintendo Switch は「NATタイプ B」になります。(v6プラス環境の Nintendo Switch を「NATタイプ A」にすることはできません)

(図24)

 通常のNAT(IPv4)では、「1つの回線契約に対して1つのグローバルIPアドレス」が提供されているので、マッチングサーバーに集まった8人が「同じポート番号」を使用しても問題ありません。(図24)

(図25)

 v6プラス(IPv6+IPv4)では、「1つのグローバルIPアドレスを複数の回線で共有」しているので、「同じグローバルIPアドレス」のプレイヤーがマッチングされる可能性もあり、ポート番号がかぶらないように「利用できるポート範囲が制限されている」のです。(図25)

まとめ

 ネットワーク用語を調べていると、解説の中にまた知らないネットワーク用語が出てきて、また調べて、気がついたら大きな声で「おさかな天国」を歌っているときってありますよね。

 そんな無意味に消費されてしまうエネルギーを、ジョイマンのラップネタに変えて、元気がないフレンドさんのために使って欲しい。クソでかい声で『ナナナナ〜ット♪ナナナナ〜ット♪』って歌って欲しい。そんな想いを込めて書いた記事です。

『明けない〜♪夜はない〜♪止まない雨、梅雨じゃない〜?』

高木晋哉(ジョイマン)

 この記事がアナタのラップ魂に火をつけて、日本のHIPHOPシーンを揺るがすキッカケになれば幸いです。

この記事について
  • ※1【NAT】と【NAPT】:「IPアドレス」と「ポート番号」の両方を変換する技術は「NAPT(Network Address Port Translation)」ですが、最近はNAPTのことを含んでNATと表現することが多いので、この記事でも「NAT」という表現はNAPTを含んでいます。
  • ※2【NAT越え】:正しくは「NAT traversal(NATトラバーサル)」ですが、この記事では分かりやすさを重視して「NAT越え」と表現しています。
  • ※3【NATタイプ】:Nintendo Switch(ニンテンドースイッチ)の NATタイプを指します。
参考文献
  1. Symmetric NAT におけるNAT 越え実現方式(PDF)
  2. RFC(インターネット技術の標準的な仕様を記した文書)RFC4787:NATUDP
  3. RFC8489:STUN
  4. スプラトゥーン2でNAT越え、パケット流量を解明|日経クロステック(有料)
  5. 徹底解説 v6プラス|JPNE
おすすめの記事