AWS Network Firewallの非対称ルーティング回避事例のご紹介

## 1.概要
みなさんこんにちは。オンプレからAWSへ移行しAWSを活用されていますか？
ところでオンプレミスでは一般的なサーバの可用性向上の方式として、クラスタリングソフトを使って2台のサーバをアクティブ・スタンバイによる冗長構成にする方式があります。

AWSのEC2でも同様の方式で構成が可能ですが、オンプレミスとAWSとではいくつか違う部分があります。例えば、AWSではAvailability Zone(以下AZ)をまたがって共通ディスクを利用することが出来ません。そのため、オンプレからAWSへ移行する場合には、同一方式を採用する場合に実現方式の再検討と再設計が必要です。

この記事では、AWS上でクラスタリングソフトを使ってEC2の冗長構成を組み、さらにDirect Connect（以下DX）、Network Firewall（以下NWFW）と組み合わせた場合に、非対称ルーティング（後述）が発生し通信出来ない構成例と、それの回避例を解説します。


## 2.まとめ
はじめに結論を書きます。
この不良（通信が出来ないケース）は、次の条件を全て満たした場合に発生する可能性があります。ルートテーブルの設計を注意することで不良（NWFWの非対称ルーティング）を回避することが可能です。

**不良の発生条件**
1.DXとTGWを経由してVPCと接続する
2.同一VPC内でNWFWと宛先のEC2を配置する
3.仮想IPアドレス*を使ってEC2を冗長化する
　（ルートテーブルにて仮想IPアドレスの宛先ENIを制御する）

:::note info
*仮想IPアドレスは、VPCに割り当てたCIDR範囲外のIPアドレスを使って、VPC内で冗長構成を組んだEC2インスタンスの現用系と通信するために利用します。現用系インスタンスに障害が発生した場合、待機系インスタンスに仮想IPアドレスのルーティング宛先を切り替えることで業務の早期復旧を実現する手法のひとつです。
:::

**不良が発生する要因**
1.DXからの通信時はどのAZへルーティングされるかは不定。
2.同一VPC内の各AZにNWFWと宛先のEC2を配置した場合、NWFWの非対称ルーティングが可能になる。
3.仮想IPアドレスを使ってEC2を冗長化した場合は、ルートテーブルにて仮想IPアドレスの宛先ENIを制御する。そして、各AZの各サブネットに紐付けするルートテーブルのルーティング設定を誤った場合、非対称ルーティングが発生します。

## 3.非対称ルーティングとは

非対称ルーティングとは、通信相手との通信経路が行きと帰りで異なることを呼びます。対障害性を考えると通信経路が異なっても通信ができることの方が良いことも多いです。

しかし、セキュリティの観点としては非対称ルーティングは不正通信の可能性があるため排除するべきです。そのため、一般的なFirewall製品では非対称ルーティングは通信を拒否します。

NWFWにおいても同様です。非対称ルーティング通信を拒否します。
ただし、NWFWの[展開モデル](https://aws.amazon.com/jp/blogs/news/networking-and-content-delivery-deployment-models-for-aws-network-firewall/)を参照し、集約型の構成をすれば、非対称ルーティングは回避可能です。

## 4.非対称ルーティングが発生する構成例

TGWを経由したVPC間の通信は、TGWの[アプライアンスモード](https://docs.aws.amazon.com/ja_jp/vpc/latest/tgw/transit-gateway-appliance-scenario.html)を有効にすることで、同じAZがVPC間で維持出来るため非対称ルーティングは回避できます。

今回はDXとTGWを経由したVPC通信のため、非対称ルーティングが発生します。

**対称ルーティングの例：**
![対称ルーティング.png](https://docs.aws.amazon.com/ja_jp/vpc/latest/tgw/images/transit-gateway-appliance.png)

**非対称ルーティングの例：**
![非対称ルーティング.png](https://docs.aws.amazon.com/ja_jp/vpc/latest/tgw/images/transit-gateway-appliance-dropped-traffic.png)


## 5.当初の構成図
![当初の構成図.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1733841/046114e8-a90e-234c-7bee-a0658a84a4dd.png)

## 6.当初想定していた通信経路
![通信経路1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1733841/7572e9ad-c12c-6faa-b2f6-37b3cbc76aef.png)
オンプレミスから仮想IPアドレスを使って、現用系インスタンスと通信をする。

## 7.発生する可能性のある通信経路
![通信経路2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1733841/faa75826-0822-cb3e-9121-ecbbf49bc7cb.png)
AWSサポートへ問い合わせの結果、TGWでアプライアンスモードを設定を有効にしていてもDXから通信時は、どちらのAvailability Zone(AZ) に通信するかは定まっていないことが判明。
つまり、現用系インスタンスへ通信する際、AZ Aにいく場合もあれば、AZ Cへ行く場合もある。

## 8.対称ルーティングとなる例
![通信経路3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1733841/e52803b6-3a01-f536-bbc8-714e4e6e9636.png)
図のように、行きと戻りの通信がNWFW EndpointA2を経由する場合は、正常に通信が可能。

## 9.非対称ルーティングとなる例
![通信経路4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1733841/fbac8037-0248-d006-913c-442d95e2ad2e.png)
図のように、行きの通信がNWFW EndpointC2を経由し、現用系インスタンスからの帰りの通信がNWFW EndpointA2に行く場合、非対称ルーティングとなりNWFW側にて通信が拒否される。

## 10.非対称ルーティングを回避する設定例（通常時）
![通信経路5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1733841/10f6bbfd-bb94-427d-2729-41bcb5e08d83.png)
図のように、Private SubnetA1とC1の両方のサブネットのRoute Tableに対して、NWFW EndpointA2へルーティングするように設定する。
この設定により、行きと戻りの通信がNWFW EndpointA2を経由するようになり非対称ルーティングが回避できる。

## 11.非対称ルーティングを回避する設定例（障害時）
![通信経路6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1733841/fb2d38ed-56f0-04f8-9264-738003a440a2.png)
現用系インスタンスの障害時には、Private SubnetA1とC1の両方のサブネットのRoute Tableに対して、NWFW EndpointC2へルーティングするように設定する。
この設定により、行きと戻りの通信がNWFW EndpointC2を経由するようになり非対称ルーティングが回避できる。

## 12.おわりに
以上が、DX経由でNWFW利用時に非対称ルーティングを回避した方法の説明です。

仮想IPアドレスを使ってEC2の可用性をあげる場合、ルートテーブルに仮想IPアドレスを定義し、現用系EC2のENIを切り替えします。今回の構成では、現用系EC2が動作しているAZを考慮し利用するNWFW Endpointを切り替える必要がありました。（補足となりますが、クラスタリングソフトではNWFW Endpointの切替をサポートしていなかったため、障害時にクラスタリングソフトと連動し、NWFW Endpointを切替えるスクリプトを作成しました）

今回のような構成をとる場合にはご注意ください。出来る限りNWFWの[展開モデル](https://aws.amazon.com/jp/blogs/news/networking-and-content-delivery-deployment-models-for-aws-network-firewall/)を参照し、集約型を採用することを推奨します。そうすれば今回のようなNWFW非対称ルーティングやNWFW Endpointの切替えは発生しません。

最後まで読んでいただきありがとうございました。誰かの参考になれば幸いです。

---

**他社商品，商標等の引用に関する表示**
- Amazon Web Servicesおよび資料で使用されるその他のAWS 商標は、米国およびまたはその他の諸国における、Amazon.com, Inc.またはその関連会社の商標です
- その他記載の会社名、製品名などは、それぞれの会社の登録商標または商標です