【テクニカル・上級編】 パブリックサブネットの定義とインターネットゲートウェイ(IGW)とのルーティング設計 – クラウド&コンテナネットワーク実践ガイド

パブリックサブネットとIGWの「本当の姿」:パケットが世界へ飛び出す瞬間

クラウドのインフラを設計する際、VPC(Virtual Private Cloud)の作成から始めるのはSREやインフラエンジニアにとって儀式のようなものだ。だが、「パブリックサブネットとは何か?」という問いに、単に「インターネットゲートウェイ(IGW)へのルートを持つサブネットです」と教科書通りの回答で満足していないだろうか。

実務の現場では、その無邪気なルーティング設定の裏側で、Linuxカーネルのネットワークスタック、仮想化レイヤーのパケット書き換え、そしてBGP(Border Gateway Protocol)による広大な経路制御が複雑に絡み合っている。今回は、パブリックサブネットがインターネットに直結されるメカニズムを、パケットレベルの挙動から極限のパフォーマンスチューニング、そしてセキュリティの急所まで、徹底的に解剖していこう。

—

1. パケットレベルで見るIGW連携の内部挙動

パブリックサブネットに配置されたEC2インスタンスなどのリソースから、インターネット上の外部サーバー(例えば 1.1.1.1)へ向けたパケットが送出される瞬間、何が起きているのか。

ルーティングテーブルとプレフィックスマッチの現実

インスタンスのカーネルルーティングテーブルには、デフォルトゲートウェイとしてVPCルーターのIPアドレス(通常はサブネットのベースIP + 2)が指定されている。アプリケーション層からソケットを通じて送出されたTCPセグメントは、IPヘッダーに宛先IP 1.1.1.1 を刻み、カーネルのL3レイヤーによってVPCルーターへ向けたイーサネットフレームとしてカプセル化される。

ここでAWSなどのメガクラウドの裏側を覗いてみよう。サブネットのルートテーブルに以下のような設定を書いたとき、何が起きているか。

{
  "DestinationCidrBlock": "0.0.0.0/0",
  "GatewayId": "igw-xxxxxxxxxxxxxxxxx"
}

このルーティングエントリは、VPCの分散ルーター群に対して「0.0.0.0/0 に一致するすべてのパケットを、物理的なインターネットエッジに存在するIGWへ転送せよ」という命令を意味する。

IGWにおけるSNAT(Source NAT)の不在とルーティングの妙

よくある誤解として、「パブリックサブネット内のリソースも、NATゲートウェイを通るようにプライベートIPからパブリックIPへ変換(SNAT)されている」というものがある。しかし、パブリックサブネット上のリソースが持つENI(Elastic Network Interface)にグローバルIP(パブリックIPまたはEIP)が割り当てられている場合、IGWでSNATは行われない。

パケットはプライベートIPアドレス(例: 10.0.1.100)を送信元IPとしたままIGWに到達し、IGWは単にL2/L3のバウンダリーとして、それをワールドワイドなインターネット網へとルーティングする。つまり、パブリックサブネットのリソースは、インターネットに対して「裸のプライベートIP」のまま直結されている(もちろん、セキュリティグループとネットワークACLがファイアウォールとして機能している前提だが)。

この挙動を理解していないと、セキュリティ監査の際に「なぜこのサーバーのログに直接グローバルIPからの通信が記録されるのか」という根本的な見落としを生む原因になる。

—

2. エッジケースの罠:非対称ルーティングとホップバイホップの制約

クラウドネットワークの設計で最もエンジニアを悩ませるのが、エッジケースにおけるパケットロスや接続断だ。特に、マルチホーム環境や複雑な仮想アプライアンス(次世代ファイアウォールなど)をパブリックサブネットに配置する際に、非対称ルーティング(Asymmetric Routing)の罠に落ちることが多い。

非対称ルーティングが発生するメカニズム

通常、TCPコネクションは往復で同一の経路を通ることが期待される。しかし、パブリックサブネット内に複数のネットワークインターフェース(ENI)を持つインスタンスを配置し、それぞれ異なるルートテーブルを適用した場合、以下のような現象が起きる。

1. 往路: インスタンスの eth0 からパケットが出て、IGW経由でインターネットへ向かう。
2. 復路: インターネットからの応答パケットがIGWを通り、インスタンスの eth1 に着弾する。

Linuxカーネルのデフォルト設定(rp_filter = 1:Strict Reverse Path Filtering)では、パケットが受信されたインターフェースと、ルーティングテーブル上の送信元への経路が一致しない場合、そのパケットをセキュリティ上の脅威(IPスプーフィングなど)とみなして容赦なく破棄(ドロップ)する。

このトラブルを回避するためのカーネルパラメータチューニングの例を見ておこう。

# /etc/sysctl.d/99-network-performance.conf
# リバースパスフィルタリングを緩めのモード(Loose Mode: 2)に変更する
# これにより、マルチホーミング環境や非対称ルーティング時の意図しないパケットドロップを防ぐ
net.ipv4.conf.all.rp_filter = 2
net.ipv4.conf.default.rp_filter = 2

# 特定のインターフェースごとに個別設定する場合
net.ipv4.conf.eth0.rp_filter = 2
net.ipv4.conf.eth1.rp_filter = 2

インフラエンジニアとして、ルーティングテーブルの静的な美しさだけでなく、OS内部のパケット検証ロジックまで見通す目が求められる所以だ。

—

3. 極限のパフォーマンスチューニング:RTT削減とTCPスタックの最適化

パブリックサブネットはインターネットとの最前線である。ミリ秒単位のレイテンシー削減がビジネスの勝敗を分ける現代において、デフォルトのOS設定のまま運用するのは怠慢と言わざるを得ない。ここでは、LinuxカーネルレベルでのTCP/IPスタックのチューニング手法を紐解く。

1. 初期輻輳ウィンドウ(Initial Congestion Window: initcwnd)の拡大

Linuxのデフォルトでは、TCPの3ウェイハンドシェイク直後に送信できるセグメント数(initcwnd)が少なめに設定されていることが多い。これを拡張することで、最初のラウンドトリップタイム(RTT)内で転送できるデータ量を増やし、体感速度を劇的に改善できる。

# 現在のルートキャッシュにおけるinitcwndを確認する
ip route show

# ipコマンドを使用して、特定のルートに対するinitcwndを強制的に10セグメント(約15KB)に拡張する例
ip route replace default via 10.0.1.1 dev eth0 initcwnd 10

2. BBR(Bottleneck Bandwidth and RTT)輻輳制御アルゴリズムの採用

長距離のインターネット通信や、パケットロス率がわずかにある環境では、従来のCUBICアルゴリズムよりもGoogleが開発したBBRの導入が圧倒的な効果を発揮する。BBRは、パケットロスを輻輳のシグナルとして捉えるのではなく、利用可能な帯域幅と伝搬遅延をリアルタイムで測定して送信レートを動的に決定する。

# カーネルがBBRをサポートしているか確認し、有効化する
# /etc/sysctl.d/99-bbr.conf

# 利用可能な輻輳制御アルゴリズムに bbr が含まれていることを確認後、設定を追記
net.core.default_qdisc = fq
net.ipv4.tcp_congestion_control = bbr

設定を反映するには、以下のコマンドを実行する。

sudo sysctl --system

これにより、パブリックサブネットからインターネットを跨いだAPI通信やデータ転送のスループットが限界まで引き上げられる。

—

4. セキュリティの要:パブリックサブネットにおける脆弱性回避策

「パブリック」という言葉の響きは、セキュリティ担当者の背筋を凍らせる。インターネットに直結されている以上、常にゼロデイ攻撃や不正アクセスの脅威に晒されているからだ。

セキュリティグループとネットワークACLの多層防御(Defense in Depth)

パブリックサブネットを安全に保つための鉄則は、「信頼するな、常に検証せよ(Zero Trust)」の精神に基づいたステートフルなフィルタリングの徹底だ。

  • セキュリティグループ(SG): インスタンスレベルのファイアウォール。ステートフル(往信を許可すれば復信は自動許可)であり、最小権限の原則に基づき、必要なポート(例: HTTPS 443)のみを外部から許可する。SSH(22)やRDP(3389)のフルオープン(0.0.0.0/0)などは論外であり、AWS Systems Manager Session Managerなどを活用して踏み台サーバーすら排除するのがモダンなアプローチだ。
  • ネットワークACL(NACL): サブネットレベルのファイアウォール。こちらはステートレスであるため、インバウンドだけでなくアウトバウンドのルール(特に一時ポートの範囲 1024-65535)を明示的に記述しなければならない。NACLは、特定の悪意あるIPレンジからのDDoS攻撃やスキャンをサブネットの境界で即座にドロップするための「最初の防壁」として機能する。

—

結びにかえて

パブリックサブネットとインターネットゲートウェイの連携は、一見するとクラウドのマネージドサービスが自動でやってくれるシンプルな機能に見える。しかし、その背後にはL3/L4のプロトコル仕様、OSカーネルのパケット処理哲学、そしてパフォーマンスとセキュリティの果てしないトレードオフが存在している。

「なぜこの設定が必要なのか」「パケットはこの瞬間、どこを通っているのか」。その泥臭い問いかけを忘れないことこそが、真に信頼性の高いインフラを支えるSRE・アーキテクトの矜持なのである。さあ、今すぐ自身のVPCのルートテーブルとカーネルパラメータを見直し、ネットワークの底力を限界まで引き出してみよう。

コメント

タイトルとURLをコピーしました