前書き
状況
1つのVPCが2つのVPCとピアリング接続をします。このとき、ピアリング先のVPCのCIDRが同じネットワーク範囲とします。
片方のピアリング先VPCには、ひとつだけ通信したいホストがあるとします。
このような状況を想定して、VPCピアリングの設定からルーティングまでを行ってみたいと思います。
図解
今回やることを図にすると以下のようになります。
使用するケース
既存のピアリング接続が存在するVPCに追加(例えば別のお客様やグループ会社)のVPCピアリングを追加するとき、それらの接続先VPCのネットワーク範囲(CIDR)が重なる場合に使用できます。
ピアリング接続するVPC間のCIDRは重複してはなりません。
プレフィックス最長一致が適用されるので、最も具体的なルートにルーティングできます。
今回の場合、172.16.2.0/24の中で「172.16.2.100」のみ異なるVPCへ送信します。このとき、ルーティングでは「172.16.2.100/32」を宛先とします。プレフィックスが最長一致となるので、送信したいVPCへ送信できます。
コンポーネント
使用するコンポーネントと設定値を記載します。
VPC・サブネット
VPC名 | CIDR | サブネット | 備考 |
---|---|---|---|
vpc-00 | 10.0.0.0/16 | 10.0.2.0/24 | 中央VPC |
vpc-01 | 172.16.0.0/16 | 172.16.2.0/24 | 接続先VPC① |
vpc-02 | 172.16.0.0/16 | 172.16.2.0/24 | 接続先VPC② |
EC2
名前 | IPアドレス | 所属VPC | 備考 |
---|---|---|---|
Linux0 | 10.0.2.10 | vpc-00 | |
Linux1-2 | 172.16.2.50 | vpc-01 | セキュリティグループで、10.0.0.0/16からのICMPを許可。 |
Linux1-1 | 172.16.2.150 | vpc-01 | セキュリティグループで、10.0.0.0/16からのICMPを許可。 |
Linux2 | 172.16.2.100 | vpc-02 | セキュリティグループで、10.0.0.0/16からのICMPを許可。 |
ルートテーブル
VPC | 送信先 | ターゲット |
---|---|---|
vpc-00 | 10.0.0.0/16 | local |
vpc-00 | 172.16.2.0/24 | vpc-01とのピアリングID |
vpc-00 | 172.16.2.100/32 | vpc-02とのピアリングID |
vpc-01 | 172.16.0.0/16 | local |
vpc-01 | 10.0.2.0/24 | vpc-00とのピアリングID |
vpc-02 | 172.16.0.0/16 | local |
vpc-02 | 10.0.2.0/24 | vpc-00とのピアリングID |
やってみる
VPCピアリングの設定
vpc-00が配置されているAWSアカウント(中央VPC)にログインして、VPCダッシュボードから「ピアリング接続」をクリックして、「ピアリング接続を作成」をクリックします。
以下のように入力して、「ピアリング接続の作成」をクリック。
- 名前:VPCピアリングにつける名前(任意)
- ピアリング接続するローカルVPCを選択:接続元のVPCを選択(ここではvpc-00に存在する「vpc-00」を選ぶ)
- アカウント:接続先VPCが「自分のアカウント」か「別のアカウント」か選択
- アカウントID:接続先VPCが所属するAWSアカウントの番号を入力
- リージョン:接続先VPCが所属するAWSリージョン
- VPC ID(アクセプタ):接続先VPCのIDを入力(VPCダッシュボードで確認できる)
「”接続先VPCのID”の所有者は、ピアリング接続を承諾する必要があります。」と表示されますので、接続先VPCのAWSアカウントにログインします。
接続先VPCのVPCダッシュボードから「ピアリング接続」の画面に移動すると、「承諾の保留中」のピアリング接続を確認することができます。選択して、「リクエストを承諾」をクリックします。
最終的な内容を確認して、「リクエストを承諾」をクリックします。
ピアリング接続のステータスが「アクティブ」になれば完了です。
vpc-00とvpc-01のピアリング接続が完了しました。vpc-00とvpc-02のピアリング接続も同じ手順で作成します。(手順割愛)
ルートテーブルの設定
vpc-00
新規でルートテーブルを作成しました。デフォルトの状態だとlocalターゲットのみのルーティングが存在します。ここに新規のルーティングを追加します。
vpc-01に存在するLinux1-1とLinux1-2と接続できるようにするためのルーティングを追加します。
vpc-02に存在するLinux2インスタンスと接続できるようにするためのルーティングを追加します。
※vpc-02はLinux2インスタンスのみと接続できればよいので、「172.16.2.100/32」とします。(172.16.2.100以外はvpc-01と通信する)
vpc-01
vpc-01からvpc-00へ戻るためのルーティングを設定します。
vpc-01が所属するAWSアカウント上でルートテーブルを作成し、10.0.0.0/24への通信はvpc-00とのピアリング接続IDに送信するように指定します。(ルートテーブルとサブネットの関連付けを忘れずに)
vpc-02
vpc-02が所属するAWSアカウントでも同じ作業を行い、10.0.0.0/24へ通信する場合はvpc-00とのピアリング接続IDに送信するように指定します。(ルートテーブルとサブネットの関連付けを忘れずに)
pingで接続確認
中央VPCのEC2(Linux0、10.0.2.10)から接続先(ピアリング先)VPCのEC2インスタンスにpingを送信して、応答が返ってくることを確認します。
まず、vpc-01のLinux1-1(172.16.2.50)にpingを送信します。Linux1-1ではtcpdumpコマンドを使用して、Linux0(10.0.2.10)からのicmp要求であることを確認します。
Linux0からLinux1-1へping送信。
応答は返ってきています。
Linux1-1でtcpdumpで確認します。
10.0.2.10からicmpの要求が来て、172.16.2.50から応答を返していることが確認できました。
次は、Linux1-2(172.16.2.150)にping送信します。
応答は返ってきています。
Linux1-2でtcpdumpで確認します。
10.0.2.10と172.16.2.150の間でicmpのやり取りができています。
最後に、vpc-02に存在する、Linux2(172.16.2.100)にping送信します。
こちらもping応答は返ってきています。
Linux2でtcpdumpの結果を確認します。
問題ありませんでした。
コメント