Hi aexaey,
There are some things wrong on your comment, please let me comment on them:
I don't think A0 are capped at all, I don't know where did you get that:
user@A0VM:~$ speedtest-cli
Retrieving speedtest.net configuration...
Retrieving speedtest.net server list...
Testing from Microsoft Corporation (40.113.XX.XX)...
Selecting best server based on latency...
Hosted by KsFiberNet (Wichita, KS) [45.26 km]: 139.703 ms
Testing download speed........................................
Download: 44.48 Mbit/s
Testing upload speed..................................................
Upload: 22.54 Mbit/s
I just had to run one single test to get these results. Multi-threading will probably pump this up (let's say a multi-thread iPerf test between two VMs on two different regions, through their public IP addresses).
(Funnily enough this VM is in Dublin, hence the latency to Wichita).
You can get access to all your TCP/UDP ports by adding an instance-level IP: https://azure.microsoft.com/en-gb/documentation/articles/vir... (you can later protect it with NSGs --> https://azure.microsoft.com/en-us/documentation/articles/vir... ). What you've seen is when you create endpoints on the load balancer that points to the VMs behind it. Now in Azure Resource Manager, spinning up a VM from the new portal will actually get you an ILPIP and no load balancer by default.
About that statement about a ton of weirdly configured network gear: Well, for starters you're doing network virtualization here :) but seriously now, the platform doesn't forward ICMPs to/from Internet, so I'm curious about those private IP addresses on a traceroute (and of course the packet drops). If you're talking about hops between you and the VIP (the load balanced public IP in front of your VM), that's probably your provider, other providers and finally Microsoft's Network. As per the rest of the path, you've said that ICMP doesn't go through, so traceroute it's not going to work (tcptraceroute also needs ICMP to work :)).