NDP Proxy

Außer dem Server bei Hetzner habe ich noch einen weiteren Server und wollte auch hier IPv6 konfigurieren. Hier steht mir nur ein /64 zur Verfügung. Daher ist hier Autoconfig per SLAAC leider nicht möglich. Allerding soll es darum hier nicht gehen.
Ein Teil der VMs hat bei IPv4 nur Adressen aus dem privaten Adressraum und ist ansonsten nur genatet. Die IPv6 Adressen sollen allerdings nicht auf die VMs genatet werden, sondern nativ auf den VMs liegen.
Da das Netz aber nicht direkt auf den Server geroutet ist, sondern die IPs dem Router per Neighbor Advertisment bekannt gemacht werden müssen, muss der KVM Server hier NDP-Proxy spielen. Das ist ziemlich einfach per iproute2 zu machen:

jochen@kvm03:~$ sudo ip -6 neigh add proxy 2a00:1798:3:341:3100:341:0:21 dev enp3s0f0

Prüfen welche NDP-Proxy IPs gesetzt sind:

jochen@kvm03:~$ sudo ip -6 neigh show proxy
2a00:1798:3:341:3100:341:0:21 dev enp3s0f0  proxy

IPv6 Multicast mit macvtap

Ein zweites Problem hatte ich mit einer VM, die per macvtap direkt auf ein physikalisches Interface gebridged ist. Hierbei hatte ich eigentlich erwartet, dass man der VM einfach die Adresse gibt, und sie diese dem Router per Neighbor Advertismentannounced. Doch egal was ich versucht habe, eine IPv6-Kommunikation war nicht möglich. Auf dem Router nachgeschaut, war auch zu erkennen, dass nichts zu erkennen war, nämlich dem Router die Adresse komplett unbekannt war. Nach einer kurzen Websuche war das Problem klar. In der Default-Konfiguration filtern macvtap Interfaces Multicast, was dazu führt, dass IPv6 hier nicht wirklich funktioniert. Das kann man allerdings schnell ändern. Dazu muss man nur die Interface-Konfig der VM anpassen:

» |root@kvm01 22:20:18| ~ # virsh edit checkmk01
...
    <interface type='network' trustGuestRxFilters='yes'>
      <mac address='52:54:00:16:cc:a1'/>
      <source network='macvtap-enp10s0f0'/>
      <model type='virtio'/>
      <address type='pci' domain='0x0000' bus='0x01' slot='0x00' function='0x0'/>
    </interface>
...

Der entscheidende Part ist hier trustGuestRxFilters='yes'. Wenn man das kurz konfiguriert funktioniert auch IPv6 auf der VM.