Homeβ€Ί Blogβ€Ί Azure Architecture Series #62 β€” Address Planning That Survives Growth and Peering…
Azure Architecture Azure Architecture Series

Azure Architecture Series #62 β€” Address Planning That Survives Growth and Peering

Verified against current vendor documentation on 14 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

The previous post, #61, covered the arithmetic: five addresses gone from every subnet, a hard floor on how small a subnet can be, five address ranges Azure refuses outright. This post is the planning half, and it starts with a question most people get backwards.

Ask an engineer what they are afraid of when sizing a VNet, and the answer is almost always running out. So they oversize. They take a /16 for a workload that will hold forty machines, because a renumbering exercise in two years sounds worse than some wasted space today.

That fear is aimed at the wrong failure. Growth has been a solved problem for a while:

“You can resize the address space of Azure virtual networks that are peered without incurring any downtime on the currently peered address space.”

You can widen a prefix, add new ranges, or delete ranges, on a live VNet, with peerings in place, and the Cloud Adoption Framework says the same thing in planning language: “You can add address space after you create a virtual network. This process doesn’t need an outage if the virtual network is already connected to another virtual network via virtual network peering.”

The thing that actually destroys address plans has no such escape hatch. Two business units each took 10.1.0.0/16. An acquisition arrives carrying 10.0.0.0/8 in its on-premises estate. A spoke needs to peer with a hub it was never meant to reach. In every one of those cases the answer is the same, and it is not a feature flag:

“Overlapping IP address spaces across on-premises and Azure regions creates major contention challenges.”

The asymmetry, in one table
QuestionAnswerCost of getting it wrong on day one
Can I make this VNet bigger later? Yes — live, no downtime, peerings intact A portal change and a peering resync
Can I make this VNet smaller later? Yes, if the space is empty Move or delete the resources in that range first
Can I resolve an overlap later? No — not within peering Renumber an estate, or change the topology

Planning effort should follow the third row. It usually follows the first.

So the advice that matters is not “size generously”. It is the pair of recommendations the CAF puts first: “Plan for non-overlapping IP address spaces across Azure regions and on-premises locations in advance” and — pointedly, given the habit above — “Don’t create large virtual networks like /16. It ensures that IP address space isn’t wasted.”

Those two sit together for a reason. Oversizing is not a neutral hedge. Every address you hoard in one VNet is an address that cannot be made unique somewhere else, and uniqueness is the resource that has no recovery path.

Architecture

One reversible axis, one irreversible axis, and two topologies for when the irreversible one runs out.

Diagram: Azure address planning across three layers. The first layer is what can be changed on a live peered virtual network: you can resize the address space of peered virtual networks without incurring any downtime on the currently peered address space; you can modify the address range prefix of an existing range, for example changing 10.1.0.0/16 to 10.1.0.0/18, add address ranges, or delete address ranges; resizing works for both IPv4 and IPv6 and is supported cross-tenant; all three operations require that you sync the virtual network peer for each remote peered virtual network, and Microsoft recommends running sync after every resize operation rather than batching several resizes before one sync; before an address space can be deleted it must be empty; and the feature does not support a virtual network peered with a classic virtual network. The second layer is what cannot be changed: overlapping IP address spaces across on-premises and Azure regions creates major contention challenges, an added address space must not overlap other address spaces, and Azure VPN Gateway NAT can join overlapping on-premises sites but is not a remedy for overlap between peered virtual networks. The third layer is the allocation vocabulary: the Cloud Adoption Framework T-shirt sizes are small slash 24 with 256 IP addresses, medium slash 22 with 1,024 IP addresses, and large slash 20 with 4,096 IP addresses; RFC 1918 ranges 10.0.0.0/8, 172.16.0.0/12 and 192.168.0.0/16 are the recommended source; five addresses are reserved per subnet and must be factored into sizing; and some services including Azure Firewall and Azure VPN Gateway require dedicated subnets. The fourth layer is what to do when unique private space genuinely runs out, which is to stop allocating unique space. Method 1 uses IPv4 subnet peering to exclude subnets from the spoke-to-hub peering, so the same non-routable range, 10.57.0.0/16 in Microsoft's example, is reused in every landing zone while routable ranges 10.0.0.0/24, 10.1.0.0/24 and 10.2.0.0/24 stay unique; outbound traffic from non-routable subnets must use Source NAT behind a NAT-capable appliance in a routable subnet in each landing zone, Azure NAT Gateway cannot do this because it only supports SNAT for internet-bound traffic, Azure Firewall must sit in a reserved AzureFirewallSubnet using routable space, Azure Firewall Basic supports up to 250 Mbps, and domain controllers should be deployed to routable subnets. Method 2 deploys applications in isolated virtual networks that are not connected to the corporate network and exposes them through Azure Private Link services consumed by private endpoints in routable spokes, so the isolated networks can use any address space even if it overlaps, but applications there cannot initiate connections into the corporate network. Method 1 suits traditional interdependent enterprise environments and Method 2 suits loosely coupled independent applications. Azure Virtual WAN does not support subnet peering, so Method 1 is implemented there as two peered virtual networks per landing zone. Finally, gateway transit advertises the hub address space and every peered spoke address space to on-premises by default, and the summarizedGatewayPrefixes property replaces that with summarized prefixes, which only works if allocation was contiguous, and it only affects virtual networks with a gateway subnet.
Growth is reversible and sync-gated. Overlap is not. When unique space runs out, the answer is a topology, not a renumbering.

Three things you can do to a live, peered address space

The resize feature is specific about what it covers, and all three operations are things people assume require a rebuild:

OperationExample from the docsCatch
Widen or narrow an existing range “change 10.1.0.0/16 to 10.1.0.0/18” Requires a peering sync
Add a range A second, discontiguous block on the same VNet “ensure that it doesn’t overlap other address spaces”
Delete a range Reclaiming space from a decommissioned tier “Before you can delete an address space, it must be empty”

The sync is the part that bites, because it is manual and it is per-peer: “When you update the address space for a virtual network, you need to sync the virtual network peer for each remote peered virtual network.” On a hub with forty spokes that is forty sync operations, and until each one runs, that peer does not know the new space exists. There is also an ordering instruction worth following literally: “We recommend that you run sync after every resize address space operation instead of performing multiple resizing operations and then running the sync operation.”

Two further details that remove common objections. It works across tenant boundaries — “Resizing of address space is supported cross-tenant” — and it covers both protocols, since “Resizing works for both IPv4 and IPv6 address spaces.” The one documented exclusion is a legacy shape: the feature “doesn’t support scenarios where the virtual network to be updated is peered with a classic virtual network.”

A sizing vocabulary that is deliberately coarse

Once growth is cheap, sizing stops being a precision exercise and becomes a vending problem: how does a platform team hand out space without negotiating every request? The CAF’s answer is three sizes and nothing else.

SizePrefixAddressesUsable after Azure’s five, per subnet
Small/24256251 in a single subnet
Medium/221,024e.g. four /24s, 251 each
Large/204,096e.g. sixteen /24s

Note what is absent: there is no extra-large, and no /16. The largest size on the menu is a /20, which is one sixteenth of the /16 people reach for by default. And the stated purpose of the menu is not tidiness, it is self-service — “you could adopt T-shirt sizing to make it easy for workload teams to describe their needs”, with the process designed to “support requesting different sizes based on the needs of the individual workload landing zones.”

Sizing also has to absorb two taxes from #61. Azure “reserves five IP addresses within each subnet” and you must “factor in those addresses when you’re sizing virtual networks and encompassed subnets” — per subnet, so a VNet split into eight subnets loses forty addresses before anything deploys. And some space is not yours to allocate freely at all: “Some Azure services require dedicated subnets. These services include Azure Firewall and Azure VPN Gateway.”

Where the plan lives, and why a spreadsheet is a known failure mode

A T-shirt menu only prevents overlap if something tracks what has been handed out. The CAF is direct that the options run from “a basic Excel-based inventory” up to enterprise IPAM products, and equally direct about what the tool must do: “Your IPAM tool should have an API for reserving non-overlapping IP address spaces to support an Infrastructure as Code (IaC) approach”, because that is what lets allocation join the subscription vending process instead of being a ticket.

There is a first-party option that costs nothing to evaluate: “Azure IPAM is a lightweight solution built on the Azure platform. It automatically discovers IP address utilization within your Azure tenant” — which also means it can tell you what your current overlap situation actually is, rather than what the spreadsheet believes.

Two structural rules go with it. Organise the space so it can be summarised later: “Create a systematic arrangement for your IP address spaces by structuring them according to Azure regions and workload archetypes.” And close the loop at the other end, because an address plan that only ever allocates is a plan with a slow leak: “The decommissioning process for workloads should include the removal of IP address spaces that are no longer used, which can later be repurposed for upcoming new workloads.”

Why This Architecture Holds Up

Because the reversible problem has a feature and the irreversible one has a topology

Every other constraint in this post can be traded against something. Overlap cannot. There is exactly one NAT mechanism in the planning guidance, and it is carefully scoped: “Azure VPN Gateway can connect overlapping, on-premises sites with overlapping IP address spaces through network address translation (NAT) capability.” On-premises sites. It is not a way to peer two overlapping VNets, and reading it as one is how an overlap gets discovered late.

So the decision a platform team is really making on day one is not how big each VNet is. It is whether anything in the estate is capable of handing out a duplicate range — and if the answer is “a spreadsheet and good intentions”, the answer is yes.

Because “don’t create a /16” and “use a few large VNets” are both real advice

#61 ended on a genuine tension in Microsoft’s own guidance, and address planning is where it has to be resolved. The best-practices page prefers a few large virtual networks over many small ones; the planning page says “Don’t create large virtual networks like /16.”

They are not in conflict once you notice they are answering different questions. The first is about management overhead within a subscription — do not split one workload across six VNets for no reason. The second is about waste across the estate — do not take a /16 for that one workload. The resolution is the T-shirt menu: few VNets per landing zone, each sized from a short list, allocated from a tracked pool. Which is also why the CAF adds the blunt one: “Don’t create virtual networks without planning the required address space in advance.”

And one habit to drop outright, because it borrows someone else’s addresses to solve your own shortage: “Don’t use public IP addresses for virtual networks, especially if the public IP addresses don’t belong to your organization.” Azure will let you. The internet will not care that you did until something in it needs to reach the real owner of that range.

Because when unique space runs out, the answer is to stop allocating unique space

This is the part of the subject that is genuinely architectural, and it inverts the usual instinct. The starting position is plain: corporate networks draw on “10.0.0.0/8, 172.16.0.0/12, and 192.168.0.0/16”, which on-premises “provide enough IP addresses to meet the requirements of even the largest networks” — and then: “In the cloud, large networks are easy to build… it’s important to adopt more conservative address management practices and treat IPv4 addresses as a limited resource.”

Microsoft’s order of operations is IPAM first — “centrally track address use and allocate unique, nonoverlapping address spaces. Right-size virtual networks and subnets, and reclaim unused address ranges when you decommission workloads” — and only then one of two topologies that “intentionally reuse the same IPv4 address blocks in multiple virtual networks”.

Method 1 — non-routable subnetsMethod 2 — Private Link services
Mechanism Subnet peering excludes chosen subnets from the spoke-to-hub peering Applications live in isolated VNets, exposed through Private Link services
What gets reused The same non-routable range in every landing zone Any address space at all, overlapping the corporate network if you like
Inbound from the estate Routable subnets only Via private endpoints only
Outbound to the estate Yes, through SNAT No — not without another Private Link service
Fits “traditional enterprise environments where multiple systems and applications depend on each other” “loosely coupled environments where applications operate independently”

Method 1 is worth seeing concretely, because the numbers make the idea obvious. In Microsoft’s example the hub and each spoke hold unique routable ranges — 10.0.0.0/24, 10.1.0.0/24, 10.2.0.0/24 — while “the range 10.57.0.0/16 serves as the non-routable address space”, and because those subnets are excluded from the peering, “non-routable subnets in different workload landing zone spokes can have the same or overlapping address ranges within 10.57.0.0/16.” A whole /16 of back-end capacity, allocated once, reused in every landing zone. The routable allocation per spoke drops to a /24.

Method 2 goes further and drops the Layer 3 relationship entirely: “clients in a virtual network can consume applications in a different virtual network without configuring Layer-3 connectivity… The two virtual networks can use overlapping IP address ranges. Azure transparently handles the required NAT logic.” This is the one mechanism in the whole subject that makes an overlap survivable — and it does so by refusing to route between the two networks at all.

Because reusing address space costs you an appliance in every landing zone

Non-routable space is not free, and the bill is architectural rather than numeric. Back-end components still need DNS, domain controllers, logging and backup, so: “When resources in non-routable subnets need to initiate connections to endpoints outside their landing zone, those connections must use Source NAT (SNAT) behind a routable IP address. Therefore, you must deploy a NAT-capable NVA in a routable subnet in each landing zone.”

The obvious candidate does not qualify, and this is the sentence to read before designing anything: “You can’t use Azure NAT Gateway because it only supports SNAT for internet-bound traffic.” So it is Azure Firewall or a marketplace NVA, each with its own costs:

  • Azure Firewall needs its own space in the routable block — “Deploy Azure Firewall in its own reserved subnet named AzureFirewallSubnet, which must use a routable address space” — so the scheme you adopted to save addresses immediately spends some back.
  • The cheapest SKU may not fit: “Basic supports up to 250 Mbps but doesn’t include DNS proxy, custom DNS, network-level FQDN filtering, or threat-intelligence deny mode.”
  • Some workloads are simply not candidates for non-routable placement: “We recommend that you deploy Windows Server Active Directory domain controllers to routable subnets”, because DC-to-DC communication over NAT “hasn’t been tested and isn’t supported.”
  • And if the estate is on Virtual WAN, the mechanism changes shape: “Azure Virtual WAN doesn’t support subnet peering”, so Method 1 becomes two peered VNets per landing zone — one routable and attached to the hub, one non-routable and attached only to its sibling.

None of that makes the method wrong. It makes it a decision with a price, taken when unique space has genuinely run short — not a default.

Because a flat plan turns into somebody else’s routing table

Here is the consequence of address planning that almost never appears in the plan itself. With gateway transit in a hub-and-spoke, “Azure VPN Gateway and ExpressRoute Gateway can advertise a large number of prefixes to on-premises because the default behavior is to advertise the address space of the hub and the address spaces of peered virtual networks.”

Every spoke you add puts its prefixes into the on-premises routing table. There is a control for it — “you can configure advertised gateway prefixes on the gateway virtual network by using the summarizedGatewayPrefixes property”, which advertises summarised prefixes and suppresses the covered spoke ranges — but summarisation only works if the allocation was contiguous in the first place. That is the real payoff of the “structure by region and workload archetype” rule: a tidy plan can be expressed as a handful of routes, and a plan assembled range-by-range cannot be expressed as anything shorter than itself. (One scoping note: the property “only affects virtual networks with a gateway subnet.”)

Because the peering limits arrive before the address limits do

Worth knowing while sizing a topology: past a certain spoke count the connectivity model changes product. Azure Virtual Network Manager connectivity configurations let you “create a hub-and-spoke topology with up to 1,000 spoke virtual networks connected to a hub, or create a mesh connected group containing up to 3,000 virtual networks that can communicate directly with one another” — explicitly framed as scaling “beyond traditional virtual network peering limits.”

A mesh of 3,000 VNets is also the clearest argument for the T-shirt menu. At that count, the difference between handing out /20s and handing out /16s is the difference between a plan that fits inside 10.0.0.0/8 and one that does not.

Because IPv6 is a planning answer, not just a modernisation one

The CAF offers it in exactly those terms: “For environments that have limited availability of private IP addresses, consider using IPv6. Virtual networks can be IPv4-only or dual stack IPv4+IPv6.” Dual stack, note — IPv4 cannot be switched off. It relieves pressure on the scarce space rather than replacing it, which makes it a complement to the two methods above rather than an alternative.

Key Architecture Decisions

Decision point Choose Because
Sizing a new workload VNet Smallest T-shirt size that fits Growth is a live, zero-downtime operation.
Reaching for a /16 “to be safe” Don’t Don't create large virtual networks like /16.
Largest size on the self-service menu /20 — 4,096 addresses That is where the CAF's T-shirt sizes stop.
Where the allocation record lives An IPAM tool with an API IaC and subscription vending need to call it.
Evaluating IPAM options Start with Azure IPAM It discovers current utilisation in the tenant.
How ranges are organised By region, then workload archetype Only contiguous plans can be summarised later.
After a resize on a peered VNet Sync every remote peer, immediately Sync is manual, per-peer, and per-operation.
Several resizes to do Sync after each one Microsoft advises against batching then syncing.
Deleting an address range Empty it first A range in use cannot be removed.
Hoping to NAT around a VNet overlap Don’t plan on it VPN Gateway NAT addresses on-premises sites.
Running short of unique private space IPAM, right-size and reclaim first That is Microsoft's stated order of operations.
Interdependent enterprise workloads, space exhausted Method 1 — non-routable subnets It keeps full connectivity inside the landing zone.
Independent applications, space exhausted Method 2 — Private Link services Overlapping ranges are tolerated outright.
Outbound from non-routable subnets SNAT via Azure Firewall or an NVA NAT Gateway only SNATs internet-bound traffic.
Placing domain controllers Routable subnets DC-to-DC over NAT is not a supported path.
Method 1 on a Virtual WAN estate Two peered VNets per landing zone Virtual WAN does not support subnet peering.
Gateway transit advertising every spoke Set summarizedGatewayPrefixes The default advertises hub plus all peer spaces.
Scaling past peering limits Virtual Network Manager Up to 1,000 spokes, or a 3,000-VNet mesh.
Private space genuinely scarce Add IPv6, dual stack IPv4 cannot be disabled, but pressure drops.
Borrowing public ranges internally Don’t Especially ranges your organisation doesn't own.

Closing Thought

The received wisdom on Azure address planning is “size generously, because renumbering is painful”. Half of that is now wrong and the other half aims at the wrong risk. Resizing a peered VNet is a documented, zero-downtime operation covering widen, add and delete; the only real friction is a per-peer sync you have to remember to run. Generosity, meanwhile, is not free — it consumes the one thing with no recovery path, which is uniqueness.

That is the asymmetry worth designing around. Undersize a VNet and you widen a prefix and sync some peerings. Duplicate a range and the options are renumbering an estate, or rebuilding the topology so the two halves never route to each other. The planning effort belongs where the irreversibility is, and in practice that means less time in a subnet calculator and more time making sure a second team cannot be handed 10.1.0.0/16 because nothing in the process knows the first team has it.

And the most interesting thing in the whole subject is what Microsoft recommends when the arithmetic finally fails. Not a bigger block, and not a renumbering project: a topology that reuses the same addresses deliberately, in every landing zone, with the uniqueness confined to the thin routable layer that actually needs to be reachable. 10.57.0.0/16 in that worked example is not an allocation. It is the same /16, over and over, and it works precisely because the peering was taught to leave it out. Address planning that survives growth and peering is less about predicting how much space you will need, and more about shrinking the part of the estate where the answer has to be unique.

Next in this series

#63 goes down a level, into the subnets themselves: subnet delegation and service injection — what it means to hand a subnet to a PaaS service, what Azure puts in it, and why some services need a subnet of their own while others are content with a shared one.

Comments

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