AWS VPC Peeringを活用したマルチAZ構成設計ガイド|CIDR重複回避と経路制御

運営:リナックスマスター.JP(代表 宮崎智広)
HOME > Linux技術 リナックスマスター.JP(Linuxマスター.JP) > AWS(Amazon Linux) > AWS VPC Peeringを活用したマルチAZ構成設計ガイド|CIDR重複回避と経路制御
「VPC PeeringをActiveにしたのにPingが通らない」
「CIDR重複でPeering接続が拒否された」

VPC Peeringの設定でつまずくポイントは、ほぼこの2点に集約されます。Peering接続がActiveになっても、ルートテーブルへの経路追加を両VPC側で行わなければ疎通はできません。またCIDRブロックが重複したままでは、そもそも接続要求が通りません。

この記事では、AWS VPC Peeringを使ったマルチAZ構成設計を中心に、CIDR重複を防ぐアドレス計画から、ルートテーブルへの経路追加・セキュリティグループ設定・VPCをまたいだDNS名前解決まで、CLIコマンドを交えて体系的に解説します。Transit Gatewayとの比較ではなく「VPC Peeringだけで複数VPCを繋ぐ設計」を想定した実践ガイドです。この記事では、Amazon Linux 2023/AWS CLI v2を想定環境として説明します。

この記事のポイント

・CIDRブロックの重複があるとVPC Peering接続要求が通らない(設計段階で分割する)
・PeeringがActiveでも双方のルートテーブルに相手CIDR宛の経路を追加しないと疎通しない
・セキュリティグループはPeering先のCIDRブロックを送信元として明示的に許可する
・enableDnsSupport・enableDnsHostnamesを有効にするとVPC間でDNS名前解決が可能になる


「このままじゃマズい」と感じていませんか?
参考書を開く気力もない、同年代に取り残される不安——
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
姓・名・メールの3つだけ/30秒/解除は3秒 / 詳細はこちら

VPC Peeringとは:どんな場面で使うか

VPC Peering(VPCピアリング)は、2つのVPCをAWSのプライベートネットワーク上で直接接続する機能です。インターネットゲートウェイ・VPN・Direct Connectを経由しないため、低レイテンシ・低コストでVPC間通信を実現できます。

代表的なユースケースは次のとおりです。

・本番VPCとステージングVPCを分離しつつ共通サービスへアクセスさせる
・アカウント間でDBやログ収集サービスを共有する
・組織内の複数プロジェクトVPCを1つの共通サービスVPCに集約する

3つ以上のVPCを相互に接続する場合、VPC Peeringは N×(N-1)/2 本の接続が必要です。VPCが4つなら6本、5つなら10本になります。この段階ではTransit Gatewayの方がシンプルになります。VPC Peeringは「2~3個のVPCを繋ぐシンプルな構成」に最も向いています。

CIDRブロック設計:重複しないアドレス計画の立て方

VPC Peeringの最大の制約は「CIDRブロックが重複しているVPC間では接続できない」点です。後から気づいても、既存VPCのCIDRは変更できないため(追加はCIDR追加機能で可能ですが既存サブネット削除が前提)、**設計段階での計画が最重要**です。

1. 推奨するCIDRアドレス設計パターン

RFC 1918のプライベートIPアドレス空間(10.0.0.0/8など)を組織全体で体系的に分割します。

# CIDRアドレス割り当て例(マルチVPC設計) # # 環境 VPC CIDR AZ-a サブネット AZ-c サブネット # ───────────────────────────────────────────────────── # 本番 10.0.0.0/16 10.0.1.0/24 10.0.2.0/24 # ステージング 10.1.0.0/16 10.1.1.0/24 10.1.2.0/24 # 共通サービス 10.2.0.0/16 10.2.1.0/24 10.2.2.0/24 # 開発 10.3.0.0/16 10.3.1.0/24 10.3.2.0/24

/16 を環境単位で割り当て、/24 をAZ(アベイラビリティゾーン)単位で割り当てることで、将来VPCを追加しても重複が起きません。

2. CIDR重複チェックのCLIコマンド

既存VPCのCIDRを一覧確認してから設計するのが安全です。

# 既存VPCのCIDRブロック一覧を取得する aws ec2 describe-vpcs \ --query 'Vpcs[*].{VpcId:VpcId,CIDR:CidrBlock,Name:Tags[?Key==`Name`]|[0].Value}' \ --output table

出力例(環境により異なります):

-------------------------------------------------- | DescribeVpcs | +---------------+------------------+-------------+ | CIDR | Name | VpcId | +---------------+------------------+-------------+ | 10.0.0.0/16 | prod-vpc | vpc-0abc123 | | 10.1.0.0/16 | staging-vpc | vpc-0def456 | | 172.31.0.0/16 | default | vpc-0ghi789 | +---------------+------------------+-------------+

VPC PeeringをCLIで設定する手順

ここでは、本番VPC(10.0.0.0/16)と共通サービスVPC(10.2.0.0/16)をマルチAZで接続する手順を示します。

1. VPC Peering接続の要求

# Peering接続を要求する(要求元VPCから実行) aws ec2 create-vpc-peering-connection \ --vpc-id vpc-0abc123 \ --peer-vpc-id vpc-0xyz999 \ --tag-specifications 'ResourceType=vpc-peering-connection,Tags=[{Key=Name,Value=prod-to-shared}]' # 出力から VpcPeeringConnectionId(pcx-xxxxxxxx)を控える

2. Peering接続の承認

# 承認(同一アカウントなら要求元で実行可能) aws ec2 accept-vpc-peering-connection \ --vpc-peering-connection-id pcx-0abc12345 # ステータスがActiveになることを確認する aws ec2 describe-vpc-peering-connections \ --vpc-peering-connection-ids pcx-0abc12345 \ --query 'VpcPeeringConnections[0].Status.Code' # 出力: "active"

3. 双方向のルートテーブルへ経路を追加する

ここが最も見落とされやすいポイントです。**PeeringがActiveになっただけでは疎通しません。**両VPC側のルートテーブルに、相手VPCのCIDRブロック宛の経路を手動で追加する必要があります。

# 本番VPCのルートテーブルID一覧を確認する aws ec2 describe-route-tables \ --filters "Name=vpc-id,Values=vpc-0abc123" \ --query 'RouteTables[*].{RouteTableId:RouteTableId,Subnets:Associations[*].SubnetId}' \ --output table # 本番VPC側:共通サービスVPC(10.2.0.0/16)宛の経路を追加する aws ec2 create-route \ --route-table-id rtb-0prod1234 \ --destination-cidr-block 10.2.0.0/16 \ --vpc-peering-connection-id pcx-0abc12345 # 共通サービスVPC側:本番VPC(10.0.0.0/16)宛の経路を追加する aws ec2 create-route \ --route-table-id rtb-0shared5678 \ --destination-cidr-block 10.0.0.0/16 \ --vpc-peering-connection-id pcx-0abc12345

マルチAZの場合、各AZにサブネットが存在し、それぞれ別のルートテーブルが紐付いていることがあります。その場合は**各ルートテーブルに対して経路追加を繰り返す**必要があります。

セキュリティグループ設定:Peering先CIDRで絞る

ルートテーブルの経路を追加しただけでは、セキュリティグループ(SG)が通信をブロックします。SGの送信元(インバウンドルール)に、Peering先VPCのCIDRブロックを明示的に許可します。

# 共通サービスVPC内のDBへ、本番VPCからのMySQL接続を許可する例 aws ec2 authorize-security-group-ingress \ --group-id sg-0shared-db \ --protocol tcp \ --port 3306 \ --cidr 10.0.0.0/16 # 設定を確認する aws ec2 describe-security-groups \ --group-ids sg-0shared-db \ --query 'SecurityGroups[0].IpPermissions'

注意点として、**SGのルールでは相手のSGを参照するよりもCIDRブロックで指定した方がシンプル**です。SGを参照(SGリファレンス)すると、異なるアカウント間でのPeeringでは動作しないケースがあります。

VPCをまたいだDNS名前解決の有効化

VPC Peeringで繋いだだけでは、相手VPCのEC2インスタンスをプライベートDNS名(ip-10-2-1-50.ap-northeast-1.compute.internal など)で解決できません。DNS名前解決を有効にするには、Peering接続のオプションを設定します。

# 要求元VPC → 相手VPCのDNS名解決を有効化する aws ec2 modify-vpc-peering-connection-options \ --vpc-peering-connection-id pcx-0abc12345 \ --requester-peering-connection-options '{"AllowDnsResolutionFromRemoteVpc":true}' # 相手VPC(承認側)でも同様に有効化する aws ec2 modify-vpc-peering-connection-options \ --vpc-peering-connection-id pcx-0abc12345 \ --accepter-peering-connection-options '{"AllowDnsResolutionFromRemoteVpc":true}'

前提として、両VPCで `enableDnsSupport` と `enableDnsHostnames` が有効になっている必要があります。VPC内のLinux DNS 設定の基本と合わせて理解しておくと、VPCをまたいだ名前解決の挙動が整理できます。

よくあるトラブルと解決策

「PeeringがActiveなのにPingが通らない」

最も多いパターンです。確認順序は次のとおりです。

・ルートテーブル: 双方のVPCで相手CIDR宛の経路が追加されているか
・セキュリティグループ: インバウンドルールにPeering先CIDRが許可されているか
・ネットワークACL: VPCのACLにデフォルト(DENY ALL)以外のルールが入っているか

# ルートテーブルの確認(相手CIDRへの経路がpcxに向いているか確認する) aws ec2 describe-route-tables \ --route-table-ids rtb-0prod1234 \ --query 'RouteTables[0].Routes[?DestinationCidrBlock==`10.2.0.0/16`]'

「Peering接続要求が拒否されてActiveにならない」

・CIDRブロックが重複している: 片方のVPCのCIDRを変更(または追加)して再設計する
・アカウントIDまたはリージョンが違う: `--peer-owner-id` と `--peer-region` を明示して再要求する
・承認前にタイムアウト(7日): 新たに接続を要求し直す

「異なるリージョン間(クロスリージョンPeering)でDNSが解決できない」

クロスリージョンPeeringでは `AllowDnsResolutionFromRemoteVpc` オプションがサポートされていません。Route 53プライベートホストゾーンを両リージョンのVPCに関連付けることで代替します。

本記事のまとめ

やりたいこと コマンド・設定
既存VPCのCIDRを確認する aws ec2 describe-vpcs --query '...'
VPC Peering接続を要求する aws ec2 create-vpc-peering-connection
Peering接続を承認する aws ec2 accept-vpc-peering-connection
ルートテーブルに経路を追加する(双方) aws ec2 create-route --vpc-peering-connection-id
SGでPeering先CIDRを許可する aws ec2 authorize-security-group-ingress --cidr
DNS名前解決を有効にする aws ec2 modify-vpc-peering-connection-options
VPC PeeringはTransit Gatewayより設定ステップが多い反面、コストが低く(データ転送費のみ)接続の見通しがシンプルです。複数VPCを繋ぐ前にCIDRアドレス計画を体系的に立てること、ルートテーブルへの経路追加を両VPCで必ず行うこと、この2点を押さえれば大半のトラブルを防げます。

VPC Peeringを含むAWSネットワーク設計の基礎から学びたい場合は、AWSセミナーの詳細ページもあわせてご確認ください。
現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、Linux Master Pro Seminar(AWS対応)の詳細はこちら>>

無料メルマガで学習を続ける

Linuxの実践スキルをメールで毎週お届け。
登録は30秒、解除もいつでも可。

登録無料・いつでも解除できます

暗記不要・1時間後にはサーバーが動く

3,100名以上が実践した「型」を無料で公開中

プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。

姓・名・メールの3つだけ/30秒/解除は3秒 / 詳細はこちら

Linux無料マニュアル(図解60P) 名前とメールで30秒登録

運営

リナックスマスター.JP(代表 宮崎智広)

株式会社イーネットマーキュリーが運営するLinux教育サイトです。代表の宮崎智広は現役のLinuxサーバー管理者として20年以上の実務経験を持ち、累計3,100名以上のエンジニアを指導してきました。実践型のLinuxセミナーや無料マニュアルの配布を通じてLinux人材の育成に取り組んでいます。