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の「おまけの防壁」だけでは足りません。明示的に「何を通し、何を止めるか」をルールで決める のがファイアウォール です。届いたパケットを、宛先ポートや送信元アドレスなどの条件でルールリストと照らし合わせ、上から順に最初に一致したルール で通す/落とすを決めます。
下のデモで各ルールを許可/拒否に切り替えて みてください。到着したパケットが壁で選別され、許可されたものだけが通り抜けます。
ファイアウォール — ルールリストで選別する
443 HTTPS: 許可
80 HTTP: 許可
22 SSH: 拒否
その他(既定): 拒否
⏸ 一時停止
左からポート番号つきのパケットが流れてきます。壁で上から順にルールを照合し、最初に一致したルール で判定。許可なら壁を通り抜け(緑)、拒否なら壁で止められます(赤 ✗)。ルールに載っていないポートは既定ポリシー で処理されます。ボタンで判定を切り替えて挙動を確かめてください。
注意 — 既定は「拒否」が安全側(デフォルトディナイ)
ルールに載っていない通信をどう扱うかで安全性が大きく変わります。既定拒否 (許可したものだけ通す)が原則。逆に既定許可にすると、想定外の穴が空きやすくなります。なお、ここで学ぶのは防御の原理 であって攻撃手順ではありません。自分のシステム以外への侵入・攻撃は犯罪です (不正アクセス禁止法などで処罰されます)。
4. ステートフル検査 — 境界防御の要
ポート番号だけで機械的に判定すると、「内側から始めた通信の返信 」まで塞いでしまいます。そこで現代のファイアウォールは接続の状態(ステート)を覚えます 。内側から出た接続を記録し、その接続に対応する戻りの通信だけを通す 。外側から一方的に始まった未承認の接続は、対応する状態がないので境界で遮断します。
下のデモで、内から開始した通信 と外から来た未承認の通信 が境界でどう扱われるかを比べてください。
ステートフルファイアウォール — 内から始めた通信だけ通す
▷ 内から接続を開始
◁ 外から接続を試みる
⏸ 一時停止
中央が境界(ファイアウォール)、左=内側LAN、右=外側インターネット。内から開始 すると接続が状態表に記録され、その返信は通過 します。外から試みる と、対応する状態がないため境界で遮断 されます。「内側発の通信とその応答だけを通す」— これが境界防御の基本形です。
POINT — 状態を持つと「返信」と「不意打ち」を区別できる
同じ「外から内へ」向かうパケットでも、内側の接続に対する返信 なら通し、心当たりのない接続要求 なら落とす。この区別を可能にするのが接続状態の記録です。ステートレス(1パケットずつ独立に判定)では難しく、通信を会話として追跡 することで実現されます。
5. まとめ — 分け合いと防御は別の仕事
NAT/NAPT :内側のプライベートアドレスを、外向きの瞬間に共有グローバルIP:ポートへ書き換える。IPv4枯渇への現実解。
変換表 :内側からの送信が行を作り、返信はその外側ポートを逆引きして正しいホストへ戻す。表にない通信は戻せない。
ファイアウォール :ルールリストで通す/止めるを明示。上から最初に一致したルールで判定し、既定は「拒否」が安全側。
ステートフル検査 :接続状態を覚え、内側発の通信とその応答だけを通す。境界防御の基本形。
NATは「アドレスを分け合う」仕事、ファイアウォールは「境界を守る」仕事。似て見えるが役割は別物。
一歩先へ — CGNAT・IPv6・そして「境界の消失」
IPv4枯渇が進み、事業者が
もう一段のNAT(CGNAT) を重ねる例も一般化しました。一方
IPv6 はアドレスが実質無尽蔵で、原理的にはNATが要りません(ただしファイアウォールによる境界防御は依然必要)。さらにクラウド時代には「社内=安全」という前提自体が崩れ、通信ごとに認証・検証する
ゼロトラスト へと重心が移りつつあります。境界防御は不要になるのではなく、
境界の引き方が変わっていく のです。次の
TLS・QUIC・HTTP/3 では、その通信そのものを暗号化して守るしくみを見ます。