NATとファイアウォール — 少ないIPを分け合い、境界で守る

家に何台あっても、外の世界から見えるIPアドレスはたった1つ。この「住所の使い回し」を成立させるのがNAT、そして通信の出入り口で怪しいものを止めるのがファイアウォールです。1つのグローバルIPをどう分け合い、返信をどうやって正しい端末へ戻し、境界で何を通し何を止めるのか — 流れるパケットで見ていきます。

1. なぜ住所を共有できるのか — NAT

世界中で使えるグローバルIPv4アドレスは約43億個しかなく、とうに足りません。そこで各家庭・会社の内側ではプライベートアドレス(192.168.x.x など)を自由に使い、外に出る瞬間だけルータが送信元を1つの共有グローバルIPに書き換えます。これがNAT(Network Address Translation)です。

下のデモで送信元ホストを切り替え、パケットが内側のプライベートアドレス → 共有グローバルIPへと書き換わる瞬間を見てください。

NAT変換 — 送信元アドレスが書き換わる
水色=内側のプライベートアドレス、緑=共有のグローバルIP。ルータを通るとき、送信元が 192.168.0.1X:5xxxx → 203.0.113.5:4xxxx に書き換わります。宛先(サーバ:443)はそのまま。外の世界には全端末が「1つのIPから来ている」ように見えます。
POINT — ポート番号まで書き換える NAPT 実用されるNATは、IPだけでなくポート番号も付け替えるNAPT(IPマスカレード)。宛先が同じ 443 番でも、外側ポートを端末ごとに変えて割り当てるので、たった1つのグローバルIPで数万本の同時接続を1本1本区別できます。
( 192.168.0.11 : 51001 ) ⇄ ( 203.0.113.5 : 40001 ) 内側の(IP:ポート)と、外側の共有IPに割り当てた(IP:ポート)を1対1で対応づける。この対応表が NAT の心臓部

2. 変換表が「往復」を仕分ける

書き換えて送り出すだけなら簡単ですが、問題は返信です。サーバからの応答は共有グローバルIPに宛てて返ってきます。ルータはどの内側ホストに戻せばいいかを、送信時に記録したNAT変換表の外側ポートを手がかりに逆引きします。

下のデモは、内側から出た通信が表にエントリを作り、返信がその行にマッチして正しいホストへ戻る往復を繰り返します。ボタンで「外から突然やってくる未承認パケット」に切り替えると、対応する行がない通信は戻せず破棄されることがわかります。

NAT変換表 — 返信を正しいホストへ戻す
上=ネットワーク図、下=NAT変換表。正常な往復では、出ていく通信が使った外側ポートを頼りに返信が逆引きされ、光った行のホストへ戻ります。未承認アクセスに切り替えると、表に該当がない外からの通信は戻し先が決められず破棄されます — NATは副産物として簡易な防壁にもなります。
POINT — 内側から始めた通信しか帰り道がない 変換表の行は内側からの送信が作るもの。だから外側から勝手に始まった通信には対応する行がなく、ルータは戻し先を決められません。これは意図した防御ではなくNATの構造上のおまけですが、結果として外からの一方的な接続を通しにくくします。

3. ファイアウォール — ルールで通す・止める

NATの「おまけの防壁」だけでは足りません。明示的に「何を通し、何を止めるか」をルールで決めるのがファイアウォールです。届いたパケットを、宛先ポートや送信元アドレスなどの条件でルールリストと照らし合わせ、上から順に最初に一致したルールで通す/落とすを決めます。

下のデモで各ルールを許可/拒否に切り替えてみてください。到着したパケットが壁で選別され、許可されたものだけが通り抜けます。

ファイアウォール — ルールリストで選別する
左からポート番号つきのパケットが流れてきます。壁で上から順にルールを照合し、最初に一致したルールで判定。許可なら壁を通り抜け(緑)、拒否なら壁で止められます(赤 ✗)。ルールに載っていないポートは既定ポリシーで処理されます。ボタンで判定を切り替えて挙動を確かめてください。
注意 — 既定は「拒否」が安全側(デフォルトディナイ) ルールに載っていない通信をどう扱うかで安全性が大きく変わります。既定拒否(許可したものだけ通す)が原則。逆に既定許可にすると、想定外の穴が空きやすくなります。なお、ここで学ぶのは防御の原理であって攻撃手順ではありません。自分のシステム以外への侵入・攻撃は犯罪です(不正アクセス禁止法などで処罰されます)。

4. ステートフル検査 — 境界防御の要

ポート番号だけで機械的に判定すると、「内側から始めた通信の返信」まで塞いでしまいます。そこで現代のファイアウォールは接続の状態(ステート)を覚えます。内側から出た接続を記録し、その接続に対応する戻りの通信だけを通す。外側から一方的に始まった未承認の接続は、対応する状態がないので境界で遮断します。

下のデモで、内から開始した通信と外から来た未承認の通信が境界でどう扱われるかを比べてください。

ステートフルファイアウォール — 内から始めた通信だけ通す
中央が境界(ファイアウォール)、左=内側LAN、右=外側インターネット。内から開始すると接続が状態表に記録され、その返信は通過します。外から試みると、対応する状態がないため境界で遮断されます。「内側発の通信とその応答だけを通す」— これが境界防御の基本形です。
POINT — 状態を持つと「返信」と「不意打ち」を区別できる 同じ「外から内へ」向かうパケットでも、内側の接続に対する返信なら通し、心当たりのない接続要求なら落とす。この区別を可能にするのが接続状態の記録です。ステートレス(1パケットずつ独立に判定)では難しく、通信を会話として追跡することで実現されます。

5. まとめ — 分け合いと防御は別の仕事

一歩先へ — CGNAT・IPv6・そして「境界の消失」 IPv4枯渇が進み、事業者がもう一段のNAT(CGNAT)を重ねる例も一般化しました。一方 IPv6 はアドレスが実質無尽蔵で、原理的にはNATが要りません(ただしファイアウォールによる境界防御は依然必要)。さらにクラウド時代には「社内=安全」という前提自体が崩れ、通信ごとに認証・検証するゼロトラストへと重心が移りつつあります。境界防御は不要になるのではなく、境界の引き方が変わっていくのです。次のTLS・QUIC・HTTP/3では、その通信そのものを暗号化して守るしくみを見ます。