Default vs Custom VNets in Azure

When you spin up your first Azure VM, the portal quietly creates a VNet for you. That convenience can become a trap. Knowing the difference between what Azure creates automatically and what you build intentionally separates beginner setups from production-ready infrastructure.

What the default VNet looks like

When you create a resource like a virtual machine through the Azure portal and you don’t select an existing VNet, Azure creates one for you automatically. This is called the default VNet.

The default VNet typically uses the address space 10.0.0.0/16 and contains a single subnet called default with the range 10.0.0.0/24. Azure assigns it a generic name like myVNet or derives it from the VM name.

The default VNet is functional. Resources inside it can communicate with each other and reach the internet. For learning and quick experiments, it works fine. The problems start when you try to build something real on top of it.

Why the default VNet causes problems

The default VNet is built for convenience, not design. Several characteristics make it unsuitable for production:

Naming is inconsistent. Azure names the VNet after whatever you were creating when it got generated. You can end up with VNets named after VMs, which tells you nothing about the network’s purpose or region.

Address space conflicts. The default 10.0.0.0/16 is the most common choice everyone makes. If you later want to peer this VNet with another — or connect it to your on-premises network — there is a high chance of address overlap. Overlapping addresses cannot be peered.

No subnet segmentation. Everything lands in one default subnet. Web servers, databases, and management tools all share the same network segment. You cannot apply different security rules to different tiers without creating additional subnets.

No custom DNS. The default VNet uses Azure’s default DNS (168.63.129.16). If you have on-premises DNS servers or need split-horizon DNS, you need to configure that on a custom VNet.

Inspecting the default VNet with CLI

You can list all VNets in your subscription to see what has been auto-created:

az network vnet list --output table

This shows every VNet across all resource groups. Look for ones with generic names and a single default subnet. Show details on a specific one:

az network vnet show \
  --name myVNet \
  --resource-group myResourceGroup \
  --output json

List the subnets inside it:

az network vnet subnet list \
  --vnet-name myVNet \
  --resource-group myResourceGroup \
  --output table

Check if any resources are connected to the default subnet before you decide whether to keep or replace it:

az network vnet subnet show \
  --vnet-name myVNet \
  --resource-group myResourceGroup \
  --name default \
  --query "ipConfigurations" \
  --output table

Designing a custom VNet

A custom VNet starts with a deliberate plan. Before you run a single CLI command, answer these questions:

What environment is this for? Production, staging, and development should each have their own VNet. This ensures complete isolation.

What region? VNets are regional. Place the VNet in the same region as the resources that will use it.

What address space? Pick a range that does not conflict with other VNets you own or your on-premises network. If your on-premises uses 10.1.0.0/16, don’t use that range in Azure.

What subnets do you need? At minimum, consider a web tier subnet, an application tier subnet, a data tier subnet, and a management subnet.

Building a custom VNet step by step

Here is a complete example that creates a well-structured VNet for a three-tier application:

# Create a dedicated resource group
az group create \
  --name rg-prod-networking \
  --location eastus

# Create the VNet with a unique address space
az network vnet create \
  --name vnet-prod-eastus-001 \
  --resource-group rg-prod-networking \
  --location eastus \
  --address-prefixes 10.10.0.0/16

# Web tier subnet
az network vnet subnet create \
  --name snet-web \
  --resource-group rg-prod-networking \
  --vnet-name vnet-prod-eastus-001 \
  --address-prefixes 10.10.1.0/24

# Application tier subnet
az network vnet subnet create \
  --name snet-app \
  --resource-group rg-prod-networking \
  --vnet-name vnet-prod-eastus-001 \
  --address-prefixes 10.10.2.0/24

# Data tier subnet
az network vnet subnet create \
  --name snet-data \
  --resource-group rg-prod-networking \
  --vnet-name vnet-prod-eastus-001 \
  --address-prefixes 10.10.3.0/24

# Management subnet for jump servers and tools
az network vnet subnet create \
  --name snet-mgmt \
  --resource-group rg-prod-networking \
  --vnet-name vnet-prod-eastus-001 \
  --address-prefixes 10.10.4.0/24

Update the VNet to use a custom DNS server (for example, an on-premises DNS at 192.168.1.10):

az network vnet update \
  --name vnet-prod-eastus-001 \
  --resource-group rg-prod-networking \
  --dns-servers 192.168.1.10

Default vs custom: side by side

FeatureDefault VNetCustom VNet
NamingAuto-generated, often meaninglessYou choose, meaningful to your org
Address space10.0.0.0/16 (very common, conflicts likely)You choose, planned for your environment
SubnetsOne subnet called “default”Multiple purpose-specific subnets
DNSAzure default DNS onlyCan specify custom DNS servers
SecurityNo NSGs by defaultNSGs applied per subnet from the start
Peering readinessLow (likely conflicts)High (planned address space)
Best forQuick tests and learningAll production and staging workloads

Moving from default to custom

If you already have resources running in a default VNet and you want to migrate them to a properly designed custom VNet, the process takes planning. Azure does not let you move a VM’s network interface from one VNet to another directly.

The standard approach is to deallocate the VM, capture its disk as a managed disk snapshot, create a new VM in the custom VNet using that snapshot, and then delete the old VM. For production workloads, plan for a maintenance window.

Note

Some Azure services — like Azure Kubernetes Service — require specific subnet configurations that the default subnet doesn’t provide. Always create a custom VNet before deploying AKS or other advanced services.

The sooner you move to a custom VNet design, the less painful the migration will be. Doing this with one VM is straightforward. Doing it with 40 VMs and three load balancers is a project.

Common mistakes

  1. Building production on the default VNet. The default VNet is fine for learning. Using it for production means you are building on a foundation that was never designed for your workload. Naming, segmentation, and DNS are all wrong from the start.
  2. Picking the same address space as everyone else. 10.0.0.0/16 is the default everyone uses. If you ever need to peer two VNets or connect to on-premises, overlapping addresses will block you. Pick a unique range from the beginning.
  3. Not planning subnets before deploying services. You cannot change a subnet’s address range after resources are in it without destroying and recreating the subnet. Decide your subnet layout before deploying VMs or managed services.

Frequently asked questions

What is the default VNet in Azure?

The default VNet is automatically created in each region when you first deploy a resource like a VM through the portal without specifying an existing VNet. It uses the address space 10.0.0.0/16 with a single default subnet.

Can I use the default VNet in production?

Technically yes, but it is not recommended. The default VNet has a shared address space, no custom DNS, and no intentional subnet segmentation. Production workloads need VNets designed around your specific security and routing requirements.

How do I delete the default VNet?

You can delete it like any other VNet using the portal or CLI: az network vnet delete --name myVNet --resource-group myResourceGroup. However, first make sure no resources are still attached to it.

Last verified: 19 March 2026 Cloud services change frequently. Verify details against official documentation before making infrastructure decisions.