Eu tive o mesmo problema com o servidor Hetzner, mas usando o VirtualBox em vez do KVM.
Problema:
O Hetzner roteia todos os pacotes IPv6 com qualquer IP de destino dentro de sua sub-rede / 64 para o endereço MAC de seu host físico. Isso significa que, se você enviar um ping de algum lugar da Internet para sua VM que tenha um endereço IPv6 com o mesmo prefixo do host, o gateway do Hetzer não fará uma solicitação ao vizinho para procurar o endereço MAC de sua VM, mas simplesmente encaminhará os pacotes ICMP para o MAC do seu host. Essa é a razão pela qual você pode ver respostas de eco em seu host físico, mas não em sua VM: ele é direcionado ao MAC do host, não ao MAC da VM.
No entanto, parece haver um bug na implementação do IPv6 de Hetzner (ou pode ser feito de propósito, não sei): Se a VM enviar uma solicitação de vizinho para procurar o endereço MAC do gateway (fe80 :: 1) e usar seu IP IPv6 global como o endereço de origem da solicitação, de alguma forma o gateway da Hetzner parece atualizar seu IPv6 interno para o MAC tabela de endereços. Nos 20 minutos seguintes, o gateway de Hetzner enviará qualquer pacote direcionado ao endereço IPv6 das VMs para o endereço MAC das VMs. Se em 20 minutos não for enviada nenhuma solicitação adicional do MAC da VM e do IP global da VM ao gateway, ele retornará para enviar pacotes IPv6 para o MAC do host.
Agora sua VM - logo após a inicialização da rede, talvez porque o endereço local do link não está atribuído neste momento - ONCE envia uma solicitação usando seu endereço IPv6 global como a fonte e "acidentalmente" atualiza a tabela de endereços MAC da Hetzner por uma vez . Durante o tempo de execução, a VM ainda envia continuamente solicitações para procurar o endereço MAC do gateway para manter sua tabela de endereços MAC atualizada, mas usa seu endereço IPv6 de link local para fazê-lo (o que é totalmente aceitável da perspectiva IPv6), mas que não atualizará a tabela de endereços MAC do gatet de Hetzner. Essa é a razão pela qual o IPv6 parece estar funcionando totalmente após a inicialização da VM, mas apenas por 20 minutos.
Soluções:
Existe uma solução suja e uma solução limpa:
-
Solução suja: sua VM precisa enviar uma solicitação para o endereço MAC do gateway usando seu endereço IPv6 global de tempos em tempos (digamos a cada 5 minutos). Isso é complicado: sua VM enviará solicitações, mas usando o IPv6 de link local. Então eu usei um truque barato aqui: eu removo o IP local do link da interface, envio uma solicitação (que é então forçada a usar o IP global) e reconecto o IP local do link:
ip -6 addr del fe80::a00:27ff:fecf:e270/64 dev enp0s3 ndisc6 fe80::1 enp0s3 ip -6 addr add fe80::a00:27ff:fecf:e270/64 dev enp0s3
-
Solução limpa: não use ponte. Eu agora uso somente rede de host. Isso significa que a VM está conectada a uma NIC separada (vboxnet0). Eu adicionei uma rota IPv6 que encaminha todo o tráfego do host para o endereço IPv6 da VM:
ip -6 route add <my IPv6 pefix>::20 dev vboxnet0
Na VM, uso o endereço IPv6 local do link do host, já que é o GW padrão. Para permitir que o host conecte a VM em seu IP IPv6 global, eu atribuí outro IP da mesma sub-rede / 64 ao vboxnet0. Para mim, isso funciona perfeitamente.