An Azure service that enables the connection of on-premises networks to Azure through site-to-site virtual private networks.
Hello Trevor Reed,
It sounds like you’ve done the right high-level setup (LNG BGP peer IP set to the APIPA address, connection binding set, tunnel shows Connected), but BGP never establishes and list-bgp-peer-status keeps reporting the Azure “localAddress” as the default GatewaySubnet IP (for example 10.91.1.254) instead of the custom APIPA BGP address (169.254.21.2).
A couple things from Microsoft’s documented behavior are important here:
1) Azure only uses the custom Azure APIPA BGP when the LNG peer IP is APIPA
Azure VPN Gateway’s behavior is:
- By default, Azure assigns a private IP from GatewaySubnet as the Azure BGP peer IP.
- The custom Azure APIPA BGP address is used only if the corresponding Local Network Gateway has an APIPA address configured for the on-premises BGP peer.
- If the LNG peer is not APIPA (or doesn’t match as expected), the gateway “reverts” to the private
GatewaySubnetaddress.
So the symptom you’re seeing (Azure localAddress shown as the GatewaySubnet IP) generally points to: Azure doesn’t consider the configured LNG BGP peer as APIPA for that session, even if the portal/CLI you checked suggests it is. This is especially relevant with APIPA because there are strict matching expectations.
2) APIPA peer / BGP sessions are expected to be initiated by the on-premises device
Microsoft notes a key limitation for APIPA-based BGP on VPN Gateway:
- When APIPA is used as BGP addressing, Azure does not initiate BGP peering sessions with APIPA source IPs.
- The on-premises VPN device must initiate the BGP session.
So “tunnel Connected but BGP Connecting indefinitely with 0 messages” is consistent with the on-premises side not successfully reaching/starting the session (common culprits: reachability/routing to the Azure APIPA peer, TCP/179 allowed, no NAT, correct ASN/OPEN expectations, etc.).
3) Common causes when APIPA BGP adjacency stays in Connecting
Based on the troubleshooting guidance for BGP on Azure VPN Gateway, the most frequent APIPA/BGP blockers are:
- Incorrect Azure BGP peer IP (APIPA mismatch) (even off-by-one cases, wrong side reversed, or not actually taking the custom APIPA)
- ASN mismatch (Azure default ASN is 65515 unless overridden)
- APIPA reachability issues inside the tunnel
- NAT applied to APIPA traffic (should be none for APIPA BGP)
- Missing static route to Azure’s APIPA via the tunnel interface on the on-premises device
- Local/Remote peer reversed (Azure = local in APIPA terms; on-premises = remote, as per the doc guidance)
4) Also double-check the APIPA address pairing rules
From the APIPA selection guidance:
- APIPA addresses should be in the Azure-reserved VPN range (169.254.21.0 – 169.254.22.255).
- If you use a
/30, AWS uses the first IP and Azure uses the second (the doc includes an example of169.254.21.1vs169.254.21.2). - If multiple APIPA BGP peer addresses are configured, you must configure all Connection objects to match them; otherwise Azure can fall back to the first APIPA in the list (this is an important “gotcha” if you have multiple sessions).
Even though your case sounds like single-peer, it’s still worth confirming you don’t have multiple APIPA peers configured on the gateway and only bound one connection correctly.
Can you please update us if the action plan provided was helpful?
Should there be any follow-up questions or concerns, please let us know and we shall try to address them.
If these answer your question, click "Upvote" which may be beneficial to other community members reading this thread.