0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Azure Firewall】VNet Peering構成で通信が不安定?不要なUDRが引き起こす非対称ルーティングの罠

0
Posted at

【Azure Firewall】VNet Peering構成で通信が不安定?不要なUDRが引き起こす非対称ルーティングの罠

Azure Firewall(AFW)を Hub VNet に配置し、Spoke VNet(WebサーバーやデータベースなどのVM)へ VNet Peering 経由でトラフィックを通す構成は非常に一般的です。

しかし、構成変更や環境構築の際、「通信が成功したり失敗したりする」「接続が約50%の確率でタイムアウトする」 といった原因不明のトラブルに直面することはありませんか?

この記事では、AFW の SNAT(送信元 IP 変換)挙動と Spoke VM 側の UDR(ユーザー定義ルート)の設定によって発生する非対称ルーティング(Asymmetric Routing)のメカニズムと、その正しい解決策を分かりやすく解説します。


発生する現象

  • Spoke VM へのアクセス時、接続が不安定になる(成功したり失敗したりを繰り返す)。
  • AzFWは複数インスタンス構成(例:2インスタンス)の場合、およそ 50% の確率で通信がドロップする。

原因:SNAT環境下での「不要な折り返し UDR」

この問題の根本原因は、Spoke サブネット側に 戻り通信で「宛て(例: 送信元CLientのSubnet10.10.10.0/24)の Next Hop を AFW Frontend IP (ILB) に指定した UDR」 が明示的に追加されていることにあります。

1. 本来の正常な通信フロー(UDR なし)

AFW で Application Rule を適用する(または Network Rule で全 SNAT を有効化している)場合、パケットの送信元 IP(Src IP)は 「実際に処理を行った個別の AFW インスタンス A の IP」 に SNAT されます。

【行き】 Client → AFW Frontend IP (ILB) → AFW インスタンス A (SNAT実行) → Peering → Spoke VM
【戻り】 Spoke VM → Peering (システムルート) → AFW インスタンス A → Client

Spoke VM から見ると、パケットは 「AFW インスタンス A の固有 IP」 から届きます。そのため戻り通信は、Azure の標準機能である VNet Peering のシステムルートに従ってダイレクトに AFW インスタンス A へ返却されます。同じインスタンスに到達するためセッションテーブルと合致し、通信は正常に成立します。


2. トラブルが発生する通信フロー(不要な UDR あり)

ここで Spoke サブネットに AFW サブネット宛ての UDR を設定してしまうと、戻りパケットが強制的に内部ロードバランサー(ILB)へ引き戻されます。

【行き】 Client → AFW Frontend IP (ILB) → AFW インスタンス A (SNAT実行) → Peering → Spoke VM
【戻り】 Spoke VM → UDR により  AFW Frontend IP (ILB) → (ILB が インスタンス B へ振り分け) → 通信ドロップ!

  • 戻りパケットが AzFWのILB へ強制送出される。
  • ILB はロードバランシングハッシュにより、パケットを別個のインスタンス B へ割り振る可能性がある。
  • インスタンス B は「行き」のセッション情報を持っていないため、ステートフル機能によって非対称パケットと判定され、通信を拒否(Deny / Drop) する。

AzFWインスタンスが 2 台の場合、統計上は約 50% の確率で「行きと同一のインスタンス A」に偶然戻って成功するため、「たまに成功する不安定な障害」として表面化します。


ルーティングの優先度(最長一致の原則)

「デフォルトルート(0.0.0.0/0)が存在するから影響するのでは?」と疑問に思うかもしれません。
しかし、Azure のルーティングは最長一致(Longest Prefix Match)で判定されるため、プレフィックス長の異なるルールでは動作が異なります。

  • 0.0.0.0/0(UDR / プレフィックス /0):
    プレフィックスが最も長いため優先度は最低です。個別の AFW インスタンス宛て(/24 等)の通信には影響せず、Peering のシステムルート(/24)が優先されます。
  • 10.10.10.0/24(UDR / プレフィックス /24):
    Peering のシステムルートとプレフィックス長(/24)が同じになるため、UDR(ユーザー定義ルート)がシステムルートを上書き(オーバーライド) してしまいます。

結論と設計のベストプラクティス

  1. SNAT が有効な構成では 戻り通信をAFW へ向ける UDR は不要
    Application Rule や全 SNAT 設定を使用している場合、Spoke サブネットに AFW に向けた折り返し UDR を設定してはいけません。

不要な UDR を削除し、VNet Peering のデフォルトシステムルートに任せることで、戻り通信は常に正しい AFW インスタンスへ戻り、非対称ルーティング問題を根本解決できます。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?