Matter over Thread - Cannot commission IKEA device - IPv6 routing issue

Matter over Thread - Cannot commission IKEA device - IPv6 routing issue

Setup:

  • Home Assistant OS 17.3, Core 2026.5.4 (running on generic x86 hardware)
  • ZBT-2 USB dongle used as Thread border router via OpenThread Border Router add-on (latest version)
  • Google TV Streamer (also a Thread border router)
  • IKEA Motion Sensor - Matter over Thread (factory reset)
  • IPv6 set to Automatic in HA network settings
  • Network adapter set to Autoconfigure

Background / What worked before:
Originally, I only had the Google TV Streamer as a Thread border router. The IKEA Motion Sensor (Matter over Thread) was working perfectly .

After purchasing and installing the ZBT-2 USB dongle and setting up the OpenThread Border Router add-on, everything broke. and I can no longer commission any Matter over Thread devices.

What I did to try to fix it:

  1. HA OTBR was originally on its own network (ha-thread-2738, channel 15)
  2. Google TV Streamer was on Google-24CD network (channel 18, PAN 0x24CD)
  3. Successfully joined HA OTBR to the Google-24CD network using the correct Network Key extracted from the Thread TLV stored in /config/.storage/thread.datasets
  4. Both border routers (Google TV Streamer + HA OTBR homeassistant-otbr.local) are now visible on the same Google-24CD network :white_check_mark:
  5. OTBR Status page shows: RCP State = router, WPAN service = associated, Network Name = Google-24CD, Channel = 18 :white_check_mark:
  6. Thread credentials sent from Android phone to Home Assistant
  7. Tried setting Backbone Network Interface to enp1s0, then tried leaving it blank - no change

The problem:
When trying to commission the IKEA Matter device via HA (Settings > Devices > Matter > Add device), it fails with "Cannot reach device".

Same error when trying via Google Home app.

Matter Server logs show:
The device IS discovered via mDNS:

Discovered commissionable Matter node: AsyncServiceInfo(..., name='57D0FDA4CB42BE17._matterc._udp.local.', addresses=[b'\xc0\xa8\x00['], port=5540, ..., 'DN': b'Smart Multicolor Bulb', interface_index=None)

But then disappears before commissioning completes:

Commissionable Matter node disappeared: AsyncServiceInfo(..., addresses=[], port=None, ...)

Note: the address \xc0\xa8\x00 is IPv4 (192.168.x.x) with interface_index=None - no IPv6 Thread address is discovered.

OTBR logs show the IKEA device IS connected to the Thread network:

DataPollHandlr: Rx data poll, src:0x3801, rss:-75 (every 500ms)
RadioSelector: UpdateOnRx 15.4 - neighbor:[06aabc2646583bb8 rloc16:0x3801]

The IKEA motion sensor is communicating with the OTBR on Thread, but HA cannot reach it via IPv6.

IPv6 routing issue:
Running ip -6 route show in the SSH terminal shows:

fd0c:ac1e:2100::/48 dev eth0 metric 256
fe80::/64 dev eth0 metric 256
default via fd0c:ac1e:2100::1 dev eth0 metric 1024

There is NO route to the Thread mesh-local prefix (fdc5:8cf6:88e3:4e76::/64).

HA's IPv6 address on enp1s0 is fd13:4707:e1a3:b7b4:ba85:84ff:feb6:abf3/64 which is a different prefix than the Thread network.

Reference:
I found this article describing a similar issue: Home Assistant Was Unable to Add IKEA Matter Devices – Majornetwork
The fix described there (changing IPv6 from Static to Automatic) does not apply here as IPv6 is already set to Automatic.

Question:
How do I get HA to properly route IPv6 traffic to the Thread mesh-local network so Matter commissioning can succeed? Is there a specific configuration needed for the OTBR add-on to properly advertise its routes to HA?

Thank you!