Homeβ€Ί Blogβ€Ί Azure Architecture Series #72 β€” Peering, VPN or ExpressRoute: Three Ways to Join Networks…
Azure Architecture Azure Architecture Series

Azure Architecture Series #72 β€” Peering, VPN or ExpressRoute: Three Ways to Join Networks

Verified against current vendor documentation on 24 October 2026. Pricing, limits and API behaviour were checked against the official docs on that date. Cloud services change fast — if you are reading this much later, treat the specifics as a starting point and re-check the linked sources.

Business Challenge

Azure groups two of these together and calls the category by name: “Azure ExpressRoute is one of the services that make up the Hybrid Connectivity category… Other services in this category include VPN Gateway and Virtual WAN. Each service has its own unique features and use cases.” Peering is not in that category at all, and that is the first clue.

Most comparisons of these three are feature matrices. That is the wrong instrument, because two questions settle it before features matter:

The two questions that actually decide

1. What are you joining? Two Azure virtual networks, or Azure to something outside it? Peering only does the first. The other two are built for the second.

2. Must it avoid the public internet? If yes, VPN Gateway is out by definition — its own description is traffic “between an Azure virtual network and on-premises locations over the public Internet”, whereas ExpressRoute connections “don’t go over the public internet”.

Answer those and you usually have one option, occasionally two. The feature table only matters for sizing after that.

Which leaves the thing a feature table never shows, and the reason this post exists: the three charge for completely different things. Not different amounts — different shapes.

Hourly chargeData charge
Peering None — “no charge for creating” “ingress and egress” — both directions
VPN Gateway Yes — “hourly compute costs” per SKU Egress only, and free between VNets in the same region
ExpressRoute Monthly port fee Unlimited plan: “all inbound and outbound… free”. Metered: inbound free, outbound per GB

Read the middle row twice. Azure's own VPN Gateway pricing says: “If you’re sending traffic only between virtual networks that are in the same region, there are no data costs. Traffic between VNets in the same region is free.”

Peering, for the same two virtual networks in the same region, charges both directions of every byte. So there is a crossover: peering is cheaper at low volume because it has no standing cost, and a VPN gateway becomes cheaper at high in-region volume because its data is free and only the hourly compute accrues. Nobody reaches for a VPN gateway to join two VNets in one region — and for a high-volume pair, the arithmetic is not obvious in the direction everyone assumes.

Architecture

Three products with three defining verbs, three cost shapes, and three different resiliency stories.

Diagram: comparing Azure virtual network peering, VPN Gateway and ExpressRoute across four layers. The first layer is the two questions that decide: what are you joining, since peering connects only Azure virtual networks to each other while the other two reach outside Azure; and must the traffic avoid the public internet, since VPN Gateway's own description is encrypted traffic over the public Internet while ExpressRoute connections do not go over the public internet. The second layer gives each product's defining verb: peering routes privately between virtual networks with no bandwidth restriction beyond the virtual machine size and is not transitive; VPN Gateway sends encrypted IPsec and IKE traffic over the internet, with site-to-site, point-to-site over OpenVPN, IKEv2 or SSTP, and VNet-to-VNet connection types, where all tunnels on one gateway share its bandwidth; ExpressRoute extends the network over a private connection via a connectivity provider using BGP for layer 3 routing. The third layer compares the three cost shapes, which differ in kind rather than amount. Peering has no hourly charge but bills both ingress and egress data. VPN Gateway charges hourly compute per SKU plus egress data, but data between virtual networks in the same region is free, which creates a crossover where peering is cheaper at low volume and a gateway can be cheaper at high in-region volume. ExpressRoute charges a monthly port fee with a choice of an unlimited plan where all inbound and outbound transfer is free, or a metered plan where inbound is free and outbound is charged per gigabyte; the Local SKU includes data transfer in the port charge. The fourth layer covers sizing and resiliency. ExpressRoute circuit bandwidths are 50, 100, 200 and 500 Mbps and 1, 2, 5 and 10 Gbps, with ExpressRoute Direct offering dual 10, 100 or 400 Gbps; every circuit has two connections to two Microsoft Enterprise edge routers and Microsoft requires dual BGP sessions, while maximum resiliency means two circuits in two peering locations and the secondary connection is not guaranteed for sustained extra traffic. VPN gateway SKUs range from Basic at 100 Mbps with 10 tunnels, 200 supported virtual machines and no BGP or zone redundancy, up to Generation 2 VpnGw5AZ at 10 Gbps with 100 tunnels, 10000 point-to-site connections, 9000 supported virtual machines, BGP and zone redundancy; beyond 100 site-to-site tunnels Microsoft directs you to Virtual WAN, and the VpnGw1 to VpnGw5 SKUs are slated for migration and should not be used for new gateways. The supported virtual machine count includes resources in peered spokes, private endpoints, network virtual appliances and PaaS backends, not just the gateway's own virtual network. Finally the three coexist by design: a site-to-site VPN can be a secure failover path for ExpressRoute and can reach sites ExpressRoute does not, and where a peering and a gateway both join the same pair of networks the traffic uses the peering.
Two questions eliminate two options. Then the cost shapes differ in kind, not amount.

Three defining verbs

What the documentation leads withWhat it joins
Peering Private routing between virtual networks Azure VNet ↔ Azure VNet only
VPN Gateway “send encrypted traffic… over the public Internet” VNet ↔ on-premises, and VNet ↔ VNet
ExpressRoute “extend your on-premises networks… over a private connection with the help of a connectivity provider” On-premises ↔ Microsoft cloud

The verbs are the distinction worth carrying. VPN Gateway's claim is encryption over a network it does not control. ExpressRoute's claim is privacy — a path that avoids the internet entirely, with a third party involved: you cannot buy ExpressRoute from Azure alone, you buy it with a connectivity provider.

That third-party dependency is the practical difference nobody budgets for. A VPN gateway is a resource you create in minutes. An ExpressRoute circuit involves procurement with a carrier, which is a different kind of lead time entirely.

Sizing: one is elastic, two are not

Peering has no sizing decision at all — “Virtual network peering, whether local or global, does not impose any bandwidth restrictions. Bandwidth is limited only by the VM.” There is no SKU, no throughput tier, nothing to get wrong.

The other two make you choose a number up front. ExpressRoute sells discrete circuits: “50 Mbps… 100 Mbps… 200 Mbps… 500 Mbps… 1 Gbps… 2 Gbps… 5 Gbps… 10 Gbps”, with ExpressRoute Direct going much higher — “dual 10-Gbps, 100-Gbps or 400-Gbps connectivity”. At least it is not a one-way door: “You can increase the ExpressRoute circuit bandwidth without having to tear down your connections.”

VPN Gateway's SKUs span two orders of magnitude, and the shape of the table matters more than the rows. #73 takes these apart properly; the two ends are enough here:

SKUThroughputS2S tunnelsSupported VMsBGPZone-redundant
Basic100 Mbps10200NoNo
VpnGw5AZ (Gen2)10 Gbps1009000YesYes

And a ceiling that tells you when you have outgrown the product: “If you need more than 100 S2S VPN tunnels, use Virtual WAN instead of VPN Gateway.”

Resiliency is not comparable across the three

ExpressRoute has redundancy built into a single circuit, and it is not optional: “Each ExpressRoute circuit consists of two connections to two Microsoft Enterprise edge routers (MSEEs)… Microsoft requires dual BGP connections from the connectivity provider or your network edge — one to each MSEE.”

But a redundant circuit is only standard resiliency. “For maximum resiliency, Microsoft recommends that you establish connection to two ExpressRoute circuits in two peering locations. For non-production and non-critical workloads, you can achieve standard resiliency by connecting to a single ExpressRoute circuit.”

So the production-grade answer is two circuits in two locations — which doubles both the port fee and the carrier procurement. That is the figure to put in a budget, not the single-circuit price.

One caveat on the redundant pair that is easy to misread as free capacity: “The bandwidth available through your secondary connection can be used for more traffic if necessary. Since the secondary connection is meant for redundancy, it isn’t guaranteed and shouldn’t be used for extra traffic for a sustained period… attempting to oversubscribe it results in increased packet drops.” A 1 Gbps circuit is 1 Gbps, not 2.

Why This Architecture Holds Up

Because the overlap question eliminates peering regardless of everything else

There is a constraint that overrides every other consideration, and it comes from #62: “The virtual networks you peer must have nonoverlapping IP address spaces.”

A VPN gateway does not have that restriction in the same absolute way, because it can translate: “Azure VPN Gateway can connect overlapping, on-premises sites with overlapping IP address spaces through network address translation (NAT) capability.”

So in the merger scenario #62 described — two estates that both used 10.1.0.0/16 — peering is not available at any price and a VPN gateway with NAT is. That is worth knowing as the escape hatch of last resort, because it inverts the usual preference: the lower-performance, internet-traversing option is the one that can join networks the fast private one cannot.

Because the in-region data charge inverts the obvious choice at volume

The cost comparison that nobody runs. For two virtual networks in one region:

Standing costPer-byte costCheaper when
PeeringZeroBoth directions chargedVolume is low
VPN Gateway (VNet-to-VNet)Hourly gateway computeZero in-regionVolume is high enough to pay for the gateway

I am not going to invent the crossover point, because the rates are on a pricing page rather than in the documentation and they vary. But the shape is sourced on both sides, and the shape is what matters: one is pure variable cost, the other is pure fixed cost. Anyone moving sustained bulk traffic between two VNets in one region over a peering should at least check the arithmetic, because the default assumption that peering is always cheaper is only reliably true at low volume.

The same logic is why ExpressRoute offers two billing models at all. “Unlimited data. Billing is based on a monthly fee; all inbound and outbound data transfer is included free of charge” versus “Metered data… all inbound data transfer is free of charge. Outbound data transfer is charged per GB.” Fixed versus variable, chosen deliberately, which is the decision peering does not let you make.

Because the VPN SKU's VM count is not about the VPN's virtual network

A sizing trap worth catching before it bites. The SKU table has a column for supported VM count, and it does not mean what the heading suggests:

“‘Supported Number of VMs in the Virtual Network’ refers to the count of resources that communicate through the gateway. This includes: Virtual Machines in the hub and peered spoke virtual networks… Private Endpoints… Network Virtual Appliances… Backend instances of PaaS services…”

In the hub-and-spoke estate every post since #62 has been building, the gateway lives in the hub and its SKU must be sized for the whole estate behind it — every spoke's VMs, every private endpoint from #63, every injected PaaS backend, every firewall appliance. A Basic gateway supports 200 of those in total. Counting only the hub's own machines will under-size it by an order of magnitude.

Because they coexist by design, and that is often the right answer

These are not mutually exclusive, and two of the documented scenarios are specifically about running two at once:

  • “Configure a site-to-site VPN as a secure failover path for ExpressRoute… (coexisting connections)”
  • “Use site-to-site VPNs to connect to sites that aren’t connected through ExpressRoute… (coexisting connections)”

So the realistic enterprise shape is ExpressRoute for the datacentres that justify a circuit, VPN for the branches that do not, and peering inside Azure — three products doing three jobs rather than a winner. Which reframes the question from “which one” to “which one for this link”.

One precedence rule to remember when two of them overlap, carried from #71: “When virtual networks are connected through both peering and a gateway, traffic… flows through the peering configuration, rather than the gateway.” The gateway keeps running and keeps billing while carrying nothing.

Because ExpressRoute's reach is geopolitical before it is global

A circuit does not reach everywhere by default: “You can connect to Microsoft from one of our peering locations and access regions within the same geopolitical region.” Global reach is a paid add-on — Premium “extend[s] connectivity across geopolitical boundaries”, with “National clouds… excluded.”

Premium also moves two limits that matter at scale: “Increased route limits for Azure private peering from 4,000 routes to 10,000 routes” and “Increased number of virtual network links per ExpressRoute circuit from 10 to a larger limit, depending on the bandwidth.”

That 10-VNet link limit on a standard circuit is the one to check against a spoke count. An estate with thirty spokes each needing circuit access is a Premium conversation, not a standard one — and the route limit is why #62's advice about contiguous, summarisable allocation pays off here specifically.

Two other SKUs are cost levers rather than capability ones. “By using the Local SKU… data transfer is included in the ExpressRoute port charge”, and “Global Reach… you can exchange data across your on-premises sites through your ExpressRoute circuits… cross data-center traffic uses the Microsoft network” — which is Azure selling you WAN transit between your own buildings.

Because one recommendation in the ExpressRoute docs argues against itself

Worth quoting because it is unusually self-limiting for a product page. ExpressRoute reaches Microsoft 365, and Microsoft would rather you did not: “Microsoft 365 was created to be accessed securely and reliably via the Internet. Because of this, we recommend ExpressRoute for specific scenarios.”

So “put all Microsoft traffic on the private circuit” is not the vendor's own advice. The circuit is for Azure workloads; Microsoft 365 over ExpressRoute is an exception needing a reason. That is a useful thing to have in writing when someone proposes routing everything down the expensive path for uniformity.

Key Architecture Decisions

Decision point Choose Because
Joining two Azure virtual networks Peering No SKU, no gateway, no bandwidth limit.
Joining Azure to on-premises VPN Gateway or ExpressRoute Peering doesn't leave Azure.
Traffic must not cross the internet ExpressRoute VPN Gateway is defined as over the public internet.
Address spaces overlap VPN Gateway with NAT Peering requires non-overlapping space.
Sustained bulk traffic between two VNets in one region Check the arithmetic Peering bills both ways; gateway in-region data is free.
Low-volume VNet-to-VNet Peering No standing cost at all.
Predictable ExpressRoute billing Unlimited data plan All transfer included in the monthly fee.
Spiky ExpressRoute traffic Metered, or the Local SKU Inbound is free; Local folds data into the port.
Production ExpressRoute Budget two circuits, two locations That is Microsoft's maximum-resiliency guidance.
Counting the secondary connection as capacity Don’t It isn't guaranteed; oversubscribing drops packets.
Sizing a hub VPN gateway Count the whole estate behind it Supported VMs includes peered spokes and PaaS backends.
More than 100 site-to-site tunnels Virtual WAN Microsoft directs you off VPN Gateway at that point.
Picking a VPN gateway SKU today An AZ SKU VpnGw1–5 are slated for migration.
Needing BGP or zone redundancy Not Basic Basic supports neither.
Active-active VPN for resilience Same cost as active-passive Stated explicitly in the pricing notes.
Reaching regions outside your geopolitical area ExpressRoute Premium Standard reaches only the local geopolitical region.
More than 10 VNets on one circuit Premium The standard link limit is 10.
Advertising many on-premises routes Summarise, or go Premium 4,000 routes standard, 10,000 with Premium.
Branches that can't justify a circuit Site-to-site VPN alongside ExpressRoute Coexistence is a documented scenario.
A backup path for ExpressRoute Site-to-site VPN Also a documented coexistence scenario.
Routing Microsoft 365 over the circuit Only with a specific reason Microsoft recommends the internet for it.
A gateway left in place after adding a peering Remove it Traffic uses the peering; the gateway still bills.

Closing Thought

The feature-matrix framing of this question is the reason it feels hard. Lay the three products side by side on twenty attributes and you get a grid nobody can decide from. Ask what you are joining and whether the traffic may touch the internet, and the grid collapses to one answer in most cases — with the overlap constraint from #62 as a third question that can override both, because it is the one case where the slower internet-traversing option is the only one that works at all.

What the matrix genuinely hides is the cost structure, and it hides it because the three charge for different categories of thing. Peering has no standing cost and bills every byte twice. A VPN gateway has a standing cost and bills no bytes at all between virtual networks in one region. ExpressRoute lets you pick which of those two shapes you want. Those are not three prices to compare; they are three different financial instruments, and which is cheapest depends entirely on a volume figure that no feature table contains.

The detail I would carry into a sizing conversation is the VPN gateway's supported-VM column, because it is the one number most likely to be read wrong. It counts everything that talks through the gateway — every spoke's machines, every private endpoint, every injected PaaS backend, every appliance — not the gateway's own virtual network. In a hub-and-spoke estate that is the whole estate, and a gateway sized against the hub alone will be undersized by roughly the number of spokes.

Next in this series

#73 takes the middle option apart: site-to-site VPN gateways and their SKUs — what the aggregate throughput benchmark actually measures, why policy-based and route-based are a one-way decision, and which of the SKU columns you will regret getting wrong.

Comments

How was your experience?
Your feedback helps improve this site.
PoorExcellent