基本情報のNATとNAPTの違いを変換表と例題で理解する

NATとNAPTの一対一と多対一の対応をイメージしたネットワーク模型

NATとNAPTの違いは、IPアドレスだけを対応付けるか、ポート番号も使って通信を対応付けるかです。基本情報の問題では、この違いを押さえると「一つの外部アドレスを複数端末で共有できる理由」と「戻ってきたパケットの届け先」を同じ考え方で説明できます。

この記事では、NATをBasic NATの意味で扱い、NAPTと比較します。自作の変換表と例題で、送信元・宛先のどの欄を書き換えるのかを順番に確認しましょう。対象はIPv4の基本的なアドレス変換で、ルータの設定コマンドを覚える必要はありません。

この記事のポイント
  • 一対一と多対一の違いを変換対象から説明できる
  • 同じ送信元ポートを使う二つの端末を区別できる
  • 送信と返信の四つの欄を埋めて変換表を読める
  • 自作例題で返信先と誤りやすい選択肢を確認できる
無料

基本情報技術者試験 過去問アプリ

本番形式で繰り返し解ける。スキマ時間に1問から

2,000問以上収録
無料で過去問を解く
目次

基本情報のNATとNAPTの変換対象

二台の端末と境界ルータ、外部サーバを分けた通信の学習用模型

内部と外部で住所を使い分ける

まず、机の上にPCが二台あり、どちらも同じルータを経由して外のサーバへ接続する場面を考えます。PCに付いている内部側のアドレスと、サーバから見える外部側のアドレスは、同じとは限りません。この「どこで見た住所なのか」を先に決めると、数字の多い問題も整理できます。

内部では192.168.10.21と192.168.10.22を使う、というのが本記事の設定です。192.168.0.0/16はプライベートアドレスの範囲に含まれます。ほかに10.0.0.0/8と172.16.0.0/12もあり、異なる組織で同じ範囲を使用できます。プライベートアドレスはインターネット全体で端末を一意に示す住所ではありません。範囲と扱いはRFC1918のプライベートアドレス規定で確認できます。

ここで「社内のPCに192.168.10.21が付いているから、外のサーバもその番号に返信する」と考えると、変換の意味を見失います。外へ出たパケットの送信元が書き換わっていれば、サーバが返信先として使うのは書き換え後の住所です。内部の番号は、帰りにルータが復元するための情報として変換表に残ります。

以下の例題では、外部アドレス役を203.0.113.9、サーバ役を198.51.100.70とします。これらは実際の公開サーバではなく、RFC5737で文書用に確保されたアドレスを使った架空の設定です。接続を試すための数字ではなく、変換前後を読み比べるための数字として見てください。

サブネットマスクの計算が苦手でも、今回は「内部側」「外部側」「サーバ側」の三つに分けられれば進められます。ネットワークアドレスやホスト部の計算から確認したい場合は、基本情報のIPアドレスとサブネットマスクの計算で別に練習できます。

NATはアドレスを一対一で対応付ける

Basic NATの比較で見るのは、内部IPアドレスと外部IPアドレスの対応です。本記事のNAT例ではPC-Aを203.0.113.9へ、PC-Bを203.0.113.10へ対応付けます。違う内部端末に違う外部アドレスを用意するので、返信先の外部アドレスを見れば、元の内部アドレスを選べます。

スクロールできます
端末内部IPアドレス対応する外部IPアドレス
PC-A192.168.10.21203.0.113.9
PC-B192.168.10.22203.0.113.10

この例では、外部サーバから203.0.113.9へ戻ってきた応答はPC-Aへ、203.0.113.10への応答はPC-Bへ向かいます。一対一という言葉は「一台につき通信を一回しかできない」という意味ではありません。PC-Aが複数の通信を行っても、内部IPと外部IPの対応は同じ組を使用する、という見方です。

また、一対一と固定対応を同じ意味で覚えないようにしましょう。静的な対応なら、最初から決めた組を使います。動的なBasic NATなら、外部アドレスのプールから使用中の内部アドレスに割り当てます。ポート番号で多数の内部アドレスを一つにまとめるNAPTとは、整理する軸が違います。Basic NATとNAPTの位置付けはRFC3022のTraditional NATの説明に示されています。

問題文に「利用可能な外部IPアドレスが二つ」「ポート番号は変換しない」「内部の三台が同時に利用したい」とあれば、外部側のアドレス数に注目します。本記事の一対一モデルでは、同時に対応付けられる内部アドレスは二つです。三台とも利用できると即答せず、アドレスを共有する追加の仕組みが示されているかを確かめます。

二つの内部端末が別々の外部アドレスへ対応する様子を示す模型

NAPTはポートも使って多対一にする

NAPTでは、内部側の「IPアドレスとポート番号」を、外部側の「IPアドレスとポート番号」に対応付けます。一つの外部IPアドレスにまとめても、外部側のポートを変えれば対応を分けられます。ここが、アドレスだけを見るNATとの違いです。

NATはアドレス変換全般を表す広い呼び方にも使われ、その中にNAPTを含む場合があります。「NATとNAPTは全く無関係な技術」と覚える必要はありません。JPNICのNAT・NAPT用語解説でも両者の関係を確認できます。比較問題では、説明にポート番号が含まれるかで動作を判断しましょう。

自作例として、PC-AとPC-Bがどちらも送信元ポート51000を使い、同じサーバへTCP通信を始める設定を置きます。内部IPは別なので、内部側では192.168.10.21:51000と192.168.10.22:51000という違う組です。コロンの左がIPアドレス、右がポート番号だと読んでください。

スクロールできます
端末内部側の組外部側の組プロトコル
PC-A192.168.10.21:51000203.0.113.9:62001TCP
PC-B192.168.10.22:51000203.0.113.9:62002TCP

もしこの二つを同じ203.0.113.9:51000にまとめ、接続先も同じなら、外部側で二つの通信を区別できません。この表では62001と62002へ分けたため、返信の宛先ポート62001ならPC-A、62002ならPC-Bと判断できます。62001を見てPC-Aの元のポートも62001だと答えるのは誤りで、内部側へ戻すときは51000に復元します。

「一対多」と書かれた説明と「多対一」と書かれた説明は、どちらを起点に数えるかが違うだけの場合があります。本記事では内部から外部を見るので、複数の内部IPが一つの外部IPに集まることを多対一と呼びます。選択肢では言葉の順番だけでなく、共有するのがIPなのか、識別に使うのがポートなのかを確認してください。

二台の端末が一つの外部接続を共有し、色の違う接続口で通信を分ける模型

送信元と宛先を四つの欄に分ける

変換表に入る前に、パケットの情報を「送信元IP」「送信元ポート」「宛先IP」「宛先ポート」の四つに分けて書く癖を付けましょう。文章の中にある四つの数字を一列に並べるだけで、どれを変換する問題なのかが見えてきます。TCPかUDPかなどのプロトコルも、別の欄で管理します。

PC-Aからサーバへ出すTCPパケットなら、内部側は送信元192.168.10.21:51000、宛先198.51.100.70:443です。先ほどのNAPT表を使うと、外部側の送信元は203.0.113.9:62001になります。この例で宛先198.51.100.70:443を変更する指示はありません。

返信では、サーバ側が送信元に回ります。ルータの外側に届く返信は、送信元198.51.100.70:443、宛先203.0.113.9:62001です。ルータを通った後は、宛先が192.168.10.21:51000になります。往路は送信元側を変換し、復路は宛先側を復元すると、矢印の向きに沿って整理すると分かりやすいですね。

この往路・復路の基本動作と、アドレス変更に伴うチェックサムなどの処理は、Juniperのネットワークアドレス変換の公式説明にも記載されています。例題で四つの欄を埋めるときは、問題にないチェックサム計算や別の変換方式まで足さず、示された変換条件に集中してください。

443はこの例のサーバ側ポート、51000は内部クライアント側ポート、62001はルータ外部側に割り当てたポートです。番号を大小で分類するより、通信のどちら側にあるかを確認する方が確実です。サービスごとの番号を覚える学習は、基本情報のポート番号一覧と送信元・宛先の読み方で補えます。

送信と返信の向きを区別する、異なる色の通信経路の学習用模型

割当と変換と通信許可を混同しない

「IPアドレスを扱う」という共通点だけで、DHCPやDNSを選ばないようにしましょう。端末に設定を配る説明と、通過するパケットのアドレスを書き換える説明は別です。名前をアドレスへ引き当てることと、変換表で内部・外部の対応を保持することも同じ作業ではありません。

たとえば「PCに192.168.10.21を設定した」と「外へ出る送信元を203.0.113.9にした」は、問題文の中で別々の出来事です。前者の設定を手動で行っていても、後者のNAPT例題は成立します。DHCPが使われたかどうかを推測して、変換後の数字を変えてはいけません。役割の区別はDNS・DHCP・ARPの違いと問題の見分け方でも確認できます。

また、「NAPTなら毎回必ず違う番号になる」という丸暗記にも注意が必要です。たとえばUDPのポート保持を扱うRFC4787のポート割当の説明では、元の番号を保持する動作と、衝突を避ける割当が整理されています。問題に変換表があれば、番号が同じか違うかだけで方式を決めず、アドレスとポートの対応を表どおり読みます。

後半の例題で外部からのパケットが出てきても、通信を許可する規則までは自動的に決まりません。変換後の宛先を答える問題と、ファイアウォール等で許可・拒否を選ぶ問題は分けます。対応表があることだけを理由に「安全」「必ず通る」と結論付けず、与えられた条件の範囲で答えることが大切です。

NATとNAPTの変換表を例題で読む

対応する内側と外側の通信情報を並べた、変換表学習用の無文字教材

ここからは、アドレスとポートを書き換える場所を実際に埋めます。以下は学習用に作成した例題で、試験の過去問を転載したものではありません。表にある対応は有効で、パケットは同じ変換装置を往復すると仮定します。宛先側の追加変換や、外部から始める静的な転送設定はありません。

NATの表では外部IPから復元する

例題の条件は、Basic NATで192.168.20.31を203.0.113.31に対応付けることです。内部PCからサーバ198.51.100.80のポート443へ、TCPで送信します。PCの送信元ポートは52000です。ポート番号を変換しないものとして、往路と復路の情報を完成させてください。

スクロールできます
観測位置送信元IP送信元ポート宛先IP宛先ポート
PCからルータへ192.168.20.3152000198.51.100.80443
ルータからサーバへ203.0.113.3152000198.51.100.80443
サーバからルータへ198.51.100.80443203.0.113.3152000
ルータからPCへ198.51.100.80443192.168.20.3152000

最初の行と二行目の差は、送信元IPだけです。送信元ポート52000と、宛先サーバの二つの値はそのままです。往路の段階で52000を443へ変えたり、サーバのIPを内部PCのIPに変えたりする必要はありません。どちらも、この例題の変換条件に書かれていない変更だからです。

三行目は、サーバが応答するときに送信元と宛先の役割が入れ替わった結果です。往路でサーバから見えた送信元203.0.113.31:52000が、返信先になります。その後、ルータが外部IP203.0.113.31に対応する内部IPを表で探し、四行目の宛先を復元します。

解答を確認するときは「どの欄が変換装置で変わったか」を見ます。二行目と三行目を直接比べると、応答による役割の入れ替わりまで混ざります。変換そのものを見たいなら、一行目と二行目、三行目と四行目を組にしてください。これで、送信元の変換と宛先の復元を別々に追えます。

追加で、203.0.113.32を192.168.20.32へ対応付けた二台目があるとします。返信の宛先IPが203.0.113.32なら、ポートが同じ52000でも二台目を選びます。このBasic NAT例では、二台を区別する手掛かりが外部IPの違いにあるからです。表の左から無条件に一行目を選ぶのではなく、返信で指定された値と一致する行を選びましょう。

NAPTの表で返信先の二項目を戻す

次は、前半に出したPC-AとPC-Bの変換表を使います。二台とも同じサーバ198.51.100.70:443へTCP通信し、内部側では同じ送信元ポート51000を選びました。外部IPは一つで、PC-Aに62001、PC-Bに62002を割り当てた条件です。

スクロールできます
通信内部側の送信元外部側の送信元サーバ側の宛先
Aの要求192.168.10.21:51000203.0.113.9:62001198.51.100.70:443
Bの要求192.168.10.22:51000203.0.113.9:62002198.51.100.70:443

問題は「サーバから203.0.113.9:62002へ返信が届いたとき、内部側の宛先IPと宛先ポートはいくつか」です。まず62002を外部側の列で探します。該当するのはBの要求の行なので、内部側の組192.168.10.22:51000へ戻します。答えは宛先IP192.168.10.22、宛先ポート51000です。

手順を文章にすると、外部の宛先を読む、対応する行を選ぶ、内部の組を取り出す、返信の宛先欄へ記入する、の四つです。62002を見つけた直後に答えを書かず、同じ行の反対側を読む工程を挟みましょう。問題文のポート番号をそのまま答えに写すミスを防げます。

返ってきた二つの通信を色分けし、別々の端末へ対応させる学習用模型
スクロールできます
観測位置送信元IP送信元ポート宛先IP宛先ポート
サーバからルータへ198.51.100.70443203.0.113.962002
ルータからPC-Bへ198.51.100.70443192.168.10.2251000

この復路の表では、送信元側の198.51.100.70と443が変わっていません。サーバが別の送信元に化けるわけではなく、パケットの届け先が外部側の組から内部側の組へ復元されます。「NAPTはIPとポートを変える」とだけ覚えていると、四つの欄全部を変更してしまうので注意してください。

選択肢に192.168.10.22:62002があれば、端末の選択は正しくてもポートの復元が不足しています。192.168.10.21:51000ならポートは合っていても端末を取り違えています。203.0.113.9:62002なら変換前の返信先をそのまま答えています。二つの項目をセットで照合すれば、どこが誤りか説明できます。

反対方向の練習もしてみましょう。PC-Aが192.168.10.21:51000から出した要求は、外部側では203.0.113.9:62001です。サーバがその要求に返信するときは203.0.113.9:62001を宛先にします。返信先を頭の中だけで入れ替えるのが苦手なら、送信元の組を一度紙に写してから「応答の宛先」とラベルを付けると混乱しにくくなります。

同じ端末の複数通信も行で分ける

一台のPCが複数の通信を行う場合も、端末名だけで変換表の行を選べません。次の自作表では、PC-CがTCPの二つの通信とUDPの一つの通信を持っています。いずれも外部IPは203.0.113.9ですが、対応する内部側の組とプロトコルが異なります。

スクロールできます
行プロトコル内部側の組外部側の組通信先
甲TCP192.168.10.23:53000203.0.113.9:63001198.51.100.70:443
乙TCP192.168.10.23:53001203.0.113.9:63002198.51.100.81:443
丙UDP192.168.10.23:53000203.0.113.9:63001198.51.100.53:53

TCPで外部宛先ポート63002に返信が届けば乙の行を使い、内部宛先は192.168.10.23:53001です。内部IPが甲と同じだからといって、甲の53000を答えてはいけません。一台でも二つのTCP通信があるので、対応するポートまで読む必要があります。

UDPで203.0.113.9:63001への応答なら丙の行です。同じ63001が甲にもありますが、甲はTCPなので、このUDP応答の照合には使いません。TCPとUDPはプロトコルが違うため、数字の一致だけでは同じ通信だと決まりません。これは表を読み分ける練習用の割当で、全ての装置が必ずこの番号を再利用するという意味ではありません。

通信の識別では、プロトコルに加えて送信元・宛先のアドレスとポートが関係します。RFC2663のセッションとパケットの用語整理がこの区別を説明しています。実際の装置は対応付け方や通過条件が異なるため、例題では提示されたプロトコルと相手先の条件も残して照合しましょう。

ここで学習用表を「外部ポートだけでいつでも一意に端末が決まる」と一般化しないことも大切です。前の二台の例は、同じTCPの同じサーバへの返信を、外部ポートを変えて分けた設定でした。今回の表はプロトコル列も見る設定です。表の列を勝手に省略せず、問題が要求する識別条件に合わせて必要な項目を使ってください。

一台の端末から異なる通信経路が延び、色と形で通信を区別する模型

自作の確認問題で取り違えを防ぐ

最後は、短い条件から答えを選ぶ練習です。解答を見る前に、変換方式と、往路か復路かを一行で書いてみてください。数字を覚える練習ではなく、与えられた条件に合う欄を選ぶ練習です。各問題は互いに独立しているので、前の表の割当を持ち込まないようにしましょう。

  • 問題A:Basic NATで192.168.30.40と203.0.113.40を対応付けます。TCP送信元ポート54000の内部PCがサーバ198.51.100.90:443へ送るとき、外部側の送信元の組は何ですか
  • 問題B:NAPT表のTCP行が192.168.30.41:55000と203.0.113.40:64001を対応付けています。サーバから203.0.113.40:64001への返信を内部へ転送するとき、宛先の組は何ですか
  • 問題C:二台が同じサーバへTCP通信し、外部IPも一つです。両方の外部送信元ポートを64002にしたまま区別できる、と説明されたとき、何を確認すべきですか
  • 問題D:UDPの変換表で192.168.30.42:56000と203.0.113.40:56000を対応付けています。ポートの値が同じという理由だけで、NAPTではないと断定できますか

問題Aの答えは203.0.113.40:54000です。Basic NATでIPだけを変換する条件なので、内部ポート54000はそのままです。サーバの443を送信元ポートへ移してしまった場合は、サーバ側とPC側の役割を再確認しましょう。通信の宛先は198.51.100.90:443のままです。

問題Bの答えは192.168.30.41:55000です。64001は外部側で返信を受けるためのポートで、内部側へ転送した後のポートではありません。宛先IPだけを戻して192.168.30.41:64001と答えないことが、この問題の確認点です。

問題Cでは、同じTCPの同じ相手先に対して外部側の組が衝突していないかを確認します。今回の条件のままでは二つの通信を区別できません。TCPの同時通信を妨げる割当については、RFC5382のTCPポート割当要件で説明されています。相手が違う、プロトコルが違う、といった条件を勝手に追加して正当化しないでください。

問題Dは断定できません。この表はアドレスとUDPポートの組を管理しており、ポートの値が偶然または保持によって同じになっている可能性があります。「番号が変わったか」だけではなく「何を対応付けに使っているか」を見る必要があります。提示された表と動作説明を優先しましょう。

ノートと通信模型を使い、送信と返信の情報を照合する学習机

四問のうちA・Bを間違えた場合は、変換前後の表に「送信元IP」「送信元ポート」「宛先IP」「宛先ポート」を書く練習が役立ちます。Cを間違えた場合は、二台の外部側の組が同じになったときに、返信をどちらへ戻せるかを考え直します。Dを間違えた場合は、数字が変わることと、ポートを管理することを分けて確認しましょう。

もう一つ、自分で表の数字を変える練習もできます。PC-Aの内部ポートを51000から51001へ変更し、外部側の62001はそのままにしてみてください。そのとき返信をPC-Aへ戻した後の宛先ポートは51001になります。外部番号を暗記して解いていると気付きにくいので、対応する二つの組を読み直せるかの確認になります。

NATとNAPTは変換する欄で整理する

Basic NATとの比較では、NATは内部IPと外部IPを一対一に対応付け、NAPTはポートも使って複数の内部端末で外部IPを共有する、と整理できます。略称だけで選ぶより、問題文がIPだけを対応付けているのか、IPとポートの組を扱っているのかを見ることが大切です。

変換表を解くときは、最初に方向を決めます。内部から外部への要求なら送信元側を、外部から内部へ戻る応答なら宛先側を確認します。そして外部側の組で行を選び、内部側のIPとポートをセットで復元します。プロトコルの指定があるときは、その列も省略しません。

説明を読んで分かったつもりになっても、空欄にすると送信元と宛先が逆になることがあります。自作例題の表を隠し、往路二行と復路二行を自分で書いてみましょう。次に実際の出題形式を練習したい方は、基本情報の過去問アプリでネットワーク分野の問題を確認できます。誤答したら、変換方式・通信の方向・復元する組のどこを取り違えたかへ戻って復習してください。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次