【テクニカル・上級編】 GCPカスタムモードVPCと自動モードVPCのサブネット自動作成挙動の違い – クラウドインフラと仮想化ネットワーク実践ガイド

GCP VPCの「自動」という名の甘美な罠:アーキテクトがカスタムモードを選ぶべき必然的理由

クラウドアーキテクトとして多くのインフラをレビューする際、私は決まって「VPCのモードは何か?」という問いから始める。GCPのVPC作成画面でついクリックしてしまう「自動モード(Auto Mode)」は、確かにプロトタイピングには便利だ。しかし、真に可用性とスケーラビリティを突き詰めるべき本番環境において、それは「制御不能なブラックボックス」になり得る。

今回は、自動モードとカスタムモードの根本的な差異を紐解き、パケットレベル、そしてインフラ設計の深淵からその本質を浮き彫りにする。

—

1. 自動モードとカスタムモード:パケットの「帰属」を制御する

自動モードのVPCを作成すると、GCPは各リージョンに対して 10.128.0.0/9 の範囲内から /20 のサブネットを自動的に切り出し、配置する。これは便利だが、オンプレミスとのVPN接続や、組織間でのVPCピアリングを検討した瞬間に悪夢へと変わる。

なぜ「自動」がエンタープライズで忌避されるのか

ネットワーク設計の鉄則は「IP重複の回避」と「ルーティングの予測可能性」だ。自動モードでは、将来的にどの範囲のCIDRがどのリージョンに割り当てられるかが動的に決定される。

もし君がハイブリッドクラウドを構築していて、オンプレ側の 10.128.0.0/16 とGCPの自動生成されたサブネットが衝突したらどうなるか? 経路情報の伝播(BGPの経路交換)において、より具体的なプレフィックス(Longest Prefix Match)を持つ経路が優先され、パケットは迷子になる。これが「通信が時々途切れる」という、最もデバッグが困難なネットワークの怪奇現象の正体だ。

# カスタムモードで明示的に定義するVPCの作成例
gcloud compute networks create my-hardened-vpc \
    --subnet-mode=custom \
    --bgp-routing-mode=global # 広域的な経路最適化のためグローバルモードを推奨

—

2. ネットワークパフォーマンスの極致:TCPバッファとRTTの最適化

インフラエンジニアとして避けて通れないのが、TCPスタックのチューニングだ。VPCのサブネット設計が適切であれば、次はパケットが駆け巡るトランスポート層を最適化する。

特に、広域なリージョン間通信や、TLSハンドシェイクが頻発するWebサービスでは、TCP Window Size の枯渇がボトルネックとなる。GCPの仮想ネットワークにおいて、高いスループットを維持するには、以下のカーネルパラメータを調整し、パケットがバッファでドロップされるのを防ぐ必要がある。

# /etc/sysctl.conf での設定例
# 高帯域・長距離通信におけるウィンドウサイズ拡張
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216
# TCP Fast Openを有効化し、ハンドシェイクのRTTを削減
net.ipv4.tcp_fastopen = 3

TCP Fast Open を導入することで、二回目以降の接続において、最初の SYN パケットにデータを埋め込むことが可能になり、TLSネゴシエーションのレイテンシを理論上1RTT削減できる。これは、モバイルユーザーのUXを劇的に改善する一手となる。

—

3. セキュリティとヘッダー圧縮:通信の「深層」

現代のネットワークセキュリティにおいて、パケットの可視化は必須だ。VPCフローログを活用し、特定のサブネット間での異常なトラフィックパターンを検知する。

また、Cloud CDN や HTTP/3 (QUIC) の採用は、トランスポート層の最適化において避けられない。QUICは UDP をベースとしており、TCPのヘッド・オブ・ライン・ブロッキングを解消するが、その分、コネクションの維持管理には注意が必要だ。

セキュリティ上の教訓:IPマスキングとファイアウォール

自動モードに頼りすぎると、サブネットが広大になりすぎ、ファイアウォールルール(ingress/egress)を「特定のIP帯域」で絞り込むことが困難になる。カスタムモードなら、サブネットを論理層(Web, App, DB)ごとに最小単位で分割できるため、ゼロトラストなネットワーク設計が容易になる。

# 最小権限の原則に基づくファイアウォールルール定義例
name: allow-app-to-db
direction: INGRESS
priority: 1000
sourceRanges: ["10.0.1.0/24"] # App層のみ許可
allowed:
  - protocol: tcp
    ports: ["5432"] # DB接続ポートのみ

—

結論:自動化の先にある「最適化」

自動モードのVPCは、クラウドへの入り口としては優秀だが、システムの血流であるネットワークを適切に「制御」することはできない。

優れたインフラアーキテクトは、パケットの行き先を自らの手で定義し、カーネルレベルのバッファをチューニングし、TLSハンドシェイクのオーバーヘッドを削ぎ落とす。GCPが提供する強力なコンピュートリソースを最大限に活かすためには、まずは「VPCの制御権」を自らの手に取り戻すことから始めてほしい。

ネットワークは決して無機質な箱ではない。君が設定したパラメータの一つひとつが、パケットの呼吸となり、ユーザーの体験という名の血流を加速させるのだ。次回の構築では、ぜひ「カスタムモード」の選択肢を検討してほしい。そこには、予測可能な未来が待っている。

コメント

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