When I finally got a Windows Server 2012/2016/2019 Server, I started having some seriously squirrely problems with networking. I was able to ping and resolve DNS. I was even able to browse network shares on other servers that were well up the chain outside of the virtual environment, but I was unable to actually browse the internet from the Windows Server. I was having no issues with Linux based images.
I immediately suspected MTU as the culprit. I double check my neutron-dnsmasq.conf file to make sure the MTU was set at 1454, via DHCP configuration. It was. So, I checked the MTU settings on the Windows image and it was in fact 1500. For some reason the DHCP option was not having any effect on the Windows image. This is supposed to be addressed by the CloudBase VirtIO driver, allowing the MTU to be set via DHCP, but it obviously wasn’t working. You can check your MTU by doing the following:
Open an Administrator command prompt.
netsh interface ipv4 show interfaces
This will show you your current MTU settings. Pay close attention to the Idx # of the ethernet interface. You will need this information to change the MTU. To change the MTU to 1454 use this command. (you will need to replace the “10” with the Idx for your ethernet interface)
netsh interface ipv4 set subinterface "10" mtu=1454 store=persistent
Now, if you aren’t sure what you need to set the MTU at to get things working, there is a trick you can use. From a command line, run this command:
ping google.com -f -l 1500
This command sends a ping using a 1500 byte packet size (MTU). You can slowly decrease the packet size, in increments of 10 or so, until you stop getting fragmented packet results. If the packet is too large, you will get “Packet needs to be fragmented but DF is set.” If it’s not to large you will get a successful ping (as long as the destination isn’t restricting ICMP ping packet size. Here is an example of both: