AWSのネットワーク構築において、プライベートサブネットからインターネットへ接続するための仕組みを整理する。
IPv4とIPv6で外に出る方法の違い
IPv4
アドレスを変換(NAT)して外に出る。
IPv6
アドレスはそのまま、通信の向きだけ制限して外に出る。
この違いは、IPアドレスの枯渇というインターネットの歴史的背景に起因する。
IPv4の出口
IPv4アドレスは約43億個であり、インターネットの普及により枯渇している。
そのため、ネットワークの内側と外側でアドレスを使い分ける必要がある。
プライベートな環境では、その場所だけで通用するプライベートIPアドレスを使用するが、これではインターネットに接続できない。
そこで、境界に位置するNATゲートウェイを使用して通信を行う。
NAT(ネットワークアドレス変換)の仕組み
- 1, 内部のホストが外部へリクエストを送信する
- 2, NATゲートウェイがそれを受け取り、送信元を自身のパブリックIPアドレスに書き換えて外部へ送出する
- 3, 外部からの応答が戻ると、NATゲートウェイがリクエスト元を特定して内部のホストへ転送する
IPv6の出口
IPv6アドレスは事実上無限に存在する。
IPv4のようなNATによるアドレス変換を行う必要がないため、ホストは最初からグローバルアドレスを保持して直接通信を行う。
ただし、直接接続されることは外部からの攻撃リスクを伴うため、アドレス変換は行わずに通信のベクトルのみを制限する。
これがステートフル・インスペクションやEgress(出口)フィルタリングと呼ばれる仕組みらしい。
フィルタリングの仕組み
内部から外部へ向かう通信は許可される。
その際、ルーターはどのホストが外部へ通信を開始したかの履歴を一時的に保持する。
外部から届いたパケットがその履歴にある応答であれば通過させ、履歴にない外部からの接続試行はすべてブロックする。
IPv6の出口は、アドレスを書き換える変換器ではなく、中からは開くが外からは開かない一方通行のドアとして機能する。
結局、何が違うのか
IPv4(NAT)
アドレス不足を補うために、代表者のアドレスに変換して外部と通信する。
結果として内部のホストのアドレスが隠蔽される。
IPv6(出口専用)
アドレスに余裕があるため、個々のホストのアドレスを維持したまま通信する。
ただし、外部からの不正な侵入を防ぐために通信の向きを固定する。
まとめ
IPv4とIPv6のどちらにおいても、内部の安全を確保しつつ外部への通信を可能にするという目的は共通している。
その手段として、IPv4はアドレスの変換、IPv6は通信方向の制限という異なるアプローチをとっている。
(そもそもネットワークの知識なさすぎてそこから勉強しないとなと思っています)