<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>VPN Gateway on Brewed in the Cloud by Chris Hailes</title><link>https://blog.brewedinthecloud.com/tags/vpn-gateway/</link><description>Recent content in VPN Gateway on Brewed in the Cloud by Chris Hailes</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><lastBuildDate>Thu, 09 Jul 2026 00:00:00 +1000</lastBuildDate><atom:link href="https://blog.brewedinthecloud.com/tags/vpn-gateway/rss.xml" rel="self" type="application/rss+xml"/><item><title>When BGP Stops Being Boss: VNRA and Propagated Routes in Azure</title><link>https://blog.brewedinthecloud.com/p/vnra-and-propagated-routes-in-azure/</link><pubDate>Thu, 09 Jul 2026 00:00:00 +1000</pubDate><guid>https://blog.brewedinthecloud.com/p/vnra-and-propagated-routes-in-azure/</guid><description>&lt;p&gt;BGP has a habit of making engineers feel safe.&lt;/p&gt;
&lt;p&gt;If the gateway is up and the prefix is propagated, the instinct is to relax. Azure learned the route, the subnet can see it, and the packet should follow accordingly. In a standard hybrid mental model, that feels reasonable.&lt;/p&gt;
&lt;p&gt;VNRA is where that comfort starts to fall apart.&lt;/p&gt;
&lt;p&gt;This is the key point for this post:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;A propagated BGP route can remain visible in Azure without remaining authoritative for forwarding once VNRA governs the packet path.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;That is not just a troubleshooting nuance. It changes how you judge hybrid determinism, what evidence you trust during incidents, and whether a route table is telling you the thing you think it is.&lt;/p&gt;
&lt;h2 id="the-mental-model"&gt;The Mental Model
&lt;/h2&gt;&lt;p&gt;The common assumption is straightforward:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;If a subnet has a propagated route from a VPN Gateway or ExpressRoute gateway, that route is the authority for forwarding unless something more specific overrides it.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;That model works well enough until VNRA enters the picture. Then the mistake is not that Azure stops learning the route. The mistake is assuming that &lt;strong&gt;learning&lt;/strong&gt;, &lt;strong&gt;visibility&lt;/strong&gt;, and &lt;strong&gt;forwarding authority&lt;/strong&gt; are still the same thing.&lt;/p&gt;
&lt;p&gt;They are not.&lt;/p&gt;
&lt;p&gt;Once VNRA participates in the routing outcome, a propagated route may still be present while no longer being the deciding authority for how traffic is actually delivered.&lt;/p&gt;
&lt;p&gt;That is the mental shift:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;BGP propagation tells Azure a prefix is reachable&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;VNRA can change whether that propagated route remains authoritative for forwarding&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Effective routing evidence is no longer the same thing as forwarding truth&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you miss that distinction, hybrid routing starts to look deterministic on paper and conditional in production.&lt;/p&gt;
&lt;h2 id="how-it-really-works"&gt;How It Really Works
&lt;/h2&gt;&lt;p&gt;This series is deliberately data plane first, so the question here is not “did Azure learn the route?” but “what governs forwarding once both gateway propagation and VNRA are involved?”&lt;/p&gt;
&lt;h3 id="propagation-and-authority-are-not-the-same-thing"&gt;Propagation and authority are not the same thing
&lt;/h3&gt;&lt;p&gt;A route propagated from a gateway into a subnet tells you Azure has imported reachability information for that prefix. That is a control-plane fact.&lt;/p&gt;
&lt;p&gt;The mistake is treating that fact as conclusive proof that the propagated route still governs forwarding for that subnet.&lt;/p&gt;
&lt;p&gt;With VNRA in play, that is no longer a safe assumption.&lt;/p&gt;
&lt;p&gt;A visible route with &lt;code&gt;VirtualNetworkGateway&lt;/code&gt; as its source can still exist while VNRA is the stronger determinant of the realised path. Put bluntly:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Visibility of a propagated route does not guarantee authority over forwarding.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;That is the actual fault line in hybrid designs using VNRA.&lt;/p&gt;
&lt;h3 id="vnra-changes-route-authority-not-just-packet-inspection"&gt;VNRA changes route authority, not just packet inspection
&lt;/h3&gt;&lt;p&gt;It is tempting to talk about VNRA as though it merely influences where packets are observed or inspected. That framing is too weak.&lt;/p&gt;
&lt;p&gt;The important change is that VNRA can alter which route source remains authoritative in practice for a given path. Once that happens, the gateway-learned route is still part of the routing picture, but it is no longer the decisive actor engineers often assume it to be.&lt;/p&gt;
&lt;p&gt;That is why hybrid issues in VNRA-connected designs can look contradictory:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;the prefix is present&lt;/li&gt;
&lt;li&gt;the gateway is healthy&lt;/li&gt;
&lt;li&gt;the effective route table looks fine&lt;/li&gt;
&lt;li&gt;traffic behaviour still does not align with a gateway-authoritative path&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That is not necessarily a gateway problem. It is often a &lt;strong&gt;route authority problem&lt;/strong&gt;.&lt;/p&gt;
&lt;h3 id="the-practical-boundary-is-where-forwarding-stops-obeying-propagation"&gt;The practical boundary is where forwarding stops obeying propagation
&lt;/h3&gt;&lt;p&gt;A useful way to reason about this is to stop asking whether BGP propagation exists and start asking where it remains authoritative.&lt;/p&gt;
&lt;p&gt;Once VNRA governs the packet path for a subnet or transit flow, propagated routes may still be true in the sense that Azure has learned them, but they stop being authoritative in the way architects and operators usually care about: they no longer guarantee the forwarding outcome.&lt;/p&gt;
&lt;p&gt;That is the decision boundary that matters.&lt;/p&gt;
&lt;p&gt;If VNRA governs the path, the propagated route becomes evidence of learned reachability, not proof that the gateway still governs forwarding behaviour.&lt;/p&gt;
&lt;h2 id="a-concrete-hybrid-scenario"&gt;A Concrete Hybrid Scenario
&lt;/h2&gt;&lt;p&gt;Consider a spoke workload subnet in a hybrid environment.&lt;/p&gt;
&lt;p&gt;The subnet receives propagated on-premises prefixes from a hub-connected ExpressRoute or VPN gateway. A VM in that subnet shows the expected private prefixes in its effective routes, sourced from &lt;code&gt;VirtualNetworkGateway&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;An engineer checks the route table and concludes the hybrid path is behaving as designed.&lt;/p&gt;
&lt;p&gt;That conclusion may be wrong.&lt;/p&gt;
&lt;p&gt;If VNRA governs forwarding for that subnet’s traffic, then the visible gateway-propagated route is no longer enough to prove that the gateway remains the authority over delivery. The route is present, but the packet path is now being decided elsewhere.&lt;/p&gt;
&lt;p&gt;That is the trap.&lt;/p&gt;
&lt;div class="mermaid"&gt;flowchart LR
A[Spoke workload subnet]
B[Effective route shows on-prem prefix&lt;br/&gt;Source: VirtualNetworkGateway]
C[VNRA governs forwarding path]
D[Observed traffic does not behave as though gateway propagation is authoritative]
E[Operator assumes gateway path is still decisive]
A --&gt; B
B --&gt; E
A --&gt; C
C --&gt; D
&lt;/div&gt;
&lt;p&gt;The point of this flow is simple: &lt;strong&gt;route visibility and forwarding authority can diverge once VNRA is in the path&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id="real-world-impact"&gt;Real-World Impact
&lt;/h2&gt;&lt;p&gt;This is where the article either matters or it does not.&lt;/p&gt;
&lt;h3 id="hybrid-determinism-is-weaker-than-the-route-table-suggests"&gt;Hybrid determinism is weaker than the route table suggests
&lt;/h3&gt;&lt;p&gt;A lot of Azure hybrid designs quietly assume that propagated gateway routes provide stable authority across workload subnets. VNRA weakens that assumption.&lt;/p&gt;
&lt;p&gt;If the design depends on “the subnet can see the propagated route, therefore that route governs forwarding”, the design is less deterministic than it looks.&lt;/p&gt;
&lt;p&gt;How would this change something you design, deploy, or operate?&lt;/p&gt;
&lt;p&gt;It means you should stop treating propagated BGP visibility as proof of packet path in VNRA-connected hybrid environments. For design reviews, that changes what evidence is acceptable. For operations, it changes what counts as validation.&lt;/p&gt;
&lt;h3 id="effective-routes-become-evidence-not-authority"&gt;Effective routes become evidence, not authority
&lt;/h3&gt;&lt;p&gt;This is the stronger operational opinion the article needs to make explicit:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;In VNRA-affected hybrid paths, effective routes are useful evidence of learned reachability, but they are no longer authoritative proof of forwarding behaviour.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;That is not because effective routes are wrong. It is because they answer a narrower question than many engineers use them for.&lt;/p&gt;
&lt;p&gt;They can tell you Azure learned the prefix.&lt;/p&gt;
&lt;p&gt;They cannot, on their own, prove that the gateway-learned route still governs the realised path once VNRA has altered route authority for forwarding.&lt;/p&gt;
&lt;h3 id="incident-triage-needs-a-different-first-question"&gt;Incident triage needs a different first question
&lt;/h3&gt;&lt;p&gt;Without VNRA, it is reasonable to begin with:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;did the gateway lose the route?&lt;/li&gt;
&lt;li&gt;did BGP stop propagating the prefix?&lt;/li&gt;
&lt;li&gt;is the effective route missing?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;With VNRA in the picture, the earlier question is often:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Does the propagated route still have forwarding authority for this subnet, or is VNRA now the governing path decision?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;That is a materially better triage question because it separates control-plane health from forwarding truth.&lt;/p&gt;
&lt;h3 id="subnet-level-behaviour-matters-more-than-vnet-level-assumptions"&gt;Subnet-level behaviour matters more than VNet-level assumptions
&lt;/h3&gt;&lt;p&gt;One of the quieter risks here is over-generalising from a broad topology statement like “the VNet has the propagated route”.&lt;/p&gt;
&lt;p&gt;That is too coarse.&lt;/p&gt;
&lt;p&gt;In VNRA-influenced environments, the question is whether a particular subnet and path still behave as though the gateway-propagated route is authoritative. If not, route visibility at a wider scope is operationally misleading.&lt;/p&gt;
&lt;h2 id="implementation-example"&gt;Implementation Example
&lt;/h2&gt;&lt;p&gt;This series excludes deployment guidance, but an operational article still needs a concrete artefact.&lt;/p&gt;
&lt;p&gt;A common starting point is to inspect effective routes on a workload NIC.&lt;/p&gt;
&lt;h3 id="azure-cli-inspect-effective-routes"&gt;Azure CLI: inspect effective routes
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;az network nic show-effective-route-table &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="se"&gt;&lt;/span&gt; --resource-group rg-spoke-prod &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="se"&gt;&lt;/span&gt; --name nic-app-01 &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="se"&gt;&lt;/span&gt; --output table
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Example output:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Source State Address Prefix Next Hop Type
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;--------------------- ------- ------------------ ---------------------
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Default Active 10.20.0.0/16 VnetLocal
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;VirtualNetworkGateway Active 172.16.0.0/12 VirtualNetworkGateway
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;VirtualNetworkGateway Active 192.168.100.0/24 VirtualNetworkGateway
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Default Active 0.0.0.0/0 Internet
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;The operational mistake is to stop here and conclude:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;“The on-prem route is present, so the gateway still governs forwarding.”&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;That conclusion is not justified in a VNRA scenario.&lt;/p&gt;
&lt;p&gt;A better interpretation is:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Azure has learned the route&lt;/li&gt;
&lt;li&gt;the subnet can see the propagated prefix&lt;/li&gt;
&lt;li&gt;you still have not proved that the propagated route remains authoritative for forwarding&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That distinction changes your next action. You move from route inspection to path validation.&lt;/p&gt;
&lt;p&gt;In practice, that means validating observed behaviour with whichever telemetry is available in your environment, such as:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;flow observations on the forwarding path&lt;/li&gt;
&lt;li&gt;packet capture on test workloads&lt;/li&gt;
&lt;li&gt;appliance-side session or forwarding logs&lt;/li&gt;
&lt;li&gt;bidirectional connectivity tests between Azure and on-premises endpoints&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The exact tool is less important than the principle: &lt;strong&gt;if forwarding behaviour and effective routes disagree, trust the forwarding outcome&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id="gotchas--edge-cases"&gt;Gotchas &amp;amp; Edge Cases
&lt;/h2&gt;&lt;h3 id="a-healthy-gateway-does-not-prove-authoritative-forwarding"&gt;A healthy gateway does not prove authoritative forwarding
&lt;/h3&gt;&lt;p&gt;Engineers often stop investigating once they confirm the gateway is up and prefixes are propagated. In a VNRA design, that only proves the control plane still knows the route. It does not prove the gateway remains the decisive authority for delivery.&lt;/p&gt;
&lt;h3 id="route-visibility-can-create-false-certainty"&gt;Route visibility can create false certainty
&lt;/h3&gt;&lt;p&gt;The more “correct” the effective route table looks, the easier it is to over-trust it. That is exactly why this class of issue survives design reviews and slows incident response.&lt;/p&gt;
&lt;h3 id="hybrid-asymmetry-becomes-easier-to-misunderstand"&gt;Hybrid asymmetry becomes easier to misunderstand
&lt;/h3&gt;&lt;p&gt;If teams assume a visible propagated route still governs both directions of traffic, they can misread asymmetric behaviour as a gateway fault or application issue when the underlying problem is that forwarding authority has shifted.&lt;/p&gt;
&lt;h3 id="prefix-learning-and-forwarding-authority-can-diverge-cleanly"&gt;Prefix learning and forwarding authority can diverge cleanly
&lt;/h3&gt;&lt;p&gt;This is worth stating plainly: a propagated route does not need to disappear for its practical authority to be reduced. Azure can still learn the prefix while VNRA governs the realised packet path.&lt;/p&gt;
&lt;h2 id="best-practices"&gt;Best Practices
&lt;/h2&gt;&lt;h3 id="treat-propagated-routes-as-learned-reachability-not-guaranteed-authority"&gt;Treat propagated routes as learned reachability, not guaranteed authority
&lt;/h3&gt;&lt;p&gt;In VNRA-connected hybrid designs, a propagated route should be treated as evidence that Azure knows the prefix exists, not proof that the gateway still governs packet forwarding for that path.&lt;/p&gt;
&lt;h3 id="validate-routing-at-the-subnet-path-level"&gt;Validate routing at the subnet-path level
&lt;/h3&gt;&lt;p&gt;Do not validate “hybrid routing” as a broad topology property. Validate whether a given subnet’s traffic to a given prefix still behaves according to the route authority you expect.&lt;/p&gt;
&lt;h3 id="update-your-runbooks-to-separate-control-plane-and-forwarding-checks"&gt;Update your runbooks to separate control-plane and forwarding checks
&lt;/h3&gt;&lt;p&gt;Runbooks should explicitly distinguish between:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;route learned&lt;/li&gt;
&lt;li&gt;route visible&lt;/li&gt;
&lt;li&gt;route authoritative for forwarding&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Those are no longer interchangeable conditions.&lt;/p&gt;
&lt;h3 id="use-effective-routes-as-a-clue-not-a-verdict"&gt;Use effective routes as a clue, not a verdict
&lt;/h3&gt;&lt;p&gt;Effective routes are still useful. They are just not the final word in VNRA scenarios.&lt;/p&gt;
&lt;div class="insight"&gt;
&lt;div class="insight-icon"&gt;🍺&lt;/div&gt;
&lt;div class="insight-content"&gt;
&lt;strong&gt;Brewed Insight:&lt;/strong&gt; A visible VirtualNetworkGateway route can tell you Azure learned the prefix. It cannot, by itself, tell you the gateway still governs delivery once VNRA is shaping the path. In hybrid Azure, that is the difference between a route table that looks right and a system that actually behaves right.
&lt;/div&gt;
&lt;/div&gt;
&lt;style&gt;
.insight {
display: flex;
align-items: center;
background-color: #0089e41c;
border-left: 10px solid #D69A2D;
padding: 10px;
margin: 20px 0;
border-radius: 4px;
}
.insight-icon {
font-size: 24px;
margin-right: 10px;
}
.insight-content {
flex: 1;
}
&lt;/style&gt;&lt;h2 id="learn-more"&gt;Learn More
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://learn.microsoft.com/en-us/azure/virtual-network/virtual-network-routing-appliance-overview" target="_blank" rel="noopener"
&gt;Overview of Azure Virtual Network routing appliances&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://learn.microsoft.com/azure/virtual-network/virtual-networks-udr-overview" target="_blank" rel="noopener"
&gt;Azure virtual network traffic routing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://learn.microsoft.com/azure/network-watcher/diagnose-vm-network-routing-problem" target="_blank" rel="noopener"
&gt;Diagnose a virtual machine routing problem&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://learn.microsoft.com/azure/expressroute/expressroute-routing" target="_blank" rel="noopener"
&gt;ExpressRoute routing requirements&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://learn.microsoft.com/azure/vpn-gateway/vpn-gateway-bgp-overview" target="_blank" rel="noopener"
&gt;About BGP with Azure VPN Gateway&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item></channel></rss>