Azure Virtual WAN Routing Intent + VNetLocalRouteOverrideCriteria Clarification

이재옥 145 Reputation points
2026-06-10T06:13:06.3533333+00:00

Hello, All

I am currently evaluating a Secured Virtual Hub deployment with Azure Firewall and Routing Intent in an Azure Virtual WAN environment.

I would like to confirm my understanding of the VNetLocalRouteOverrideCriteria setting (displayed in the Azure Portal as "Bypass next hop IP for workloads within this VNet") and how it affects intra-VNet traffic.

Environment

Spoke VNet:


Virtual WAN configuration:



My understanding

Scenario 1: VNetLocalRouteOverrideCriteria = Yes (Bypass enabled)

My understanding is that the VNet local route is preserved:


As a result, traffic between:


remains within the Azure virtual network fabric and does not traverse the Virtual Hub or Azure Firewall.

In other words, although Routing Intent injects routes for RFC1918 traffic toward the firewall, same-VNet traffic still follows the local VNet route and is not hairpinned through the hub.


Scenario 2: VNetLocalRouteOverrideCriteria = No (Bypass disabled)

From the documentation, my understanding is that this setting allows local VNet routes to be overridden.

I do not interpret this as Azure ignoring Longest Prefix Match (LPM). Instead, I understand it as allowing the Virtual WAN propagated route to replace or override the VNet local route for the VNet address space.

As a result, traffic between:


could be forwarded as:


thereby enabling inspection of intra-VNet traffic.


Questions

Could someone please confirm whether the following understanding is correct?

1. When VNetLocalRouteOverrideCriteria = Yes

Same-VNet traffic always uses the local VNet route.

Routing Intent alone cannot force intra-VNet traffic through Azure Firewall.

To inspect same-VNet traffic, additional routing mechanisms (such as UDRs or other designs) would be required.

2. When VNetLocalRouteOverrideCriteria = No

Azure still follows normal Longest Prefix Match behavior.

The setting allows the local VNet route to be overridden by Virtual WAN routing.

As a result, same-VNet traffic can be sent through Azure Firewall for inspection.

In particular, I would like confirmation that "Bypass = No" effectively allows intra-VNet traffic to be hairpinned through the Secured Virtual Hub/Azure Firewall, rather than Azure simply selecting a less-specific route.

Am I interpreting the behavior correctly?

Thank you in advance for any clarification.

Azure Virtual WAN Routing Intent + VNetLocalRouteOverrideCriteria Clarification

Hello,

I am currently evaluating a Secured Virtual Hub deployment with Azure Firewall and Routing Intent in an Azure Virtual WAN environment.

I would like to confirm my understanding of the VNetLocalRouteOverrideCriteria setting (displayed in the Azure Portal as "Bypass next hop IP for workloads within this VNet") and how it affects intra-VNet traffic.

Environment

Spoke VNet:


Virtual WAN configuration:



My understanding

Scenario 1: VNetLocalRouteOverrideCriteria = Yes (Bypass enabled)

My understanding is that the VNet local route is preserved:


As a result, traffic between:


remains within the Azure virtual network fabric and does not traverse the Virtual Hub or Azure Firewall.

In other words, although Routing Intent injects routes for RFC1918 traffic toward the firewall, same-VNet traffic still follows the local VNet route and is not hairpinned through the hub.


Scenario 2: VNetLocalRouteOverrideCriteria = No (Bypass disabled)

From the documentation, my understanding is that this setting allows local VNet routes to be overridden.

I do not interpret this as Azure ignoring Longest Prefix Match (LPM). Instead, I understand it as allowing the Virtual WAN propagated route to replace or override the VNet local route for the VNet address space.

As a result, traffic between:


could be forwarded as:


thereby enabling inspection of intra-VNet traffic.


Questions

Could someone please confirm whether the following understanding is correct?

1. When VNetLocalRouteOverrideCriteria = Yes

Same-VNet traffic always uses the local VNet route.

Routing Intent alone cannot force intra-VNet traffic through Azure Firewall.

To inspect same-VNet traffic, additional routing mechanisms (such as UDRs or other designs) would be required.

2. When VNetLocalRouteOverrideCriteria = No

Azure still follows normal Longest Prefix Match behavior.

The setting allows the local VNet route to be overridden by Virtual WAN routing.

As a result, same-VNet traffic can be sent through Azure Firewall for inspection.

In particular, I would like confirmation that "Bypass = No" effectively allows intra-VNet traffic to be hairpinned through the Secured Virtual Hub/Azure Firewall, rather than Azure simply selecting a less-specific route.

Am I interpreting the behavior correctly?

Thank you in advance for any clarification.

Azure Virtual WAN
Azure Virtual WAN

An Azure virtual networking service that provides optimized and automated branch-to-branch connectivity.


Answer accepted by question author

AI answer

2026-06-10T06:13:32.8766667+00:00

The interpretation is only partially correct. The key points from the documentation are:

  1. VNetLocalRouteOverrideCriteria is only relevant when all of the following are true:
    • A static route is configured on the Virtual WAN Virtual Network connection.
    • The spoke VNet address space is a subnet of that static route prefix.
    • The decision is about whether traffic to IPs inside that spoke VNet prefix should follow the static route’s next hop or bypass it.
  2. What the setting actually does (no routing intent yet):
    • Disabled (vnetLocalRouteOverrideCriteria = "contains", portal: Bypass = No):
      • All traffic that matches the static route’s prefix is sent to the static route’s next hop, including traffic to IPs inside the spoke VNet itself.
      • This is what causes the “hairpin” behavior to an NVA/load balancer in the examples.
    • Enabled (vnetLocalRouteOverrideCriteria = "equals", portal: Bypass = Yes):
      • Traffic to IPs inside the spoke VNet prefix bypasses the static route and goes directly to the target VM.
      • Traffic to other prefixes that are still within the static route’s range (for example, indirect spokes) continues to use the static route next hop.
    This behavior is illustrated in the “Bypass Next Hop IP for workloads within this VNet” section and diagrams.
  3. Interaction with routing intent and “Propagate static route” The context explicitly states two important overrides:
    • When routing intent is applied and Propagate static route is enabled on the VNet connection, the bypass setting is ignored:
      • “For deployments where static routes are specified on a virtual network connection with Propagate static route enabled, the bypass next hop IP behavior is ignored when routing intent is applied.”
      • In this case, the effective behavior is treated as bypass/equals for traffic to the spoke VNet itself.
    • When a 0.0.0.0/0 static route is configured on the VNet connection, the bypass setting is also ignored and treated as bypass/equals:
      • “When a 0.0.0.0/0 route is configured as a static route on a Virtual Network connection, the bypass next hop setting that is configured on the Virtual Network connection is ignored and considered to be set to bypass/equals.”
    In both cases, traffic destined for IPs inside the spoke VNet is inspected by the security appliance in the hub and then routed directly to the destination IP in the spoke, bypassing the next hop IP configured in the static route.
  4. Implications for the two scenarios in the question

    1. When VNetLocalRouteOverrideCriteria = Yes (Bypass enabled)

    From the base feature description (without routing intent overrides):
    • Traffic to IPs inside the spoke VNet prefix bypasses the static route next hop and goes directly to the VM.
    • Traffic to other prefixes within the static route range still uses the static route next hop.
    However, with routing intent + Propagate static route enabled, the documentation states that the bypass behavior is ignored and treated as bypass/equals for traffic to the spoke VNet. That means:
    • Same-VNet traffic is not hairpinned to the static route’s next hop, but
    • It is inspected by the security appliance in the hub and then routed directly to the destination IP in the spoke, when the conditions described in the routing-intent docs are met.
    Therefore, the statement “Routing Intent alone cannot force intra-VNet traffic through Azure Firewall when Bypass = Yes” is not supported by the provided documentation. With routing intent and the described static-route/propagation conditions, traffic to the spoke VNet is inspected in the hub and then sent directly to the spoke destination, independent of the bypass flag.

    2. When VNetLocalRouteOverrideCriteria = No (Bypass disabled)

    In the pure static-route scenario (no routing intent override):
    • Azure still uses longest prefix match.
    • Because the static route’s prefix contains the spoke VNet prefix, and vnetLocalRouteOverrideCriteria = "contains", traffic to IPs inside the spoke VNet is sent to the static route’s next hop (for example, an NVA or load balancer), enabling “hairpin” inspection.
    But when routing intent + Propagate static route are in play:
    • The documentation states that the bypass setting is ignored and treated as bypass/equals for traffic to the spoke VNet.
    • That means the behavior is effectively the same as the “bypass enabled” case for traffic to the spoke VNet: traffic is inspected by the security appliance in the hub and then routed directly to the destination IP in the spoke, bypassing the static route’s next hop IP.
    So the statement “Bypass = No effectively allows intra-VNet traffic to be hairpinned through the Secured Virtual Hub/Azure Firewall” is not correct in the routing-intent scenario described in the docs. With routing intent and Propagate static route enabled, the platform forces a behavior equivalent to bypass/equals for traffic to the spoke VNet, regardless of the configured bypass flag.
  5. Summary aligned with the documentation
    • Without routing intent overrides:
      • Bypass = No (contains): static route next hop is used even for traffic to IPs inside the spoke VNet; this can create hairpin paths via an NVA/LB.
      • Bypass = Yes (equals): traffic to IPs inside the spoke VNet bypasses the static route next hop and goes directly to the VM; only traffic outside the spoke prefix (but within the static route range) uses the static route next hop.
    • With routing intent + Propagate static route enabled, or with a 0.0.0.0/0 static route:
      • The bypass setting on the VNet connection is ignored and treated as bypass/equals.
      • Traffic destined for IPs inside the spoke VNet is inspected by the security appliance in the hub and then routed directly to the destination IP in the spoke, bypassing the static route’s next hop IP.
      • This behavior follows the “traffic behavior with Bypass Next Hop IP enabled” example referenced in the docs.

References:

AI-generated content may be incorrect. Read our transparency notes for more information.

Was this answer helpful?

1 person found this answer helpful.

0 additional answers

Sort by: Newest

Your answer

Answers can be marked as 'Accepted' by the question author and 'Recommended' by moderators, which helps users know the answer solved the author's problem.