Skip to content

Duplicate resolved IPv6 addresses when using multiple network interfaces #372

@hrzlgnm

Description

@hrzlgnm

Having 2 Network interfaces connected to 2 different networks which are not interconnected in any way. I can observe duplication of IPv6 addresses with the scope_id of the other network where the addresses cannot actually be reached.

Query example for _http._tcp

At 348.62µs: SearchStarted("_http._tcp.local. on 6 interfaces [fe80::3236:543d:a120:72e5 (wlp13s0), 192.168.179.7 (wlp13s0), 192.168.178.53 (enp12s0), 2003:e8:bf13:1300:a491:e24f:acbf:68c3 (enp12s0), fe80::b7a:957b:f7e1:9b0e (enp12s0), 2003:e8:bf13:1301:e1f1:dd6c:fb10:b831 (wlp13s0)]")
At 70.418189ms: ServiceFound("_http._tcp.local.", "Denon AVR-X1400H._http._tcp.local.")
At 70.433569ms: Resolved a new service: Denon AVR-X1400H._http._tcp.local.
 host: Denon-AVR-X1400H.local.
 port: 80
 Address: 2003:e8:bf13:1300:205:cdff:fea5:86b0%2
 Address: fe80::205:cdff:fea5:86b0%2
 Address: 192.168.178.21
 Property: path=/settings/
At 70.461459ms: Resolved a new service: Denon AVR-X1400H._http._tcp.local.
 host: Denon-AVR-X1400H.local.
 port: 80
 Address: fe80::205:cdff:fea5:86b0%3
 Address: 2003:e8:bf13:1300:205:cdff:fea5:86b0%2
 Address: fe80::205:cdff:fea5:86b0%2
 Address: 192.168.178.21
 Address: 2003:e8:bf13:1300:205:cdff:fea5:86b0%3
 Property: path=/settings/
At 332.554357ms: ServiceFound("_http._tcp.local.", "Tibber Bridge Web Server._http._tcp.local.")
At 332.567917ms: Resolved a new service: Tibber Bridge Web Server._http._tcp.local.
 host: Bridge20c228000.local.
 port: 80
 Address: 192.168.178.33
At 332.574957ms: Resolved a new service: Tibber Bridge Web Server._http._tcp.local.
 host: Bridge20c228000.local.
 port: 80
 Address: 192.168.178.33

What's also strange, if one disables WiFi one can only observe one resolve of each instance, in the example before we can could observe 2 for each:

At 280.27µs: SearchStarted("_http._tcp.local. on 3 interfaces [fe80::b7a:957b:f7e1:9b0e (enp12s0), 192.168.178.53 (enp12s0), 2003:e8:bf13:1300:a491:e24f:acbf:68c3 (enp12s0)]")
At 44.121358ms: ServiceFound("_http._tcp.local.", "Denon AVR-X1400H._http._tcp.local.")
At 44.137018ms: Resolved a new service: Denon AVR-X1400H._http._tcp.local.
 host: Denon-AVR-X1400H.local.
 port: 80
 Address: fe80::205:cdff:fea5:86b0%2
 Address: 192.168.178.21
 Address: 2003:e8:bf13:1300:205:cdff:fea5:86b0%2
 Property: path=/settings/
At 712.481579ms: ServiceFound("_http._tcp.local.", "Tibber Bridge Web Server._http._tcp.local.")
At 712.507919ms: Resolved a new service: Tibber Bridge Web Server._http._tcp.local.
 host: Bridge20c228000.local.
 port: 80
 Address: 192.168.178.33

From the output addresses i can only ping link local IPv6 addresses with the interface index 2, not 3.

Ping using index 3 (wlp13s0) which is connected to a guest WiFi:

ping fe80::205:cdff:fea5:86b0%3
PING fe80::205:cdff:fea5:86b0%3 (fe80::205:cdff:fea5:86b0%wlp13s0) 56 data bytes
From fe80::3236:543d:a120:72e5%wlp13s0 icmp_seq=1 Destination unreachable: Address unreachable
From fe80::3236:543d:a120:72e5%wlp13s0 icmp_seq=2 Destination unreachable: Address unreachable
From fe80::3236:543d:a120:72e5%wlp13s0 icmp_seq=3 Destination unreachable: Address unreachable

Ping using index 2(enp12s0):

ping fe80::205:cdff:fea5:86b0%2
PING fe80::205:cdff:fea5:86b0%2 (fe80::205:cdff:fea5:86b0%enp12s0) 56 data bytes
64 bytes from fe80::205:cdff:fea5:86b0%enp12s0: icmp_seq=1 ttl=255 time=0.864 ms
64 bytes from fe80::205:cdff:fea5:86b0%enp12s0: icmp_seq=2 ttl=255 time=0.384 ms
64 bytes from fe80::205:cdff:fea5:86b0%enp12s0: icmp_seq=3 ttl=255 time=0.390 ms

Output of ip addr show:

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host proto kernel_lo
       valid_lft forever preferred_lft forever
2: enp12s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether d8:43:ae:b3:ea:97 brd ff:ff:ff:ff:ff:ff
    inet 192.168.178.53/24 brd 192.168.178.255 scope global dynamic noprefixroute enp12s0
       valid_lft 860430sec preferred_lft 860430sec
    inet6 2003:e8:bf13:1300:a491:e24f:acbf:68c3/64 scope global dynamic noprefixroute
       valid_lft 6861sec preferred_lft 1461sec
    inet6 fe80::b7a:957b:f7e1:9b0e/64 scope link noprefixroute
       valid_lft forever preferred_lft forever
3: wlp13s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 58:cd:c9:86:54:1f brd ff:ff:ff:ff:ff:ff
    inet 192.168.179.7/24 brd 192.168.179.255 scope global dynamic noprefixroute wlp13s0
       valid_lft 21149sec preferred_lft 21149sec
    inet6 2003:e8:bf13:1301:e1f1:dd6c:fb10:b831/64 scope global dynamic noprefixroute
       valid_lft 6862sec preferred_lft 1461sec
    inet6 fe80::3236:543d:a120:72e5/64 scope link noprefixroute
       valid_lft forever preferred_lft forever
4: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
    link/ether 52:54:00:cb:66:f6 brd ff:ff:ff:ff:ff:ff
    inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
       valid_lft forever preferred_lft forever
5: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
    link/ether 6e:03:f8:11:28:dd brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
       valid_lft forever preferred_lft forever

The issue was probably hidden behind the HashSet<IpAddr> previously and not noticeable, but now we use HashSet<HostIp> which exposes the issue.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions