きっちり構成固めて作った環境で、いざVPNでEC2へアクセスした時、「あれっ接続できないぞ」となった時の絶望を感じたことはありますか?
しかもつながったり繋がらなかったり...
そんな状況、もしかしたら「非対称ルーティング」かもしれません。
(僕はプロジェクトに入って初めてこのワードを知りました!)
当時の構成
パブリックサブネット
・エンドポイント層
VPC Endpoint、Nat Gateway、VPN Endpoint配置用
※NatGatewayを介した通信はアウトバウンド経由でのアクセスを遮断
・トランジットゲートウェイ層
社内NWと接続するTransit GatewayアタッチメントのENI配置用
プライベートサブネット
・Firewall層
Firewallエンドポイント配置用
・アプリケーション層
動作基盤のEKS WorkerNode配置用
・データベース層
RDS配置用
・マネジメント層
踏み台EC2サーバ配置用
発生した事象
VPN Endpointから踏み台サーバへリモートデスクトップ接続した際に、接続できる時と接続できない事象が発生。
原因
NetworkFirewallの行き・戻りの通信が異なることで、非対称ルーティングが発生してしまっていた。
※NetworkFirewallが非対称ルーティングをサポートしていないという公式ドキュメントは↓に記載
下図に記載の通り、VPN経由でManagement層にあるEC2サーバへアクセスするためには、同じサブネットにあるFirewallEndpointを経由しなければならない。
解消法
エンドポイント層サブネットを、インターネット通信の発生有無で分割。
・Natゲートウェイ用サブネット(Nat層)
→インターネット経由するため、Firewallを必ず経由するように設計。
VPN Endpoint/VPC Endpoint用サブネット(Endpoint層)
→内部通信でFirewallエンドポイントを経由する必要がないため、Firewallを経由しないように設計。