Eu encontrei o mesmo problema. Depois de seguir a lógica pelas regras que o firewalld coloca, descobri que a zona de entrega estava bloqueando o ipv6 icmp necessário para encontrar os vizinhos do ipv6. Existe uma regra para permitir todos os ipv6 icmp, mas o firewalld coloca-o após as zonas de entrada, onde estão as regras de descarte.
Se você quiser ver isso por si mesmo, basta olhar para a saída de 'ip6tables -L -n -v'
Então, uma solução rápida e suja é fazer isso:
firewall-cmd --permanent --direct --add-rule ipv6 filter INPUT 0 -p icmpv6 -j ACCEPT
O Firewalld coloca as regras diretas antes das outras regras de entrada para que isso aconteça antes das regras de descarte. Se você quiser bloquear coisas como ping, você também usaria uma regra direta, mas você precisaria antes da regra acima.
Você faria algo como:
firewall-cmd --permanent --direct --add-rule ipv6 filter INPUT 0 -p icmpv6 --icmpv6-type 128 -j DROP
firewall-cmd --permanent --direct --add-rule ipv6 filter INPUT 1 -p icmpv6 -j ACCEPT
As prioridades as manterão em ordem.