This is what I get on the node where the VM is:
# ip -s -s neigh flush all
100.64.0.9 dev enp3s0 lladdr 52:54:00:b9:29:4d ref 1 used 95/0/95probes 4 REACHABLE
100.65.3.9 dev enp2s0 lladdr 52:54:00:00:c0:8d ref 1 used 95/0/95probes 4 REACHABLE
2001:db8::f816:3eff:fe9c:17b7 dev br-ex lladdr fa:16:3e:9c:17:b7 used 89/89/49probes 4 STALE
fe80::5054:ff:fe00:c08d dev enp2s0 lladdr 52:54:00:00:c0:8d router used 89/89/61probes 4 STALE
fe80::5054:ff:feb9:294d dev enp3s0 lladdr 52:54:00:b9:29:4d router used 88/148/88probes 0 STALE
fe80::f816:3eff:fe9c:17b7 dev br-ex used 76/143/75probes 3 FAILED
*** Round 1, deleting 6 entries ***
*** Flush is complete after 1 round ***
# tcpdump -ni any host 2001:db8::f816:3eff:fe9c:17b7 or host f00d:f00d:f00d:4:5054:ff:fea5:f6e8 (first IP is the VM IP, second the destination VM)
tcpdump: data link type LINUX_SLL2
dropped privs to tcpdump
tcpdump: verbose output suppressed, use -v[v]... for full protocol decode
listening on any, link-type LINUX_SLL2 (Linux cooked v2), snapshot length 262144 bytes
05:37:08.142009 tapbae685a6-66 M IP6 2001:db8::f816:3eff:fe9c:17b7 > ff02::1:ff3c:b5f8: ICMP6, neighbor solicitation, who has fe80::f816:3eff:fe3c:b5f8, length 32
05:37:08.142578 tapbae685a6-66 Out IP6 fe80::f816:3eff:fe3c:b5f8 > 2001:db8::f816:3eff:fe9c:17b7: ICMP6, neighbor advertisement, tgt is fe80::f816:3eff:fe3c:b5f8, length 32
05:37:08.142664 tapbae685a6-66 P IP6 2001:db8::f816:3eff:fe9c:17b7 > f00d:f00d:f00d:4:5054:ff:fea5:f6e8: ICMP6, echo request, id 3, seq 1, length 64
05:37:08.142910 br-ex In IP6 2001:db8::f816:3eff:fe9c:17b7 > f00d:f00d:f00d:4:5054:ff:fea5:f6e8: ICMP6, echo request, id 3, seq 1, length 64
05:37:08.142933 enp2s0 Out IP6 2001:db8::f816:3eff:fe9c:17b7 > f00d:f00d:f00d:4:5054:ff:fea5:f6e8: ICMP6, echo request, id 3, seq 1, length 64
05:37:08.143535 enp3s0 In IP6 f00d:f00d:f00d:4:5054:ff:fea5:f6e8 > 2001:db8::f816:3eff:fe9c:17b7: ICMP6, echo reply, id 3, seq 1, length 64
05:37:08.143854 tapbae685a6-66 P IP6 2001:db8::f816:3eff:fe9c:17b7 > fe80::2c21:43ff:fe1e:244e: ICMP6, neighbor advertisement, tgt is 2001:db8::f816:3eff:fe9c:17b7, length 32
05:37:08.143959 br-ex In IP6 2001:db8::f816:3eff:fe9c:17b7 > fe80::2c21:43ff:fe1e:244e: ICMP6, neighbor advertisement, tgt is 2001:db8::f816:3eff:fe9c:17b7, length 32
05:37:08.143975 br-ex Out IP6 f00d:f00d:f00d:4:5054:ff:fea5:f6e8 > 2001:db8::f816:3eff:fe9c:17b7: ICMP6, echo reply, id 3, seq 1, length 64
05:37:08.144122 tapbae685a6-66 Out IP6 f00d:f00d:f00d:4:5054:ff:fea5:f6e8 > 2001:db8::f816:3eff:fe9c:17b7: ICMP6, echo reply, id 3, seq 1, length 64
Then, inside the VM, with ip nei I see the next:
fe80::2c21:43ff:fe1e:244e dev eth0 lladdr 2e:21:43:1e:24:4e router STALE
fe80::f816:3eff:fe3c:b5f8 dev eth0 lladdr fa:16:3e:3c:b5:f8 router STALE
First one is the ll for the br-ex, and its mac, which is correct:
7: br-ex: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default qlen 1000
link/ether 2e:21:43:1e:24:4e brd ff:ff:ff:ff:ff:ff
inet 169.254.0.1/32 scope global br-ex
valid_lft forever preferred_lft forever
inet6 fd53:d91e:400:7f17::1/128 scope global
valid_lft forever preferred_lft forever
inet6 fe80::2c21:43ff:fe1e:244e/64 scope link
And the second one is the ovn router gateway port, which makes me realise perhaps that is the difference in your setup. In OVN, with slaac mode (the one I'm using, slaac/slaac), is the router the one replying to that, so perhaps it is working for me because I have a router connected to that provider network.
When I remove the router this is what I get:
05:51:35.910334 tapbae685a6-66 M IP6 2001:db8::f816:3eff:fe9c:17b7 > ff02::1:ff3c:b5f8: ICMP6, neighbor solicitation, who has fe80::f816:3eff:fe3c:b5f8, length 32
05:51:35.910533 tap775d5de2-70 Out IP6 2001:db8::f816:3eff:fe9c:17b7 > ff02::1:ff3c:b5f8: ICMP6, neighbor solicitation, who has fe80::f816:3eff:fe3c:b5f8, length 32
05:51:35.910545 br-ex In IP6 2001:db8::f816:3eff:fe9c:17b7 > ff02::1:ff3c:b5f8: ICMP6, neighbor solicitation, who has fe80::f816:3eff:fe3c:b5f8, length 32
05:51:36.965778 tapbae685a6-66 M IP6 2001:db8::f816:3eff:fe9c:17b7 > ff02::1:ff3c:b5f8: ICMP6, neighbor solicitation, who has fe80::f816:3eff:fe3c:b5f8, length 32
05:51:36.965793 tap775d5de2-70 Out IP6 2001:db8::f816:3eff:fe9c:17b7 > ff02::1:ff3c:b5f8: ICMP6, neighbor solicitation, who has fe80::f816:3eff:fe3c:b5f8, length 32
05:51:36.965810 br-ex In IP6 2001:db8::f816:3eff:fe9c:17b7 > ff02::1:ff3c:b5f8: ICMP6, neighbor solicitation, who has fe80::f816:3eff:fe3c:b5f8, length 32
05:51:37.989829 tapbae685a6-66 M IP6 2001:db8::f816:3eff:fe9c:17b7 > ff02::1:ff3c:b5f8: ICMP6, neighbor solicitation, who has fe80::f816:3eff:fe3c:b5f8, length 32
05:51:37.989844 tap775d5de2-70 Out IP6 2001:db8::f816:3eff:fe9c:17b7 > ff02::1:ff3c:b5f8: ICMP6, neighbor solicitation, who has fe80::f816:3eff:fe3c:b5f8, length 32
05:51:37.989868 br-ex In IP6 2001:db8::f816:3eff:fe9c:17b7 > ff02::1:ff3c:b5f8: ICMP6, neighbor solicitation, who has fe80::f816:3eff:fe3c:b5f8, length 32
And inside the VM:
[root@vm-provider ~]# ip nei
fe80::2c21:43ff:fe1e:244e dev eth0 lladdr 2e:21:43:1e:24:4e router REACHABLE
fe80::f816:3eff:fe3c:b5f8 dev eth0 FAILED
Can you confirm it works for you just by adding a router?
This is what I get on the node where the VM is: :f816:3eff: fe9c:17b7 dev br-ex lladdr fa:16:3e:9c:17:b7 used 89/89/49probes 4 STALE ff:fe00: c08d dev enp2s0 lladdr 52:54:00:00:c0:8d router used 89/89/61probes 4 STALE ff:feb9: 294d dev enp3s0 lladdr 52:54:00:b9:29:4d router used 88/148/88probes 0 STALE 3eff:fe9c: 17b7 dev br-ex used 76/143/75probes 3 FAILED
# ip -s -s neigh flush all
100.64.0.9 dev enp3s0 lladdr 52:54:00:b9:29:4d ref 1 used 95/0/95probes 4 REACHABLE
100.65.3.9 dev enp2s0 lladdr 52:54:00:00:c0:8d ref 1 used 95/0/95probes 4 REACHABLE
2001:db8:
fe80::5054:
fe80::5054:
fe80::f816:
*** Round 1, deleting 6 entries ***
*** Flush is complete after 1 round ***
# tcpdump -ni any host 2001:db8: :f816:3eff: fe9c:17b7 or host f00d:f00d: f00d:4: 5054:ff: fea5:f6e8 (first IP is the VM IP, second the destination VM) :f816:3eff: fe9c:17b7 > ff02::1:ff3c:b5f8: ICMP6, neighbor solicitation, who has fe80::f816: 3eff:fe3c: b5f8, length 32 3eff:fe3c: b5f8 > 2001:db8: :f816:3eff: fe9c:17b7: ICMP6, neighbor advertisement, tgt is fe80::f816: 3eff:fe3c: b5f8, length 32 :f816:3eff: fe9c:17b7 > f00d:f00d: f00d:4: 5054:ff: fea5:f6e8: ICMP6, echo request, id 3, seq 1, length 64 :f816:3eff: fe9c:17b7 > f00d:f00d: f00d:4: 5054:ff: fea5:f6e8: ICMP6, echo request, id 3, seq 1, length 64 :f816:3eff: fe9c:17b7 > f00d:f00d: f00d:4: 5054:ff: fea5:f6e8: ICMP6, echo request, id 3, seq 1, length 64 f00d:4: 5054:ff: fea5:f6e8 > 2001:db8: :f816:3eff: fe9c:17b7: ICMP6, echo reply, id 3, seq 1, length 64 :f816:3eff: fe9c:17b7 > fe80::2c21: 43ff:fe1e: 244e: ICMP6, neighbor advertisement, tgt is 2001:db8: :f816:3eff: fe9c:17b7, length 32 :f816:3eff: fe9c:17b7 > fe80::2c21: 43ff:fe1e: 244e: ICMP6, neighbor advertisement, tgt is 2001:db8: :f816:3eff: fe9c:17b7, length 32 f00d:4: 5054:ff: fea5:f6e8 > 2001:db8: :f816:3eff: fe9c:17b7: ICMP6, echo reply, id 3, seq 1, length 64 f00d:4: 5054:ff: fea5:f6e8 > 2001:db8: :f816:3eff: fe9c:17b7: ICMP6, echo reply, id 3, seq 1, length 64
tcpdump: data link type LINUX_SLL2
dropped privs to tcpdump
tcpdump: verbose output suppressed, use -v[v]... for full protocol decode
listening on any, link-type LINUX_SLL2 (Linux cooked v2), snapshot length 262144 bytes
05:37:08.142009 tapbae685a6-66 M IP6 2001:db8:
05:37:08.142578 tapbae685a6-66 Out IP6 fe80::f816:
05:37:08.142664 tapbae685a6-66 P IP6 2001:db8:
05:37:08.142910 br-ex In IP6 2001:db8:
05:37:08.142933 enp2s0 Out IP6 2001:db8:
05:37:08.143535 enp3s0 In IP6 f00d:f00d:
05:37:08.143854 tapbae685a6-66 P IP6 2001:db8:
05:37:08.143959 br-ex In IP6 2001:db8:
05:37:08.143975 br-ex Out IP6 f00d:f00d:
05:37:08.144122 tapbae685a6-66 Out IP6 f00d:f00d:
Then, inside the VM, with ip nei I see the next: 43ff:fe1e: 244e dev eth0 lladdr 2e:21:43:1e:24:4e router STALE 3eff:fe3c: b5f8 dev eth0 lladdr fa:16:3e:3c:b5:f8 router STALE
fe80::2c21:
fe80::f816:
First one is the ll for the br-ex, and its mac, which is correct: MULTICAST, UP,LOWER_ UP> mtu 1500 qdisc noqueue state UNKNOWN group default qlen 1000 400:7f17: :1/128 scope global 43ff:fe1e: 244e/64 scope link
7: br-ex: <BROADCAST,
link/ether 2e:21:43:1e:24:4e brd ff:ff:ff:ff:ff:ff
inet 169.254.0.1/32 scope global br-ex
valid_lft forever preferred_lft forever
inet6 fd53:d91e:
valid_lft forever preferred_lft forever
inet6 fe80::2c21:
And the second one is the ovn router gateway port, which makes me realise perhaps that is the difference in your setup. In OVN, with slaac mode (the one I'm using, slaac/slaac), is the router the one replying to that, so perhaps it is working for me because I have a router connected to that provider network.
When I remove the router this is what I get: :f816:3eff: fe9c:17b7 > ff02::1:ff3c:b5f8: ICMP6, neighbor solicitation, who has fe80::f816: 3eff:fe3c: b5f8, length 32 :f816:3eff: fe9c:17b7 > ff02::1:ff3c:b5f8: ICMP6, neighbor solicitation, who has fe80::f816: 3eff:fe3c: b5f8, length 32 :f816:3eff: fe9c:17b7 > ff02::1:ff3c:b5f8: ICMP6, neighbor solicitation, who has fe80::f816: 3eff:fe3c: b5f8, length 32 :f816:3eff: fe9c:17b7 > ff02::1:ff3c:b5f8: ICMP6, neighbor solicitation, who has fe80::f816: 3eff:fe3c: b5f8, length 32 :f816:3eff: fe9c:17b7 > ff02::1:ff3c:b5f8: ICMP6, neighbor solicitation, who has fe80::f816: 3eff:fe3c: b5f8, length 32 :f816:3eff: fe9c:17b7 > ff02::1:ff3c:b5f8: ICMP6, neighbor solicitation, who has fe80::f816: 3eff:fe3c: b5f8, length 32 :f816:3eff: fe9c:17b7 > ff02::1:ff3c:b5f8: ICMP6, neighbor solicitation, who has fe80::f816: 3eff:fe3c: b5f8, length 32 :f816:3eff: fe9c:17b7 > ff02::1:ff3c:b5f8: ICMP6, neighbor solicitation, who has fe80::f816: 3eff:fe3c: b5f8, length 32 :f816:3eff: fe9c:17b7 > ff02::1:ff3c:b5f8: ICMP6, neighbor solicitation, who has fe80::f816: 3eff:fe3c: b5f8, length 32
05:51:35.910334 tapbae685a6-66 M IP6 2001:db8:
05:51:35.910533 tap775d5de2-70 Out IP6 2001:db8:
05:51:35.910545 br-ex In IP6 2001:db8:
05:51:36.965778 tapbae685a6-66 M IP6 2001:db8:
05:51:36.965793 tap775d5de2-70 Out IP6 2001:db8:
05:51:36.965810 br-ex In IP6 2001:db8:
05:51:37.989829 tapbae685a6-66 M IP6 2001:db8:
05:51:37.989844 tap775d5de2-70 Out IP6 2001:db8:
05:51:37.989868 br-ex In IP6 2001:db8:
And inside the VM: 43ff:fe1e: 244e dev eth0 lladdr 2e:21:43:1e:24:4e router REACHABLE 3eff:fe3c: b5f8 dev eth0 FAILED
[root@vm-provider ~]# ip nei
fe80::2c21:
fe80::f816:
Can you confirm it works for you just by adding a router?