I’ve been testing EVPN D-VNI route leaking on VyOS 1.5 rolling using an SVD (external, vnifilter) and IPv6 VTEPs.
I wanted to document this here in case anyone else is testing the same setup.
So far I have run into three issues in the IPv6 D-VNI dataplane path. Two already have upstream fixes:
FRR:390ddee81c60d706afea99ac128338baa41aa4f1 zebra: fix DVNI route encap type for IPv6 VTEPs
Without this, Zebra uses the IPv4 LWT encapsulation type for an IPv6 VTEP instead of LWTUNNEL_ENCAP_IP6.
Linux:b853b94e848216b82ecaa0d5d3c7f6c9066e32a4 ipv6: Allow for nexthop device mismatch with "onlink"
Without this, Linux rejects the D-VNI route because the remote VTEP gateway and vxlan0 device do not match, despite the route being installed with onlink.
After applying those two fixes, the routes install correctly, but I found what appears to be a third FRR issue.
FRR creates the IPv6 D-VNI route without the LWT csum flag:
encap ip6 id 6600 dst fd69:255:240::11
via inet6 fd69:255:240::11 dev vxlan0 onlink
The resulting VXLAN packet reaches the receiving VTEP with an outer IPv6 UDP checksum of zero. It is visible on the physical underlay interface, but is not decapsulated onto vxlan0.
If I manually replace the same route with:
encap ip6 id 6600 dst fd69:255:240::11 csum
via inet6 fd69:255:240::11 dev vxlan0 onlink
the packet immediately decapsulates correctly. Doing the same for the reverse D-VNI route gives working bidirectional traffic.
I tested a small FRR change which adds:
LWTUNNEL_IP6_FLAGS = TUNNEL_CSUM
to the IPv6 D-VNI LWT attributes, and that also appears to solve the issue without manually modifying the routes.
I’ve opened an upstream FRR issue with the reproducer and proposed fix:
I’m mainly posting this here for VyOS visibility and in case anyone else is testing D-VNI with IPv6 VTEPs.