概要
AWSの同一Direct Connect Gateway(以下DXGW)に接続したVPC間で通信が可能になっていました。以下、結論です。
- ドキュメントを読むと「単一の Direct Connect ゲートウェイにアタッチされた仮想インターフェイス間の直接的な通信」はサポートされていない、となっている
- 仮想プライベートゲートウェイの関連付け -- https://docs.aws.amazon.com/ja_jp/directconnect/latest/UserGuide/virtualgateways.html
- 実は、「スーパーネットが、同じ Direct Connect ゲートウェイおよび同じ仮想インターフェイス上に関連付けられている接続された仮想プライベートゲートウェイ(VGW)を持つ 2 つ以上の VPC にわたってアドバタイズされる場合です。この場合、VPC は Direct Connect エンドポイントを介して互いに通信できます。」という仕様により通信できてしまうようだ
- Direct Connect ゲートウェイ -- https://docs.aws.amazon.com/ja_jp/directconnect/latest/UserGuide/direct-connect-gateways-intro.html
Direct Connectのルーティングの仕様はこのように分散して記述されていたため、ちょっとわかりにくかったです。一方、Transit Gatewayを使ったときに疎通する、という仕様については以下の記事があり、これにより「ひょっとして?」と気づくことができました(感謝!)。
- Direct Connect Gateway で通信が折り返され VPC 間で疎通が可能となる仕様について -- https://blog.serverworks.co.jp/dxgw-turnback-with-tgw
構成と対応
弊組織ではDirect ConnectでAWSと接続しており、DXGWへはBGPでアドバタイズしています。図に示したように、オンプレミスは172.18.4.0/23、172.18.6.0/23というようにいくつかの172.18.xxx.xxxネットワークがあり、それに追加する形でAWSのネットワーク構成も172.18.yyy.yyyとしています。
境界ルーターでルーティングテーブルを設定する際に、オンプレミス側への経路をまとめて172.18.0.0/16と記述していたため、この事象が起こったようです。
この場合、VPC1とVPC2の172.18.16.0/24と172.18.32.0/24が172.18.0.0/16に含まれてしまうため、DXGWによりVPC1とVPC2は疎通するみたいです。最初は境界ルーターで折り返し通信が発生してるのかな?と思ったのですが、pingでTTL=1でも疎通するので、DXGWと判断しました(境界ルーターでパケットフィルタリングしても通ってたというのもあります)。
そこで、最小限の経路にし、広告したところ、VPC間の疎通はブロックされました。今回は想定外で疎通しましたが、逆にVPC1とVPC2を含む経路を広告することで疎通させるという使い方もできるのかもしれません。
ネットワークの専門家ではないので、やり方的にどうするのが正解かはよくわかりませんが、参考になれば。