Thanks for the hint, I was able to dig a little deeper and found something. Even though the network has set “ipv6.nat” to false, it still creates a “dnat_and_snat” entry in OVN, which is I think the reason for the DAD reply:
# grep for the mac of one of the affected containers
root@apricot:~# ovn-nbctl list NAT | grep -B5 -A10 feb5:f75f
_uuid : e7bf5107-f2b7-46e3-ade3-cfa0da0eb7c5
allowed_ext_ips : []
exempted_ext_ips : []
external_ids : {}
external_ip : "2001:XXXX:XXXX:600:1266:6aff:feb5:f75f"
external_mac : []
external_port_range : ""
gateway_port : []
logical_ip : "2001:XXXX:XXXX:600:1266:6aff:feb5:f75f"
logical_port : []
options : {stateless="true"}
type : dnat_and_snat
root@apricot:~# incus network show public --project office
config:
bridge.mtu: "1422"
dns.nameservers: 2001:4860:4860::8888,8.8.8.8
ipv4.address: 10.27.186.1/24
ipv4.nat: "true"
ipv6.address: 2001:XXXX:XXXX:600::1/64
ipv6.nat: "false"
network: UPLINK
volatile.network.ipv4.address: 192.168.33.26
volatile.network.ipv6.address: 2001:XXXX:XXXX:0:1266:6aff:fe0c:7915
description: Public network
name: public
type: ovn
used_by:
- /1.0/instances/applications-controlplane?project=office
- /1.0/instances/continuwuity?project=office
managed: true
status: Created
locations:
- apricot
- banana
- cherry
project: office
On a container reboot the Linux network stack in the container get’s a reply from the host system on the DAD request:
root@banana:~# tcpdump -eni veth49af179f icmp6
tcpdump: verbose output suppressed, use -v[v]... for full protocol decode listening on veth49af179f, link-type EN10MB (Ethernet), snapshot length 262144 bytes
03:39:52.897996 10:66:6a:0c:79:15 > 33:33:00:00:00:01, ethertype IPv6 (0x86dd), length 158: fe80::1266:6aff:fe0c:7915 > ff02::1: ICMP6, router advertisement, length 104
03:40:09.304265 10:66:6a:c2:eb:7c > 33:33:00:00:00:02, ethertype IPv6 (0x86dd), length 70: fe80::1266:6aff:fec2:eb7c > ff02::2: ICMP6, router solicitation, length 16
03:40:09.305864 10:66:6a:0c:79:15 > 10:66:6a:c2:eb:7c, ethertype IPv6 (0x86dd), length 158: fe80::1266:6aff:fe0c:7915 > fe80::1266:6aff:fec2:eb7c: ICMP6, router advertisement, length 104 03:40:09.342361 10:66:6a:c2:eb:7c > 33:33:ff:c2:eb:7c, ethertype IPv6 (0x86dd), length 86: :: > ff02::1:ffc2:eb7c: ICMP6, neighbor solicitation, who has 2001:XXXX:XXXX:600:1266:6aff:fec2:eb7c, length 32
03:40:09.343584 10:66:6a:0c:79:15 > 10:66:6a:c2:eb:7c, ethertype IPv6 (0x86dd), length 86: 2001:XXXX:XXXX:600:1266:6aff:fec2:eb7c > ::: ICMP6, neighbor advertisement, tgt is 2001:XXXX:XXXX:600:1266:6aff:fec2:eb7c, length 32
03:40:09.343629 10:66:6a:c2:eb:7c > 33:33:ff:c2:eb:7c, ethertype IPv6 (0x86dd), length 86: fe80::1266:6aff:fec2:eb7c > ff02::1:ffc2:eb7c: ICMP6, neighbor solicitation, who has 2001:XXXX:XXXX:600:1266:6aff:fec2:eb7c, length 32
03:40:09.344404 10:66:6a:0c:79:15 > 10:66:6a:c2:eb:7c, ethertype IPv6 (0x86dd), length 86: 2001:XXXX:XXXX:600:1266:6aff:fec2:eb7c > fe80::1266:6aff:fec2:eb7c: ICMP6, neighbor advertisement, tgt is 2001:XXXX:XXXX:600:1266:6aff:fec2:eb7c, length 32
03:40:10.371594 10:66:6a:c2:eb:7c > 33:33:ff:c2:eb:7c, ethertype IPv6 (0x86dd), length 86: fe80::1266:6aff:fec2:eb7c > ff02::1:ffc2:eb7c: ICMP6, neighbor solicitation, who has 2001:XXXX:XXXX:600:1266:6aff:fec2:eb7c, length 32
03:40:10.373018 10:66:6a:0c:79:15 > 10:66:6a:c2:eb:7c, ethertype IPv6 (0x86dd), length 86: 2001:XXXX:XXXX:600:1266:6aff:fec2:eb7c > fe80::1266:6aff:fec2:eb7c: ICMP6, neighbor advertisement, tgt is 2001:XXXX:XXXX:600:1266:6aff:fec2:eb7c, length 32
03:40:11.395652 10:66:6a:c2:eb:7c > 33:33:ff:c2:eb:7c, ethertype IPv6 (0x86dd), length 86: fe80::1266:6aff:fec2:eb7c > ff02::1:ffc2:eb7c: ICMP6, neighbor solicitation, who has 2001:XXXX:XXXX:600:1266:6aff:fec2:eb7c, length 32
03:40:11.397081 10:66:6a:0c:79:15 > 10:66:6a:c2:eb:7c, ethertype IPv6 (0x86dd), length 86: 2001:XXXX:XXXX:600:1266:6aff:fec2:eb7c > fe80::1266:6aff:fec2:eb7c: ICMP6, neighbor advertisement, tgt is 2001:XXXX:XXXX:600:1266:6aff:fec2:eb7c, length 32
^C
11 packets captured
11 packets received by filter
0 packets dropped by kernel
root@banana:~#
I also took a look at the router:
root@apricot:~# ovn-nbctl show | grep -A20 -B5 incus-net11
(...)
router 2ca929ab-c250-4cf7-b92d-cfb768270b51 (
incus-net11
-lr)
port
incus-net11
-lr-lrp-int
mac: "10:66:6a:0c:79:15"
networks: ["10.27.186.1/24", "2001:XXXX:XXXX:600::1/64"]
port
incus-net11
-lr-lrp-ext
mac: "10:66:6a:0c:79:15"
networks: ["192.168.33.26/24", "2001:XXXX:XXXX:0:1266:6aff:fe0c:7915/64"]
nat 794fd29b-c4fe-4137-9f9d-a81e8d0602af
external ip: "192.168.33.26"
logical ip: "10.27.186.0/24"
type: "snat"
nat e7bf5107-f2b7-46e3-ade3-cfa0da0eb7c5
external ip: "2001:XXXX:XXXX:600:1266:6aff:feb5:f75f"
logical ip: "2001:XXXX:XXXX:600:1266:6aff:feb5:f75f"
type: "dnat_and_snat"
nat ef4330ac-e3fd-4a76-96fe-ee7f64aecfa1
external ip: "2001:XXXX:XXXX:600:1266:6aff:fe82:f809"
logical ip: "2001:XXXX:XXXX:600:1266:6aff:fe82:f809"
type: "dnat_and_snat"
So I manually deleted the NAT rule:
ovn-nbctl remove Logical_Router incus-net11-lr nat e7bf5107-f2b7-46e3-ade3-cfa0da0eb7c5
and restarted the container. To my surprise, the nat rule just came back with a new UUID.
This looks like a bug, right?
Edit: I am on incus 7.3:
root@apricot:~# incus version
Client version: 7.3
Server version: 7.3