【テクニカル・上級編】 CIDR(Classless Inter-Domain Routing)とIPアドレス設計 – クラウド&コンテナネットワーク実践ガイド

IPアドレス設計という「終わらない戦い」:VPC設計におけるCIDR選定の深淵

クラウドインフラの設計において、最初に直面し、かつ最も取り返しがつかない負債になり得るのが「CIDR設計」だ。

「とりあえず /16 を割り当てておけば大丈夫だろう」という安易な見積もりは、将来のマルチクラウド接続やオンプレミスとのVPN接続において、必ずと言っていいほど「IPアドレスの重複」という悪夢を連れてくる。本稿では、単なるIP管理を超えた、カーネルレベルのパケット挙動やRTT、さらにはセキュリティ設計にまで踏み込んだCIDR戦略を論じる。

—

1. CIDR選定の哲学:なぜ「広すぎる」のは罪なのか

VPCのCIDR設計において、多くのアーキテクトが陥るのが「余剰IPアドレスの罠」だ。特にAWSのような環境では、サブネットを小さく切っても直接的なコストは発生しない。しかし、ルーティングテーブルの複雑性や、後のIP枯渇を見越した拡張性は、物理的な境界以上に論理的な設計が求められる。

サブネット分割の戦略的アプローチ

私の経験上、VPC全体を /16 で設計する際、サブネットを /24 単位で固定するのは避けたい。可用性ゾーン(AZ)ごとに冗長化を前提とすると、以下の構成が黄金律となる。

  • Public Subnet: ロードバランサーやNAT Gateway用。/26 程度で十分。
  • Private Subnet (Application): コンテナ(EKS/GKE)が密に配置される。/22 〜 /23 で余裕を持たせ、IP枯渇によるデプロイ失敗を防ぐ。
  • Private Subnet (Data/DB): セキュリティグループによる厳格な隔離。/28 程度で管理し、攻撃対象領域を最小化する。

—

2. パケットの深層:TCPバッファとMTU最適化

IPアドレスの設計は、単なるラベル付与ではない。サブネット境界を越える際、パケットはルーター(仮想ルーター)を通過する。この時、最もパフォーマンスに影響を与えるのが TCP Window Size と MTU の不整合だ。

特にコンテナネットワーク(CNI)を利用する場合、カプセル化(VXLANやGeneve)によるオーバーヘッドが発生する。デフォルトの 1500 bytes のMTUでは、ヘッダー分(50〜100 bytes程度)が差し引かれ、断片化(Fragmentation)が頻発する。これがRTT増大の主因だ。

LinuxカーネルにおけるTCPチューニング例

以下の設定は、高負荷なマイクロサービス間通信において遅延を劇的に改善する可能性がある。

# TCPウィンドウサイズを拡大し、高帯域・高遅延ネットワークでのスループットを向上させる
sysctl -w net.ipv4.tcp_rmem="4096 87380 16777216"
sysctl -w net.ipv4.tcp_wmem="4096 65536 16777216"

# コンテナノード間通信でのコネクション再利用を最適化
sysctl -w net.ipv4.tcp_tw_reuse=1

—

3. セキュリティとトランスポート層の最適化

サブネットの境界設計は、セキュリティグループやNACLの適用範囲に直結する。特に TLS ハンドシェイク の最適化を考えるなら、TLS 1.3 への強制移行と 0-RTT(Zero Round Trip Time)の活用を検討すべきだ。

しかし、0-RTT はリプレイ攻撃のリスクを孕む。これを防ぐためには、アプリケーションレイヤーでの冪等性確保が不可欠だ。

HTTPヘッダー圧縮とセキュリティヘッダー

ネットワーク層でCIDRを適切に分けることは、インバウンド・アウトバウンドのトラフィックを可視化しやすくする。セキュリティを高めるためのヘッダー付与例を以下に示す。

# Nginx等のリバースプロキシで設定する推奨ヘッダー
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always;
add_header X-Content-Type-Options nosniff;
add_header X-Frame-Options DENY;

—

4. 拡張性を担保するためのベストプラクティス

最後に、数年後の「未来の自分」を助けるための設計指針を共有する。

1. RFC 1918 以外の利用を考慮する: 10.0.0.0/8 は既に枯渇しがちだ。可能であれば 100.64.0.0/10(Carrier-Grade NAT)の範囲も検討対象に入れ、大規模なプライベートネットワークを構築せよ。
2. IPAM(IP Address Management)の導入: 手動のExcel管理は自殺行為だ。AWS IPAMやTerraformの cidrsubnet 関数を活用し、宣言的に管理せよ。

# Terraformでのサブネット設計例
# 複雑な計算を関数に任せることで、将来的なCIDR拡張が容易になる
resource "aws_subnet" "app" {
  vpc_id            = aws_vpc.main.id
  cidr_block        = cidrsubnet(var.vpc_cidr, 4, 1) # /16を/20に分割
  availability_zone = "ap-northeast-1a"
}

結びに代えて

ネットワーク設計は、クラウドの「骨格」だ。ここが歪んでいれば、どれほど優秀なアプリケーションを載せても、レイテンシという名の癌に蝕まれることになる。

パケットがどのルートを通り、どのヘッダーが付与され、カーネルがどう処理しているか。その一挙手一投足に想像を巡らせることこそが、真のSREへの第一歩である。さあ、今すぐあなたのVPCのCIDR設計を見直し、無駄なオーバーヘッドを削ぎ落とそうではないか。

コメント

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