Skip to content

description: Azure reference architectures for landing your isp6 IPv6 PA allocation in production: a single-region hub-and-spoke pattern with Custom IP Prefix, Azure Firewall, and Applicat

Reference Architectures: Microsoft Azure

Audience: isp6 members and Azure architects who have completed (or are about to complete) the Azure BYOIP / Custom IP Prefix onboarding and want a production-grade topology to land their /48 or /44 on. This article assumes the sizing decision from Sizing: /44 vs /48 has been made.

Last updated: May 2026


1. What's in this article

Two Azure reference architectures, both built around a real isp6 Custom IP Prefix (Azure's name for BYOIP):

  • Architecture A: a single-region production deployment in the hub-and-spoke pattern that Microsoft's Cloud Adoption Framework recommends. One Hub VNet for shared services (Azure Firewall, ER/VPN Gateway, Bastion), and spoke VNets for workloads. Custom IP Prefix in the regional location; a Public IP Prefix carved from it backs the Application Gateway frontend.
  • Architecture B: a multi-region deployment using Azure Virtual WAN. A Global Custom IP Prefix feeds one Regional Custom IP Prefix per region; each region has its own Secured Virtual Hub with Azure Firewall integrated; hub-to-hub connectivity runs over the Microsoft backbone automatically; each region advertises its own /48.

Both architectures show the IPv6 / Custom IP Prefix plane. The hundred other Azure architectural decisions (Entra ID, Defender for Cloud, Policy, Cost Management, governance) sit on top of these unchanged.

For Custom IP Prefix mechanics (signed authorisation message, commissioning states, RPKI ROA for 8075, regional vs global CIP) read Bring Your Own IPv6 to Azure.


2. Architecture A: single-region hub-and-spoke

When to choose this: one Azure region serves your traffic, one or a small set of workloads, and you want the canonical Microsoft hub-and-spoke shape that aligns with the Cloud Adoption Framework's "landing zone" design.

Azure single-region hub-and-spoke reference architecture: an isp6 /48 brought to Azure as a Global Custom IP Prefix, with a Regional Custom IP Prefix in uksouth and a Public IP Prefix backing the Application Gateway. A hub VNet hosts Azure Firewall, the ER/VPN Gateway, and Azure Bastion. Two spoke VNets host the application tiers (frontend with App Gateway, app subnet with VMSS, data subnet with Azure SQL via Private Endpoint). VNet peering connects spokes to the hub. The hub advertises the /48 to the public internet.
Architecture A: a /48 brought through Global → Regional Custom IP Prefix → Public IP Prefix, attached to a Hub VNet, peered to two spokes for workload and shared-services VNets.

2.1 The Custom IP Prefix chain

Azure splits a BYOIP advertisement across three resources, each of which sees a smaller slice of the address space:

Resource What it is What it does
Global Custom IP Prefix The top-level resource, the place where the signed authorisation message is provided once Validates ownership of the /48 (or /44). Does not in itself adv
Regional Custom IP Prefix A region-scoped child of the global CIP When commissioned in a region, Azure begins announcing the prefix from the Microsoft edge nearest that region
Public IP Prefix A regional sub-allocation (e.g. /60 for IPv6) derived from the regional CIP Hands out individual Public IP resources to workload-facing things such as Load Balance

That chain is how Azure separates "you own this prefix" (global) from "this region is announcing it" (regional CIP) from "this resource is using one address out of it" (Public IP from Prefix).

2.2 What each VNet carries

VNet IPv6 carve Purpose
Hub VNet …:0::/56 Shared services: Azure Firewall (the v6 egress point for every spoke), ER / VPN Gateway, Azure Bastion, and the Public IP Prefix that backs the Application G
Workload spoke VNet …:100::/56 Application Gateway (frontend), VMSS / AKS (app), Azure SQL via Private Endpoint (data). UDRs send ::/0 to the Firewall in the hub
Shared-services spoke VNet …:200::/56 Identity (AD DS, DNS Private Resolver), monitoring (Log Analytics ingestion endpoint via Private Endpoint), secret stores (Key Vault, Storage via PE)

VNet peering connects each spoke to the hub. Gateway Transit on the hub side plus Use Remote Gateways on each spoke means the spokes inherit the hub's VPN/ER Gateway without paying for their own.

2.3 Why the Hub is the announce point

The /48 is commissioned in uksouth, the region, not any particular VNet. Microsoft handles the BGP origin (AS 8075) at the regional edge. The hub VNet is conceptually the announce point for diagram purposes, but really the BGP edge is the regional Microsoft network; the hub VNet is just the on-ramp for the Public IP Prefix resources that consume the announced /48.

This is a subtle difference from AWS, where the per-Region advertise-byoip-cidr call ties an advertisement to a specific account and Region in a more visible way.


3. Architecture B: multi-region with Virtual WAN

When to choose this: two or more Azure regions serve your traffic, you want hub-to-hub connectivity managed for you (rather than maintaining a global VNet peering mesh), and you want a Secured Virtual Hub with Azure Firewall as the egress point per region.

Azure multi-region reference architecture using Virtual WAN: an isp6 /44 brought to Azure as a Global Custom IP Prefix, with regional Custom IP Prefixes in uksouth and eastus. A Virtual WAN hub in each region carries Azure Firewall and the regional Public IP Prefix; spoke VNets in each region connect to the local hub. Hub-to-hub connectivity uses the Microsoft backbone. Each region advertises its own /48 to the public internet.
Architecture B: a /44 with one Global Custom IP Prefix; one Regional Custom IP Prefix and one Virtual WAN Secured Hub per region; per-region /48 advertisement.

3.1 How Virtual WAN reshapes the diagram

Three things change when you move from a VNet hub to a vWAN Virtual Hub:

  • Hub creation is managed. The Virtual Hub is a Microsoft-managed resource inside the Virtual WAN, so you do not maintain a VNet for it, and the routing fabric between hubs is built and operated by Azure.
  • Hub-to-hub is automatic. Two Virtual Hubs in the same vWAN form a full mesh over the Microsoft backbone without explicit peering objects. This replaces Global VNet Peering for inter-region private traffic.
  • The Firewall sits inside the hub. With Secured Virtual Hub, Azure Firewall is deployed as part of the hub itself, and Routing Intent is the one-click way to send all spoke ::/0 traffic through it. No UDRs to hand-maintain across spokes.

3.2 One Custom IP Prefix tree, two regions

Level Region Block
Global Custom IP Prefix (none, it is global) 2001:db8:1000::/44
Regional CIP uksouth 2001:db8:1000::/48
Regional CIP eastus 2001:db8:1001::/48

The Global CIP is validated once with the ownership message; each Regional CIP then commissions a /48 from inside it, in its own region. Each Regional CIP becomes a BGP-origin event in its own region. There is no shared advertisement, and a routing problem in one region's /48 does not touch the other's.

3.3 Front Door / Global Load Balancer (optional, deliberately not drawn)

Putting Azure Front Door (or Azure Global Load Balancer) in front of the per-region Application Gateways gives clients an anycast frontend, and is strongly recommended for a real production multi-region service. It is omitted from the diagram to keep the focus on the BYOIP plane. The Front Door endpoint sits above the regional /48s; clients see the Front Door's IPs, and Front Door makes the region selection on each request.

Whether you bring those Front Door IPs from your isp6 allocation is a separate question: Front Door has historically used Microsoft-issued anycast IPs only. Check the current Azure documentation before assuming BYOIP support at the Front Door layer.


4. Azure-specific design rules

Azure-specific gotchas that shape these architectures and that don't apply to AWS or GCP:

  • The Global CIP is the ownership root. Lose it and every Regional CIP underneath has to be recreated. Treat it as a Tier-0 resource, with RBAC, locks, resource-group placement, the works.
  • A Regional CIP is the BGP-origin object. Decommissioning a Regional CIP withdraws the prefix from that region's edge. Plan deprovisioning before membership lapses or before a cutover; see BYOIP §11.
  • Public IP Prefix size on IPv6 is /60 minimum (today). You cannot carve smaller, and that is plenty: a /60 holds 16 individual Public IPs, which is usually 16 LB frontends or 16 VM NICs, more than enough per workload.
  • NSGs need explicit IPv6 rules. A rule on 0.0.0.0/0 does not cover ::/0. Audit every NSG when you turn on IPv6, and don't forget the subnet-level NSG and any NIC-level NSGs.
  • App Gateway requires EnableHttp2 and dual-stack listeners to serve both IPv4 and IPv6 clients from the same frontend; check the App Gateway SKU's current IPv6 status before committing.
  • vWAN Routing Intent is the way to enforce egress through the Firewall for Architecture B. UDR-based steering across many spokes is brittle by comparison.
  • Microsoft's ASN is 8075 for every region. The same ASN announces every one of your Regional CIPs. The regional path differentiates them, not the origin AS.

5. What's intentionally out of scope

Topic Where to read
BYOIP / Custom IP Prefix onboarding, costs, lifecycle Bring Your Own IPv6 to Azure
Sizing decision (/48 vs /44) Sizing: /44 vs /48
Internal /48 carving (bit-budget method) Planning Your isp6 Allocation
Landing-zone identity, governance, policy Cloud Adoption Framework: Azure landing zones
Operational excellence, reliability, security Microsoft Azure Well-Architected Framework

The IPv6 / Custom IP Prefix layer slots underneath those frameworks without changing their conclusions.


6. Further reading

Other reference architectures in this series

isp6 knowledge base

Microsoft documentation

IETF


7. Custom IP Prefix rollout: quick checklist

If your /48 isn't routable, a Public IP can't be drawn from your prefix, or az network custom-ip prefix show returns a state you weren't expecting, walk through this in order. Each st

The commands below use the 2001:db8::/48 documentation prefix (RFC 3849), uksouth as the region, and isp6-byoip-rg as the resource group. Substitute your real isp6 /48, target region, and resource group. Azure Custom IP Prefix CLI behaviour, return codes, and state-machine transitions are defined by Microsoft and may change, so treat the Azure references listed at the end of this section as authoritative.

Step 1: generate the signed authorisation in the isp6 console

In the subnet dashboard for the /48 you're bringing to Azure, the cloud panel produces two values using the private key from your onboarding step 9:

  • signed_message: the RSA signature over the Azure-format authorisation string (ROA + ownership message)
  • auth_certificate: the X.509 ownership certificate Azure validates the signature against

Both are required by az network custom-ip prefix create. Re-generating is idempotent and safe, so produce fresh values whenever an older signature is rejected.

Step 2: create the Custom IP Prefix (provisions and starts validation)

az network custom-ip prefix create \
  --name isp6-byoip-48 \
  --resource-group isp6-byoip-rg \
  --location uksouth \
  --cidr 2001:db8::/48 \
  --signed-message "$signed_message" \
  --auth-certificate "$auth_certificate"

Azure verifies ownership against the ROA. Validation can take minutes to hours. The prefix transitions through Provisioning → Provisioned. Until it reaches Provisioned, you cannot commission it.

For the multi-region Architecture B, add --is-parent (global parent) on the first create and then create per-region children with --custom-ip-prefix-parent referencing the parent's resource ID.

Step 3: commission the prefix (starts BGP advertisement)

az network custom-ip prefix update \
  --name isp6-byoip-48 \
  --resource-group isp6-byoip-rg \
  --commission

This is the BGP-advertisement switch. Until it runs, traffic destined for your prefix won't reach Azure even though the prefix exists. The commissionedState transitions Provisioned → Commissioning → Commissioned. Reversible via --decommission.

Step 4: verify with the describe call

az network custom-ip prefix show \
  --name isp6-byoip-48 \
  --resource-group isp6-byoip-rg \
  --query '{cidr:cidr, provisioningState:provisioningState, commissionedState:commissionedState, publicIpPrefixes:publicIpPrefixes[].id}' \
  -o jsonc

az network custom-ip prefix list \
  --resource-group isp6-byoip-rg \
  -o table

Expected output on a healthy rollout:

  • provisioningState: Succeeded means the ARM-level resource is in place.
  • commissionedState: Commissioned means BGP advertisement is live. Anything else (Provisioned, Commissioning, Decommissioning, Decommissioned, CommissionedNoInternetAdvertise) mea
  • The cidr field matches your isp6 /48 exactly (no trimming, no auto-aggregation).

Public IP Prefixes drawn from this Custom IP Prefix appear under publicIpPrefixes. Until at least one Public IP Prefix is created and a Public IP allocated from it, no Azure resource is actually using your /48.

Common failure modes

Symptom Likely cause
az network custom-ip prefix create returns InvalidAuthorizationMessage Stale or mis-copied signed_message / auth_certificate. Re-generate in the isp6 console and retry.
Stuck in Provisioning for >2h Microsoft-side validation queue is slow, or your ROA doesn't list ASN 8075 (the Microsoft ASN).
--commission returns CommissionFailed Validation completed but BGP-side onboarding failed. Open a Microsoft support case with the prefix resource ID; the customer cannot self-dia
Prefix not reachable from the public internet commissionedState is not yet Commissioned, or no Public IP from this prefix has been associated with a frontend (Application Gateway, Load Balancer, Azure Firewall).
Cannot create a Public IP Prefix from the CIP The CIP is Provisioned but not Commissioned. Commission first, then create derived Public IP Prefixes.

Authoritative references

Microsoft owns this lifecycle end-to-end. If anything in this checklist disagrees with Microsoft's documentation, Microsoft wins:


This document is provided for informational purposes. Protocol specifications and cloud provider behaviour are subject to change. Consult the linked RFCs and vendor documentation for authoritative, up-to-date information before making architectural decisions.