Azure DNS and Load Balancer: AZ-104 Networking Guide
Azure DNS and Azure Load Balancer are the two Azure services that handle name resolution and Layer 4 traffic distribution for virtual networks. Azure DNS hosts public zones that answer the internet for a domain you own, and private zones that resolve names only for the virtual networks linked to them, including the privatelink zones behind private endpoints. Azure Load Balancer spreads TCP and UDP flows across backend VMs, either from a public IP (public load balancer) or a private IP (internal load balancer). For AZ-104 you configure both and troubleshoot a load balancer that has stopped distributing traffic. This lesson covers delegation and record types including alias records, Azure-provided and custom DNS, private zone links and autoregistration, private endpoint and hybrid resolution, split-horizon DNS, load balancer components and rule settings, the Standard SKU and zones, outbound connectivity, and probe-based troubleshooting.
On this page13 sections
- Public Azure DNS zones: hosting a domain
- Record sets and alias records
- Name resolution inside a VNet: Azure-provided DNS and custom DNS servers
- Private DNS zones: resolving VM names inside a VNet
- Private endpoint DNS and hybrid resolution
- Split-horizon DNS with a same-named private zone
- Azure Load Balancer: a Layer 4 distributor
- Load-balancing rule settings: HA ports, floating IP and idle timeout
- Internal versus public load balancer
- Load balancer SKUs: Basic versus Standard
- Outbound connectivity and SNAT
- Choosing the right service: Load Balancer, Application Gateway, or global
- Troubleshooting load balancing: the failing health probe
- Host a domain in a public Azure DNS zone, delegate it from the registrar and delegate child zones with NS record sets
- Choose between A, CNAME, MX and alias record sets, including at the zone apex
- Configure private DNS zones with virtual network links and autoregistration, and explain their limits across peered VNets and with custom DNS servers
- Configure DNS for private endpoints and for on-premises clients through Azure DNS Private Resolver, and build split-horizon DNS
- Configure an internal or public Standard load balancer: frontends, backend pools, probes, load-balancing and inbound NAT rules, session persistence, HA ports, floating IP and idle timeout
- Provide outbound connectivity for backend VMs with a NAT gateway or outbound rules, and fix SNAT exhaustion
- Troubleshoot load balancing with probe behaviour, NSG rules and Azure Monitor metrics
- Choose between Load Balancer, Application Gateway, Traffic Manager and Front Door, including Traffic Manager routing methods
Public Azure DNS zones: hosting a domain
A public DNS zone in Azure DNS hosts the records for a domain you already own, such as contoso.com, on Microsoft's global name servers and answers queries from anywhere on the internet. Azure DNS hosts records; it does not sell domain names.
To make Azure DNS authoritative you delegate the domain. When you create the zone, Azure assigns it four name servers. At the domain registrar you replace the domain's NS records with those four names. Copying every record into the Azure zone changes nothing on its own: until the registrar's NS records point at Azure, internet resolvers keep asking the old DNS host.
A child zone such as partners.contoso.com is delegated one level down, inside Azure DNS itself. Create the child zone, then in the parent zone contoso.com create an NS record set named after the child label (partners) that lists the child zone's four name servers. The registrar is not involved; it only delegates the top-level domain.
Record sets and alias records
A record set is all the records of one type for one name in a zone. The types you must recognise:
- A / AAAA — map a name to an IPv4 / IPv6 address.
- CNAME — map a name to another host name. A name that holds a CNAME can hold no other record.
- MX — route the domain's email to a mail server host name, which itself needs an A (or AAAA) record.
- TXT — free text, used for domain verification and SPF.
- NS / SOA — delegation and zone authority (created with the zone). Azure DNS also supports SRV, PTR and CAA.
The zone apex (the bare domain, written @) already holds the NS and SOA records, so DNS forbids a CNAME there. That is the problem alias record sets solve. An alias record set is an A, AAAA or CNAME record set that points at an Azure resource instead of a fixed value, and Azure DNS keeps the answer in step with that resource. Supported alias targets are a Standard public IP address, an Azure Traffic Manager profile, an Azure CDN endpoint, an Azure Front Door endpoint, and another record set in the same zone.
Alias records give you two things. First, an alias A/AAAA record set can sit at the apex and still follow a resource whose address changes. Second, they prevent dangling records: when the target resource is deleted, the alias record set becomes empty instead of pointing at an address someone else could later be assigned. An alias CNAME follows the same no-CNAME-at-apex rule as any CNAME.
| Need | Record to use |
|---|---|
Subdomain that follows another host name (for example an App Service *.azurewebsites.net name) | CNAME (App Service is not an alias target) |
| Apex or subdomain that follows a Standard public IP, Traffic Manager, CDN or Front Door | Alias A/AAAA (or alias CNAME on a subdomain) |
| Fixed IPv4 address | Ordinary A record |
| Mail for the domain | MX pointing to a host name with an A record |
Name resolution inside a VNet: Azure-provided DNS and custom DNS servers
Every virtual network starts with Azure-provided DNS: VMs query the platform resolver at the virtual IP 168.63.129.16, which resolves the host names of VMs in the same virtual network with no configuration, plus public internet names. It works only within one VNet, uses an Azure-assigned suffix you cannot change, and does not resolve across peered networks.
The VNet's DNS servers setting replaces that resolver with custom DNS servers (for example domain controllers). VMs learn their DNS servers through DHCP, so after you change the setting, existing VMs pick it up only after a DHCP lease renewal or a restart; new VMs get it straight away.
Custom DNS servers can still answer for Azure private DNS zones, but only through the platform resolver. Two things are required: the servers forward those queries to 168.63.129.16, and the private zone is linked to the virtual network the DNS servers run in, because the platform resolver answers from the zones linked to the querying VM's network. Linking the zone only to the client VNets is not enough when the clients ask custom servers in another VNet.
Private DNS zones: resolving VM names inside a VNet
A private DNS zone resolves a custom domain name such as corp.internal inside and between virtual networks, with nothing exposed to the internet. A zone answers only for virtual networks that have a virtual network link to it.
Peering does not share DNS zones. Peered VNets can reach each other's IP addresses, but a VNet that is not linked to the zone cannot resolve its names. Every VNet whose VMs must resolve the zone needs its own virtual network link.
Autoregistration is a property of each virtual network link, not of the zone. On a link with autoregistration enabled, Azure creates an A record for every virtual machine in that VNet, updates it when the IP changes and removes it when the VM is deleted. Its limits matter:
- One registration zone per VNet. A virtual network can have autoregistration enabled on only one private zone. It can still be linked to many other zones as resolution-only links. To move registration to another zone, switch the existing link to resolution-only first.
- Virtual machines only, registered from the VM's primary network interface. An internal load balancer frontend, a private endpoint or any other resource needs a manual A record.
- A link without autoregistration only resolves; you add the records yourself.
An Azure DNS Private Resolver inbound endpoint only answers queries (for example from on-premises) using the zones linked to its VNet. It never creates records in a private zone; that is autoregistration's job.
Private endpoint DNS and hybrid resolution
A private endpoint gives a PaaS resource a private IP in your VNet, and DNS is what sends clients to that IP while they keep using the normal service name. When the endpoint is created, the service's public name gets a CNAME into a service-specific privatelink zone: for example sql01.database.windows.net → sql01.privatelink.database.windows.net. You create the matching private DNS zone (Microsoft's recommended names include privatelink.database.windows.net for Azure SQL Database, privatelink.blob.core.windows.net for Blob Storage and privatelink.vaultcore.azure.net for Key Vault), hold the endpoint's A record in it, and link it to every VNet that consumes the endpoint. Linked VNets resolve the CNAME to the private IP; internet clients, which cannot see the private zone, still get the public address.
Keep the standard FQDN in connection strings, as Microsoft recommends. Connecting to the endpoint's IP address breaks TLS certificate name validation, because the certificate is issued for the service's names, not for an IP; connecting to the privatelink name can also fail, depending on whether the service's certificate covers it. The standard FQDN works both inside the linked VNets and from the internet.
On-premises clients cannot query 168.63.129.16; it is reachable only from inside Azure. Deploy an Azure DNS Private Resolver in a VNet linked to the privatelink zones, and on the on-premises DNS servers add a conditional forwarder for the public service zone (for example database.windows.net) pointing at the resolver's inbound endpoint IP. Key Vault needs forwarders for both of its public zones, vault.azure.net and vaultcore.azure.net. The opposite direction, Azure VMs resolving on-premises names, uses the resolver's outbound endpoint with a forwarding ruleset.
| Resolver part | Direction | Use |
|---|---|---|
| Inbound endpoint | On-premises → Azure | Target of on-premises conditional forwarders; answers from zones linked to its VNet |
| Outbound endpoint + forwarding ruleset | Azure → on-premises | Sends queries for on-premises domains to on-premises DNS servers |
Split-horizon DNS with a same-named private zone
Split-horizon DNS means one name returns different answers to internal and external clients. In Azure you build it by creating a private zone with the same name as the public zone (for example contoso.com) and linking it to the VNets that need the internal answers. Internet clients keep resolving from the public zone; linked VNets resolve from the private zone.
The private zone shadows the public one completely for linked VNets: a name missing from the private zone returns NXDOMAIN there; the query does not fall back to the public zone. So the private zone must hold every name those VNets need, including copies of public names they still use. The fallback to internet option (the NxDomainRedirect resolution policy on a virtual network link) does not help here: it is supported only for Private Link (privatelink.*) zones, where it lets a VNet resolve the public address of a resource that has no private endpoint record.
Azure Load Balancer: a Layer 4 distributor
Azure Load Balancer distributes TCP and UDP flows across a pool of backend virtual machines or scale-set instances at Layer 4, using IP addresses and ports. It does not read URLs, host headers or cookies, so it suits any TCP or UDP workload, not just web traffic.
Its building blocks:
- Frontend IP configuration — the address clients connect to: a public IP (public load balancer) or a private IP from a subnet (internal load balancer).
- Backend pool — the VMs or scale-set instances that receive traffic.
- Health probe — decides which pool members are healthy enough to receive new connections.
- Load-balancing rule — maps one frontend IP and port to a backend port on the pool, using a probe. A frontend and a pool alone forward nothing; you need a rule and a probe.
- Inbound NAT rule — forwards a frontend port to one specific VM (for example RDP or SSH to a single machine), whereas a load-balancing rule spreads a port across the whole pool.
- Outbound rule — configures outbound SNAT for the pool (see the outbound section).
An ordinary load-balancing rule maps a single frontend port to a backend port; it takes no port ranges. Balancing every port therefore needs HA ports rather than a rule per port.
Session persistence on the rule controls which flows stick to one backend:
| Setting | Hash | Effect |
|---|---|---|
| None (default) | Five-tuple: source IP, source port, destination IP, destination port, protocol | A new connection from a new source port can land on any backend |
| Client IP | Two-tuple: source IP, destination IP | All connections from one client IP go to the same backend |
| Client IP and protocol | Three-tuple: adds the protocol | Same, kept separately per protocol |
Cookie-based affinity is a Layer 7 feature of Application Gateway, not of Azure Load Balancer.
Load-balancing rule settings: HA ports, floating IP and idle timeout
Three rule settings change how flows are handled, and each solves a specific problem.
HA ports is a load-balancing rule with port 0 and protocol All, available on an internal Standard load balancer. One rule balances every TCP and UDP flow on every port. Its main use is high availability for network virtual appliances (firewalls): route tables send traffic (for example 0.0.0.0/0) to the internal frontend IP as the next hop, and the load balancer spreads it across the NVA instances whatever the destination port.
Floating IP (direct server return) leaves the frontend IP as the packet's destination instead of rewriting it to the backend VM's IP. You need it when several frontends must reach the same backend port on the same VMs (for example two listeners both on port 443): enable floating IP on each rule and configure each frontend IP on a loopback interface in the guest OS so the application can bind to it. If each frontend maps to a different backend port, ordinary rules work without it. SQL Server Always On listeners behind an internal load balancer are the classic floating IP case.
Idle timeout closes TCP flows with no traffic after a set time: 4 minutes by default, configurable up to 100 minutes. Connections that silently die after a few idle minutes point to this setting (or to TCP keep-alives in the application). Enabling TCP reset on idle makes the load balancer send a TCP RST to both ends when the timeout hits, so applications learn the connection is gone instead of hanging.
Internal versus public load balancer
The frontend IP type decides who can reach a load balancer: a public IP frontend makes it a public load balancer reachable from the internet; a private IP frontend makes it an internal load balancer, never reachable from the internet. Pick the type by where the callers are.
| Aspect | Public load balancer | Internal load balancer |
|---|---|---|
| Frontend IP | Standard public IP | Private IP from a subnet |
| Reachable from | The internet | The VNet, peered VNets, and on-premises over VPN or ExpressRoute |
| Typical use | Internet-facing tier | Private app or database tier, NVA high availability (HA ports) |
| Outbound internet for backends | Through outbound rules | None — add a NAT gateway |
Both use the same frontend, backend pool, probe and rule components; only the frontend differs. An internal load balancer gives its backend VMs no internet access. A common low-effort pattern is an internal load balancer for private inbound traffic plus a NAT gateway on the backend subnet for outbound.
One documented limitation: a VM in an internal load balancer's backend pool cannot reach that load balancer's own frontend. If the flow is sent back to the same VM it fails, so a backend that needs to call the service must reach it another way (a different load balancer, or the other backends directly).
Load balancer SKUs: Basic versus Standard
Standard is the SKU for every new public or internal load balancer. Basic Load Balancer was retired on 30 September 2025, and Basic public IP addresses were retired at the same time; existing Basic deployments must be upgraded to Standard. The third SKU, Gateway (Gateway Load Balancer), is a special-purpose SKU that chains third-party NVAs transparently in front of a Standard public load balancer's frontend or a VM's instance-level public IP configuration; it is not used to distribute application traffic.
What defines Standard:
- Secure by default. A Standard public IP and a public Standard load balancer are closed to inbound internet traffic until a network security group on the backend subnet or NIC allows it; a public frontend whose backends have no NSG rule allowing the traffic serves nothing. For an internal load balancer, traffic from inside the virtual network is already allowed by the NSG default rule
AllowVNetInBound, unless a custom rule denies it. - Standard public IPs on public frontends.
- Availability zones and the load balancer SLA.
- HA ports, outbound rules, larger backend pools and Azure Monitor multi-dimensional metrics.
A frontend's zone setting decides what survives a zone failure:
| Frontend | Behaviour in a zone outage |
|---|---|
| Zone-redundant (all zones) | Keeps serving through any single zone failure; traffic goes to backends in surviving zones |
| Zonal (one zone) | Fails with its zone, even if backends in other zones are healthy |
For a single address that must survive the loss of any one zone, use a Standard load balancer with a zone-redundant frontend and backends spread across zones.
Outbound connectivity and SNAT
Backend VMs without a public IP reach the internet through source NAT (SNAT) provided by one of a fixed set of methods, and when several apply Azure uses the highest in this order:
- A user-defined route that sends
0.0.0.0/0to an NVA or virtual network gateway (the traffic leaves through that device). - NAT gateway on the subnet.
- An instance-level public IP on the VM's NIC.
- Outbound rules on a public Standard load balancer (or load-balancing-rule SNAT).
- Default outbound access (implicit, not recommended).
So a NAT gateway on the subnet takes over new outbound connections even from VMs that have their own public IP or sit behind load balancer outbound rules. Default outbound access is being phased out: new virtual networks created with API versions released after 31 March 2026 (and through the Azure portal) default to private subnets, with no implicit outbound access, so VMs there need an explicit method. Existing virtual networks are unchanged, and deployments that use an older API version (for example an older template) keep the old default unless the subnet is set to private.
Outbound rules only configure SNAT, need a public frontend IP, and therefore exist only on a public Standard load balancer, never on an internal frontend. To rely on them, set the load-balancing rule to not use its own outbound SNAT, then define the outbound rule with its frontend IPs and port allocation.
SNAT port exhaustion shows up as intermittent outbound connection failures under load and as failed connections in the SNAT Connection Count metric. Fix it by adding outbound capacity: a NAT gateway (the recommended method, with a large port inventory per public IP) or outbound rules with more frontend public IPs and manual port allocation per backend instance.
The Microsoft-recommended way to give VMs without public IPs outbound access is a NAT gateway on the subnet; outbound rules on a public Standard load balancer also work when that load balancer already fronts the VMs.
Choosing the right service: Load Balancer, Application Gateway, or global
Azure Load Balancer is the right distributor for any TCP or UDP traffic within one region, including proprietary non-HTTP protocols. The other services either speak only HTTP/S or work through DNS.
| Service | Layer | Scope | Best for |
|---|---|---|---|
| Azure Load Balancer | Layer 4 (TCP/UDP) | Regional | Any TCP/UDP traffic within a region |
| Application Gateway | Layer 7 (HTTP/S) | Regional | URL-path routing, WAF, TLS termination |
| Traffic Manager | DNS | Global | DNS-based routing across regions; not in the data path |
| Azure Front Door | Layer 7 (HTTP/S) | Global | Global web acceleration, WAF, CDN |
Application Gateway routes on HTTP content: path-based rules send /images/* and /video/* to different backend pools, and multi-site (host-based) listeners serve several host names, such as contoso.com and fabrikam.com, from one gateway. Traffic Manager answers DNS queries with the endpoint chosen by its routing method: priority (a primary endpoint with failover to backups), weighted (split traffic by weight, for example for a gradual rollout), performance (the endpoint with the lowest network latency for the client), geographic (by the client's location, for data sovereignty or localisation), plus multivalue and subnet. Because clients connect to the endpoint directly after the DNS answer, Traffic Manager works for any protocol but cannot inspect or terminate traffic.
A workload on a custom TCP port, a UDP service or a database tier therefore needs Azure Load Balancer; Application Gateway and Front Door cannot carry it because they only handle HTTP and HTTPS.
Troubleshooting load balancing: the failing health probe
When a load balancer stops distributing traffic, start with the health probe: the load balancer sends new flows only to instances whose probe succeeds. A failing instance is taken out of rotation. If every instance fails, no new flows are sent anywhere; a Standard load balancer keeps established TCP flows to the instances running, but new connections fail.
How probes decide health. A TCP probe succeeds when the TCP handshake completes on the probe port. An HTTP or HTTPS probe succeeds only when the probed path returns HTTP 200; any other status, including a 301 or 302 redirect or a 404, marks the instance down at once. The probe threshold (consecutive failures) applies only to probes that time out.
Check in this order:
- Probe port and path match what the application listens on and serves.
- NSG rules. Probes come from
168.63.129.16, carried by theAzureLoadBalancerservice tag. Every NSG includes the default rule AllowAzureLoadBalancerInBound at priority 65001, but a custom deny-all rule with a lower priority number (for example 4000) is evaluated first and blocks probes, so every backend goes down. Allow theAzureLoadBalancertag on the probe port above the deny. Remember that Standard is secure by default: the NSG must also allow the client traffic itself. - The backend — VM running, service started, guest firewall open on the probe port.
- Topology limits — a backend calling its own internal load balancer's frontend fails by design.
Azure Monitor metrics separate platform problems from backend problems:
| Metric | What it shows | How to read it |
|---|---|---|
| Data Path Availability | Whether the frontend and the Azure path to the backend pool are working | Low: a platform or frontend problem, not one VM |
| Health Probe Status | Probe success per backend instance | Split by Backend IP address to find which instances are down |
| SNAT Connection Count | Outbound SNAT connections by state | Failed connections indicate SNAT port exhaustion |
Data path healthy but one instance failing its probe means the cause is inside that VM; a shared setting such as the probe definition or a subnet NSG would fail every instance.
Scenario: a web tier calls an internal load balancer in front of an app tier, and requests suddenly fail. Health Probe Status shows every instance down while Data Path Availability is normal. The app team moved the service to port 8080, but the probe still targets port 80. Point the probe at 8080 and confirm the NSG allows the AzureLoadBalancer tag on 8080; the instances return to the pool and traffic flows again.
Tip. Scenarios turn on precise DNS and load balancer behaviour. For DNS: registrar NS records versus copying records into the zone; NS record sets for child zones; CNAME versus alias records and the apex rule; peering not sharing private zones; autoregistration being per link, one zone per VNet and VMs only; privatelink zone names, keeping the service FQDN, and on-premises forwarding to a DNS Private Resolver inbound endpoint; split-horizon zones with no public fallback; and custom DNS servers needing a zone link and forwarding to 168.63.129.16. For load balancing: choosing internal or public by where callers are, zone-redundant versus zonal frontends, session persistence modes, inbound NAT versus load-balancing rules, HA ports for NVAs, floating IP for shared backend ports, idle timeout, outbound access via NAT gateway or outbound rules, and diagnosing probes through NSG priorities, HTTP 200 requirements and Azure Monitor metrics. Service-choice items contrast Load Balancer with Application Gateway, Traffic Manager and Front Door. Many items add a constraint such as least administrative effort or no public IPs on NICs.
- A public Azure DNS zone becomes authoritative only when the registrar's NS records point at its four Azure name servers; child zones are delegated with an NS record set in the parent zone.
- The apex cannot hold a CNAME: use an alias A/AAAA record set for a Standard public IP, Traffic Manager, CDN or Front Door; alias records empty themselves when the target is deleted. App Service subdomains use a CNAME.
- Azure-provided DNS (168.63.129.16) resolves VM names within one VNet only; after changing a VNet's DNS servers, existing VMs need a DHCP renewal or restart.
- A private zone resolves only for linked VNets — peering shares nothing. Autoregistration is per link, one registration zone per VNet, VMs only; everything else needs manual records.
- Private endpoints use service-specific privatelink zones linked to the consuming VNets; clients keep the normal FQDN, and on-premises clients forward the public service zone to a DNS Private Resolver inbound endpoint.
- A same-named private zone overrides the public zone for linked VNets with no fallback; fallback to internet works only for Private Link zones.
- Basic Load Balancer was retired on 30 September 2025. Standard is secure by default (an NSG must allow inbound internet traffic to a public frontend) and needs a zone-redundant frontend to survive a zone failure.
- HA ports (internal Standard, port 0, protocol All) suits NVAs; floating IP lets several frontends share a backend port; idle timeout defaults to 4 minutes, up to 100.
- An internal load balancer gives backends no internet access: add a NAT gateway (preferred, and it wins over instance public IPs and outbound rules) or use outbound rules on a public Standard load balancer.
- Pick the distributor by layer and scope: Load Balancer for any TCP/UDP in one region, Application Gateway for HTTP path- or host-based routing and WAF in one region, Traffic Manager for DNS-based routing across regions (priority, weighted, performance, geographic), Front Door for global HTTP/S.
- Probes need a TCP handshake or an HTTP 200; AllowAzureLoadBalancerInBound (65001) loses to a lower-numbered custom deny; use Health Probe Status split by backend IP and Data Path Availability to locate the fault.
Frequently asked questions
How do I delegate a domain to Azure DNS?
Create a public DNS zone for the domain; Azure assigns it four name servers. At your domain registrar, replace the domain's NS records with those four names. Until that change propagates, internet resolvers keep querying the old DNS host, even if the Azure zone already holds every record. Subdomains hosted as separate zones are delegated inside Azure DNS by adding an NS record set for the child label in the parent zone.
What is an alias record in Azure DNS?
An alias record set is an A, AAAA or CNAME record set that points at an Azure resource instead of a fixed value: a Standard public IP, a Traffic Manager profile, an Azure CDN endpoint, an Azure Front Door endpoint or another record set in the same zone. Azure DNS keeps the answer in step with the resource, and empties the record set if the resource is deleted, which prevents dangling records. An alias A or AAAA record set can sit at the zone apex, where a CNAME is not allowed.
Why can't my peered virtual network resolve names in a private DNS zone?
Virtual network peering does not share private DNS zones. A private zone answers only for virtual networks that have their own virtual network link to it, so add a resolution-only link for the peered VNet. Enable autoregistration on that link only if its VMs should register in this zone, and remember a VNet can autoregister in only one private zone.
How do on-premises clients resolve an Azure private endpoint?
On-premises DNS servers cannot reach Azure's resolver at 168.63.129.16. Deploy an Azure DNS Private Resolver in a virtual network linked to the privatelink private DNS zone, then add a conditional forwarder on the on-premises DNS servers for the public service zone, such as database.windows.net, pointing at the resolver's inbound endpoint IP. Clients keep using the normal service name, which resolves through the privatelink CNAME to the private IP.
What is HA ports on Azure Load Balancer?
HA ports is a load-balancing rule with port 0 and protocol All on an internal Standard load balancer. A single rule balances every TCP and UDP flow on every port, which is why it is used to make network virtual appliances such as firewalls highly available: route tables send traffic to the internal frontend IP, and the load balancer spreads it across the appliance instances.
How do VMs behind an internal load balancer reach the internet?
They don't through the internal load balancer; it provides no outbound connectivity. Attach a NAT gateway to the backend subnet, which Microsoft recommends and which takes precedence over instance-level public IPs and load balancer outbound rules, or add the VMs to a public Standard load balancer with outbound rules. New virtual networks created through the portal or with API versions released after 31 March 2026 have private subnets by default, so VMs there have no implicit outbound access.
Why is my Azure Load Balancer not distributing traffic?
Usually because the health probe is failing. The load balancer sends new flows only to instances that pass the probe, so if all fail, new connections fail. Check that the probe port and path match the application and that an HTTP probe gets a 200 rather than a redirect, that no custom NSG deny rule with a lower priority number than AllowAzureLoadBalancerInBound (65001) blocks the AzureLoadBalancer tag, and that the VM and service are running. Health Probe Status split by backend IP shows which instances are down.
What is the difference between an internal and a public load balancer?
The frontend IP type. A public load balancer has a Standard public IP frontend and takes traffic from the internet. An internal load balancer has a private IP frontend and is reachable only from its virtual network, peered networks and on-premises networks connected by VPN or ExpressRoute, never from the internet. Both use the same backend pool, probe and rule components.
Source
This lesson covers the "Implement and manage virtual networking" domain of the official AZ-104 exam guide. Vendors revise their guides — check the source for the current version.
- Microsoft AZ-104 study guide — Microsoft Learn
Sign up free to mark lessons complete, bookmark topics and track your exam readiness.