VirtualBox has a long standing issue about IPv6 connectivity over a bridged wireless adapter.
The current and easiest workaround I've found is to remove the neighbor entry corresponding to the IPv6 router in the neighbor table. This is on in Linux guest on a Windows host.
$ ping6 icanhazip.com
PING icanhazip.com(2606:4700::6812:7361) 56 data bytes
^C
--- icanhazip.com ping statistics ---
5 packets transmitted, 0 received, 100% packet loss, time 0ms
rtt min/avg/max/mdev = 0.000/0.000/0.000/0.000 ms
$ ip -6 neigh
2001:db8:1::1 dev enp0s3 lladdr 00:11:95:ad:be:ef router STALE
2001:db8:1:211:95ff:dead:beef dev enp0s3 FAILED
fe80::211:95ff:dead:beef dev enp0s3 router FAILED
$ sudo ip -6 neigh del fe80::211:95ff:dead:beef dev enp0s3
$ ping6 -c 3 icanhazip.com
PING icanhazip.com(2606:4700::6812:7361) 56 data bytes
64 bytes from 2606:4700::6812:7361: icmp_seq=1 ttl=51 time=202 ms
64 bytes from 2606:4700::6812:7361: icmp_seq=2 ttl=51 time=213 ms
64 bytes from 2606:4700::6812:7361: icmp_seq=3 ttl=51 time=118 ms
--- icanhazip.com ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2004ms
rtt min/avg/max/mdev = 118.575/178.169/213.682/42.400 ms
The neighbor entry will become STALE
again after every 30 seconds and will eventually expire and won't work anymore after some time. An option is to create a cron job that runs every 2 minutes and deletes the table entry.
*/2 * * * * ip -6 neigh | while read line; do set -- $line; ip neigh del $1 dev $3; done; ping6 -n -c 2 $ipv6_gw &>/dev/null
where $ipv6_gw
is the address of the local IPv6 gateway to the Internet.
Is this on the host or on the guest? The command "ip -6 neigh del fe80::211:95ff:dead:beef" doesn't seem to work on the guest. It gives an error: "Device and destination are required arguments." If you add "dev " it does work, but IPv6 still doesn't work in Linux guest on Windows host.