The issue
I have an issue with ICMPv6 packets send to an Azure Public IPv6.
I tested it with a Standard Load Balancer with a Public IPv6 address, and also with an Ubuntu VM with a public IPv6 address.
It's not responding in time to about 2/3 of the ping packets send to it.
This only happens when pinging it from the internet.
When I ping it from a VM from inside an Azure VNET, there is no packet loss.
Is this something I can solve myself? Or is this something Microsoft needs to fix in Azure?
For clarification: Contrary to IPv4, ICMP is crucial for IPv6 to function properly.
As this is a documented feature, I expect it to work like described:
https://learn.microsoft.com/en-us/azure/load-balancer/load-balancer-test-frontend-reachability?tabs=windows-outside%2Cping%2Cwindowsvm
https://techcommunity.microsoft.com/blog/itopstalkblog/wired-for-hybrid---whats-new-in-azure-networking---june-2023-edition/3866658
Using a public IPv4 address is not possible with our usecase.
To reproduce
Create a VM with Ubuntu 24.04
- Basics tab
- Create new Resource group
- Enter VM name
- Availability options: No infrastructure redundancy required
- Image: Ubuntu Server 24.04 LTS - x64 Gen2
- VM architecture: x64
- Size: Any, but Standard_B2ats_v2 will do fine
- Authentication type: Password or SSH key
- Enter username and password or SSH key name
- Disks tab: Leave all default
- Networking tab
- Virtual network: Create new
- Enter VNET name
- Leave other settings default
- Public IP: None
- NIC network security group: None
- Review + Create: Create
After the VM is created, go to the new created VNET and create an IPv6 address space on the subnet
- Go to Settings -> Address space
- Click Add address space -> Add IPv6 address space
- Click Save
- Go to Settings -> Subnets
- Click the subnet name
- If "Include an IPv6 address space" can be checked, check it. If it is greyed out, click cancel and wait a minute and try again
- Click: Add
Go to the new Network Interface of the VM and add a private IPv6 address
- Go to Settings -> IP configurations
- Click Add
- Enter a Name
- IP version: IPv6
- Click Add
Create a standard, regional Load Balancer with an inbound NAT-rule to the VM. (without a NAT or LB rule, all pings will fail)
- Basics tab
- Select the created resource group
- Enter a name
- SKU: Standard
- Type: Public
- Tier: Regional
- Front End IP configuration tab
- Click Add a frontend IP configuration
- Enter a name
- IP version: IPv6
- Public IP-Address: Create new
- Enter a name
- Availability zone: No Zone
- Click Save
- Click Save
- Click 2x Next to go to the Inbound rules tab
- Inbound rules tab
- Click Add an inbound NAT rule
- Enter a name
- Target virtual machine: a VM with a private IPv6 address
- Network IP configuration: a private IPv6 address
- Frontend IP address: The to be created public IPv6 address
- Frontend port: 22
- Backend port: 22
- Click Save
- Click Review + Create
- Review + Create tab
- Click Create
No go to the new Load Balancer and copy it's public IPv6
On your local PC: ping the IPv6 address continuesly. ( ping -t on Windows)
See the following happening:
PS C:\Users\<USERNAME> ping <LB-PUBLIC-IPv6-ADDRESS> -t
Pinging <LB-PUBLIC-IPv6-ADDRESS> with 32 bytes of data:
Request timed out.
Reply from <LB-PUBLIC-IPv6-ADDRESS>: time=8ms
Reply from <LB-PUBLIC-IPv6-ADDRESS>: time=8ms
Reply from <LB-PUBLIC-IPv6-ADDRESS>: time=8ms
Reply from <LB-PUBLIC-IPv6-ADDRESS>: time=8ms
Reply from <LB-PUBLIC-IPv6-ADDRESS>: time=8ms
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Reply from <LB-PUBLIC-IPv6-ADDRESS>: time=2474ms <----------------
Reply from <LB-PUBLIC-IPv6-ADDRESS>: time=8ms
Reply from <LB-PUBLIC-IPv6-ADDRESS>: time=8ms
Reply from <LB-PUBLIC-IPv6-ADDRESS>: time=8ms
Reply from <LB-PUBLIC-IPv6-ADDRESS>: time=8ms
Reply from <LB-PUBLIC-IPv6-ADDRESS>: time=8ms
Reply from <LB-PUBLIC-IPv6-ADDRESS>: time=8ms
Reply from <LB-PUBLIC-IPv6-ADDRESS>: time=8ms
Reply from <LB-PUBLIC-IPv6-ADDRESS>: time=8ms
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Reply from <LB-PUBLIC-IPv6-ADDRESS>: time=2000ms <----------------
Reply from <LB-PUBLIC-IPv6-ADDRESS>: time=8ms
Reply from <LB-PUBLIC-IPv6-ADDRESS>: time=9ms
Reply from <LB-PUBLIC-IPv6-ADDRESS>: time=9ms
Reply from <LB-PUBLIC-IPv6-ADDRESS>: time=8ms
Reply from <LB-PUBLIC-IPv6-ADDRESS>: time=8ms
Reply from <LB-PUBLIC-IPv6-ADDRESS>: time=8ms
Reply from <LB-PUBLIC-IPv6-ADDRESS>: time=8ms
Reply from <LB-PUBLIC-IPv6-ADDRESS>: time=8ms
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Reply from <LB-PUBLIC-IPv6-ADDRESS>: time=8ms
Reply from <LB-PUBLIC-IPv6-ADDRESS>: time=8ms
Reply from <LB-PUBLIC-IPv6-ADDRESS>: time=9ms
Reply from <LB-PUBLIC-IPv6-ADDRESS>: time=9ms
Reply from <LB-PUBLIC-IPv6-ADDRESS>: time=8ms
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Reply from <LB-PUBLIC-IPv6-ADDRESS>: time=2473ms <----------------
Reply from <LB-PUBLIC-IPv6-ADDRESS>: time=7ms
Reply from <LB-PUBLIC-IPv6-ADDRESS>: time=8ms
Reply from <LB-PUBLIC-IPv6-ADDRESS>: time=8ms
Reply from <LB-PUBLIC-IPv6-ADDRESS>: time=8ms
Reply from <LB-PUBLIC-IPv6-ADDRESS>: time=8ms
Reply from <LB-PUBLIC-IPv6-ADDRESS>: time=8ms
Reply from <LB-PUBLIC-IPv6-ADDRESS>: time=8ms
Reply from <LB-PUBLIC-IPv6-ADDRESS>: time=8ms
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Reply from <LB-PUBLIC-IPv6-ADDRESS>: time=8ms
Reply from <LB-PUBLIC-IPv6-ADDRESS>: time=8ms
Reply from <LB-PUBLIC-IPv6-ADDRESS>: time=8ms
Reply from <LB-PUBLIC-IPv6-ADDRESS>: time=7ms
Reply from <LB-PUBLIC-IPv6-ADDRESS>: time=8ms
Reply from <LB-PUBLIC-IPv6-ADDRESS>: time=8ms
Reply from <LB-PUBLIC-IPv6-ADDRESS>: time=8ms
Reply from <LB-PUBLIC-IPv6-ADDRESS>: time=10ms
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Reply from <LB-PUBLIC-IPv6-ADDRESS>: time=8ms
Reply from <LB-PUBLIC-IPv6-ADDRESS>: time=8ms
Reply from <LB-PUBLIC-IPv6-ADDRESS>: time=8ms
Reply from <LB-PUBLIC-IPv6-ADDRESS>: time=8ms
Reply from <LB-PUBLIC-IPv6-ADDRESS>: time=9ms
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Reply from <LB-PUBLIC-IPv6-ADDRESS>: time=479ms <----------------
Reply from <LB-PUBLIC-IPv6-ADDRESS>: time=8ms
Reply from <LB-PUBLIC-IPv6-ADDRESS>: time=7ms
Reply from <LB-PUBLIC-IPv6-ADDRESS>: time=9ms
Reply from <LB-PUBLIC-IPv6-ADDRESS>: time=8ms
Reply from <LB-PUBLIC-IPv6-ADDRESS>: time=8ms
Reply from <LB-PUBLIC-IPv6-ADDRESS>: time=7ms
Reply from <LB-PUBLIC-IPv6-ADDRESS>: time=8ms
Reply from <LB-PUBLIC-IPv6-ADDRESS>: time=8ms
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Ping statistics for <LB-PUBLIC-IPv6-ADDRESS>:
Packets: Sent = 4777, Received = 1801, Lost = 2976 (62% loss),
Approximate round trip times in milli-seconds:
Minimum = 7ms, Maximum = 2983ms, Average = 69ms
I left it running for a couple of hours and got a 62% loss.
Notice the long response times it sometimes takes when it starts replying again.(Suffixed by <----------------)