<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Effective Routes on Brewed in the Cloud by Chris Hailes</title><link>https://blog.brewedinthecloud.com/tags/effective-routes/</link><description>Recent content in Effective Routes on Brewed in the Cloud by Chris Hailes</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><lastBuildDate>Tue, 30 Jun 2026 00:00:00 +1000</lastBuildDate><atom:link href="https://blog.brewedinthecloud.com/tags/effective-routes/rss.xml" rel="self" type="application/rss+xml"/><item><title>Azure Virtual Network Routing Appliance: When Packet Truth Moves Away from the Edge</title><link>https://blog.brewedinthecloud.com/p/vnra-packet-truth-moves-away-from-the-edge/</link><pubDate>Tue, 30 Jun 2026 00:00:00 +1000</pubDate><guid>https://blog.brewedinthecloud.com/p/vnra-packet-truth-moves-away-from-the-edge/</guid><description>&lt;p&gt;In plain Azure networking, plenty of engineers get away with a simple habit: check the effective routes on the NIC, sanity-check the subnet, and infer the packet path from there.&lt;/p&gt;
&lt;p&gt;Most of the time, that shortcut is good enough.&lt;/p&gt;
&lt;p&gt;VNRA is where it starts to break.&lt;/p&gt;
&lt;p&gt;Not because Azure suddenly becomes opaque, and not because route evaluation stops mattering. The change is more useful than that. Once VNRA is introduced, the packet path is no longer best understood from the edge inward. The centre of gravity moves. Forwarding intent becomes more centralised, and attachment-level effective routes become a local view of a broader forwarding design.&lt;/p&gt;
&lt;p&gt;That is the shift this post is about.&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 I can see the effective routes on the NIC or subnet, I can explain how the packet will move.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;That assumption holds often enough in Azure to become muscle memory. It is also exactly the habit VNRA exposes.&lt;/p&gt;
&lt;p&gt;The better mental model is this:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;VNRA does not replace Azure routing. It recentres forwarding intent around a shared routing control point, which means NIC- and subnet-level effective routes are no longer the authoritative explanation of end-to-end packet behaviour.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;That is an important distinction.&lt;/p&gt;
&lt;p&gt;This is not about obscurity. Azure has not become mysterious. System routes still exist. User-defined routes (UDRs) still matter. Route precedence still matters. Longest prefix match still matters.&lt;/p&gt;
&lt;p&gt;What changes is where packet truth lives.&lt;/p&gt;
&lt;p&gt;Before VNRA, many engineers reason from the edge inward:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;inspect the source attachment&lt;/li&gt;
&lt;li&gt;read the effective routes&lt;/li&gt;
&lt;li&gt;infer the path&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;With VNRA in the design, that shortcut becomes unreliable. You now need to reason from the forwarding design outward:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;understand the role of the shared routing control point&lt;/li&gt;
&lt;li&gt;then interpret local effective routes in that context&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That is a design shift, an operations shift, and a troubleshooting shift.&lt;/p&gt;
&lt;h2 id="how-it-really-works"&gt;How It Really Works
&lt;/h2&gt;&lt;p&gt;VNRA does not turn Azure into a traditional routed fabric with a core router that owns the whole network. Azure still owns the underlying virtual network fabric. The platform still provides system behaviour. Effective routes still express local route-selection context.&lt;/p&gt;
&lt;p&gt;What changes is that forwarding expectations increasingly need to be interpreted relative to VNRA’s role in the path.&lt;/p&gt;
&lt;p&gt;That makes VNRA less like a simple next-hop override and more like the &lt;strong&gt;logical centre of forwarding intent&lt;/strong&gt;.&lt;/p&gt;
&lt;h3 id="before-vnra"&gt;Before VNRA
&lt;/h3&gt;&lt;p&gt;In a conventional Azure design, an engineer might look at the source NIC, inspect its effective routes, and treat that as a near-final explanation of packet behaviour.&lt;/p&gt;
&lt;p&gt;That is not perfectly complete, but it is often operationally serviceable.&lt;/p&gt;
&lt;p&gt;A familiar mental flow looks like this:&lt;/p&gt;
&lt;div class="mermaid"&gt;flowchart LR
A[Source NIC] --&gt; B[Effective route evaluation]
B --&gt; C[Winning route selected]
C --&gt; D[Azure native forwarding path]
D --&gt; E[Destination]
&lt;/div&gt;
&lt;h3 id="after-vnra"&gt;After VNRA
&lt;/h3&gt;&lt;p&gt;With VNRA present, the route evaluation at the source still matters, but it no longer tells the whole story on its own. The winning route needs to be interpreted in the context of a forwarding design whose centre now sits at the routing appliance.&lt;/p&gt;
&lt;div class="mermaid"&gt;flowchart TB
subgraph SpokeA[Spoke A]
A1[Source workload]
A2[Source NIC effective routes]
end
subgraph Hub[Shared routing domain]
H1[VNRA as forwarding control point]
end
subgraph SpokeB[Spoke B]
B1[Destination workload]
end
A1 --&gt; A2
A2 --&gt; H1
H1 --&gt; B1
&lt;/div&gt;
&lt;p&gt;The point is not that Azure stops selecting routes at the source. It does not.&lt;/p&gt;
&lt;p&gt;The point is that the source attachment no longer gives you a sufficient explanation of the full packet path. It gives you a &lt;strong&gt;local route-selection view&lt;/strong&gt; inside a forwarding design that now has a more central control point.&lt;/p&gt;
&lt;h2 id="a-concrete-scenario-spoke-to-spoke-traffic"&gt;A Concrete Scenario: Spoke-to-Spoke Traffic
&lt;/h2&gt;&lt;p&gt;This is where the old instinct starts to fail.&lt;/p&gt;
&lt;p&gt;Assume you have:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;a workload in Spoke A&lt;/li&gt;
&lt;li&gt;a workload in Spoke B&lt;/li&gt;
&lt;li&gt;VNRA positioned in the shared routing domain&lt;/li&gt;
&lt;li&gt;traffic between the spokes expected to follow that central forwarding design&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;An engineer checks the effective routes on the source NIC in Spoke A and sees the expected destination prefix. That is useful, but it only answers part of the question.&lt;/p&gt;
&lt;p&gt;It tells you:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;what route-selection context exists at the source attachment&lt;/li&gt;
&lt;li&gt;which route is likely to win locally&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;It does &lt;strong&gt;not&lt;/strong&gt;, by itself, prove that the end-to-end packet path is correctly understood purely from that edge view.&lt;/p&gt;
&lt;p&gt;That is the mistake to avoid.&lt;/p&gt;
&lt;p&gt;In a VNRA-centred design, the source NIC route table is no longer the best place to infer the whole story. The authoritative interpretation now sits with the shared forwarding design that the appliance represents.&lt;/p&gt;
&lt;p&gt;So the practical shift is this:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;pre-VNRA habit:&lt;/strong&gt; read the packet path from the source edge&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;VNRA-aware habit:&lt;/strong&gt; read the packet path from the forwarding centre, then use edge effective routes to validate local context&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That is a very different troubleshooting posture.&lt;/p&gt;
&lt;h2 id="what-changes-in-effective-routes"&gt;What Changes in Effective Routes
&lt;/h2&gt;&lt;p&gt;This is where precision matters.&lt;/p&gt;
&lt;p&gt;The change is &lt;strong&gt;not&lt;/strong&gt; that effective routes become wrong.&lt;/p&gt;
&lt;p&gt;The change is &lt;strong&gt;not&lt;/strong&gt; that Azure starts hiding route information.&lt;/p&gt;
&lt;p&gt;The change is this:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Effective routes remain useful for understanding local route-selection context, but they are no longer sufficient on their own to explain end-to-end packet behaviour once VNRA becomes the logical centre of forwarding intent.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;That is a narrower and more defensible claim.&lt;/p&gt;
&lt;h3 id="what-still-holds"&gt;What still holds
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;Longest prefix match still applies.&lt;/li&gt;
&lt;li&gt;Route precedence still applies.&lt;/li&gt;
&lt;li&gt;UDRs still influence forwarding intent.&lt;/li&gt;
&lt;li&gt;System routes still exist.&lt;/li&gt;
&lt;li&gt;Propagated routes still matter where applicable.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="what-changes-operationally"&gt;What changes operationally
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;A familiar-looking effective route table can create false confidence.&lt;/li&gt;
&lt;li&gt;Local route correctness does not guarantee correct packet-path interpretation.&lt;/li&gt;
&lt;li&gt;The packet path can no longer be safely inferred from attachment-level visibility alone.&lt;/li&gt;
&lt;li&gt;Route inspection becomes one step in analysis, not the final answer.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That is the real impact.&lt;/p&gt;
&lt;h2 id="azure-default-routing-behaviour-does-not-disappear"&gt;Azure Default Routing Behaviour Does Not Disappear
&lt;/h2&gt;&lt;p&gt;One easy mistake is to overstate what VNRA changes.&lt;/p&gt;
&lt;p&gt;VNRA does not mean Azure abandons its default routing model. The platform is still doing what the platform does. Azure has not become a blank underlay underneath your appliance.&lt;/p&gt;
&lt;p&gt;That matters because this is &lt;strong&gt;not&lt;/strong&gt; an article arguing that VNRA replaces Azure routing.&lt;/p&gt;
&lt;p&gt;It is arguing something more specific:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;VNRA changes the operational locus of truth for packet-path interpretation.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;That is why engineers get caught.&lt;/p&gt;
&lt;p&gt;They compare route objects before and after VNRA, see something broadly familiar, and conclude the forwarding story is still edge-readable in the same way. It often is not.&lt;/p&gt;
&lt;p&gt;The route constructs may still look recognisable. The packet-path explanation is what changes.&lt;/p&gt;
&lt;h2 id="why-next-hop-thinking-is-not-enough"&gt;Why Next-Hop Thinking Is Not Enough
&lt;/h2&gt;&lt;p&gt;A lot of Azure route interpretation compresses two ideas into one:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;which route wins&lt;/li&gt;
&lt;li&gt;what packet path that creates&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Without VNRA, that shortcut often survives.&lt;/p&gt;
&lt;p&gt;With VNRA, it becomes much less safe.&lt;/p&gt;
&lt;p&gt;The route winner at the source attachment still matters, but the realised forwarding expectation now needs to be interpreted relative to the appliance-centred design. If you skip that second step, you can end up with a route table that looks correct and an understanding of packet behaviour that is not.&lt;/p&gt;
&lt;p&gt;That is why this topic matters in production.&lt;/p&gt;
&lt;h2 id="real-world-impact"&gt;Real-World Impact
&lt;/h2&gt;&lt;p&gt;So how would this change something you design, deploy, or operate?&lt;/p&gt;
&lt;p&gt;It changes &lt;strong&gt;where you validate packet truth&lt;/strong&gt;.&lt;/p&gt;
&lt;h3 id="design"&gt;Design
&lt;/h3&gt;&lt;p&gt;When VNRA is in the forwarding design, you should stop validating routing solely from the edge.&lt;/p&gt;
&lt;p&gt;Instead, design reviews need to ask:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;what is the intended central forwarding path?&lt;/li&gt;
&lt;li&gt;which flows depend on that shared routing control point?&lt;/li&gt;
&lt;li&gt;do local effective routes support that intent, rather than supposedly define it?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That sounds subtle, but it changes how deterministic your design really is.&lt;/p&gt;
&lt;p&gt;A route table can be technically correct and still be a poor explanation of the intended packet path.&lt;/p&gt;
&lt;h3 id="deployment"&gt;Deployment
&lt;/h3&gt;&lt;p&gt;Successful deployment is no longer proven by:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;a route object being present&lt;/li&gt;
&lt;li&gt;an effective route appearing on a NIC&lt;/li&gt;
&lt;li&gt;an appliance existing in the environment&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Those are useful checks, not sufficient proof.&lt;/p&gt;
&lt;p&gt;If VNRA is the centre of forwarding intent, deployment validation has to confirm that the intended traffic classes actually align with that central design. Otherwise you have validated configuration artefacts, not forwarding behaviour.&lt;/p&gt;
&lt;h3 id="operations"&gt;Operations
&lt;/h3&gt;&lt;p&gt;This is where the change becomes most visible.&lt;/p&gt;
&lt;p&gt;Your runbooks need to separate two different questions:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Is local route selection at the attachment point correct?&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Is the packet path behaving according to the VNRA-centred forwarding design?&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Those are not the same question.&lt;/p&gt;
&lt;p&gt;Without that distinction, teams end up diagnosing packet-path issues as though they were route-precedence issues, or vice versa.&lt;/p&gt;
&lt;p&gt;That is how incident response gets slower and less accurate.&lt;/p&gt;
&lt;h2 id="implementation-example-effective-routes-as-local-evidence"&gt;Implementation Example: Effective Routes as Local Evidence
&lt;/h2&gt;&lt;p&gt;The Azure CLI still gives you a useful first view.&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;/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-network-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 spokea-app01-nic
&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;That output tells you the local route-selection context for that NIC.&lt;/p&gt;
&lt;p&gt;It does &lt;strong&gt;not&lt;/strong&gt; by itself prove the full end-to-end path once VNRA is acting as the shared routing control point.&lt;/p&gt;
&lt;p&gt;A VNRA-aware interpretation looks more like this:&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;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&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 NIC effective routes:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- 10.20.0.0/16 via VirtualNetwork
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- 10.30.0.0/16 via UserDefinedRoute
&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;What this tells you:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- The source attachment has a visible route-selection context.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- A specific route source is winning locally.
&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;What this does not tell you on its own:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- That the full packet path is correctly understood purely from this edge view.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- That the observed forwarding behaviour aligns with the VNRA-centred design.
&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;That is the practical shift. The command has not changed. The meaning you assign to its output has.&lt;/p&gt;
&lt;h2 id="gotchas-and-edge-cases"&gt;Gotchas and Edge Cases
&lt;/h2&gt;&lt;h3 id="familiar-route-output-creates-false-confidence"&gt;Familiar route output creates false confidence
&lt;/h3&gt;&lt;p&gt;This is probably the biggest trap.&lt;/p&gt;
&lt;p&gt;The effective route table can look entirely reasonable while still being an incomplete explanation of actual packet behaviour. Engineers trust familiar output quickly. VNRA punishes that habit.&lt;/p&gt;
&lt;h3 id="local-route-correctness-and-path-correctness-are-different-things"&gt;Local route correctness and path correctness are different things
&lt;/h3&gt;&lt;p&gt;You can have a locally sensible route outcome and still misread the real packet path if you are treating the source attachment as the authoritative viewpoint.&lt;/p&gt;
&lt;p&gt;That matters most when traffic between shared network domains is expected to conform to a centrally expressed forwarding design.&lt;/p&gt;
&lt;h3 id="comparing-before-and-after-route-tables-can-mislead-you"&gt;Comparing before and after route tables can mislead you
&lt;/h3&gt;&lt;p&gt;If your only test is “did the effective route entries visibly change?”, you may miss the actual shift.&lt;/p&gt;
&lt;p&gt;VNRA is often less about inventing new-looking route artefacts and more about changing where the authoritative packet-path interpretation now sits.&lt;/p&gt;
&lt;h3 id="split-responsibility-makes-diagnosis-worse"&gt;Split responsibility makes diagnosis worse
&lt;/h3&gt;&lt;p&gt;If one team validates route objects and another validates appliance health, but neither owns packet-path interpretation end to end, VNRA will expose that gap quickly.&lt;/p&gt;
&lt;p&gt;This is not a governance post, so I will leave it there. Operationally, though, the boundary matters.&lt;/p&gt;
&lt;h2 id="best-practices"&gt;Best Practices
&lt;/h2&gt;&lt;h3 id="1-stop-treating-edge-effective-routes-as-the-whole-packet-narrative"&gt;1. Stop treating edge effective routes as the whole packet narrative
&lt;/h3&gt;&lt;p&gt;They are still useful. They are no longer authoritative on their own.&lt;/p&gt;
&lt;h3 id="2-model-packet-paths-from-the-forwarding-centre-outward"&gt;2. Model packet paths from the forwarding centre outward
&lt;/h3&gt;&lt;p&gt;If VNRA sits at the heart of forwarding intent, start there. Then use attachment-level route views to confirm local context.&lt;/p&gt;
&lt;h3 id="3-separate-route-correctness-from-forwarding-correctness-in-your-runbooks"&gt;3. Separate route correctness from forwarding correctness in your runbooks
&lt;/h3&gt;&lt;p&gt;Make this explicit. It will prevent a lot of bad diagnosis during incidents.&lt;/p&gt;
&lt;h3 id="4-challenge-designs-that-rely-on-edge-inference-alone"&gt;4. Challenge designs that rely on edge inference alone
&lt;/h3&gt;&lt;p&gt;If the only way to explain a path is by reading local route tables and hoping that tells the whole story, the design is probably under-validated.&lt;/p&gt;
&lt;h3 id="5-favour-determinism-over-cleverness"&gt;5. Favour determinism over cleverness
&lt;/h3&gt;&lt;p&gt;A VNRA-centred design should make packet intent clearer, not turn troubleshooting into guesswork.&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; VNRA is not interesting because it adds another routing target. It is interesting because it moves packet truth away from the edge. Once forwarding intent is centralised, effective routes become local evidence, not the final explanation.
&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/network-watcher/network-watcher-monitoring-overview" target="_blank" rel="noopener"
&gt;Azure Network Watcher overview&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item></channel></rss>