Avanzato Nuovo

OTBR + Matter Server con SLZB-06 su Proxmox

Come configurare un OpenThread Border Router e un Matter Server in container LXC su Proxmox VE, usando gli helper-scripts della community e un coordinatore SLZB-06 via rete. Alla fine, i tuoi dispositivi Matter over Thread saranno visibili in Home Assistant — senza cloud obbligatorio.

OpenThread Border Router e Matter Server su Proxmox con SLZB-06
Immagine generata con intelligenza artificiale
~60 minuti Proxmox VE 8.x SLZB-06 (PoE) Home Assistant Thread / Matter letture

1 Introduzione

Questa guida spiega come configurare un'antenna Thread (OpenThread Border Router) con Matter Server in LXC su Proxmox VE, usando gli helper-scripts della community (community-scripts.org). Perfetto per chi vuole portare in Home Assistant dispositivi Matter over Thread: sensori, lampadine, prese smart, ecc.

Architettura del sistema
┌─────────────────────────────────────────────────────┐
│                     Proxmox VE                      │
│                                                     │
│  ┌──────────┐    ┌──────────────┐    ┌───────────┐  │
│  │  OTBR    │    │ Matter Server│    │  Home     │  │
│  │  (LXC)   │◄──►│   (LXC)      │◄──►│ Assistant │  │
│  │10.x.x.17 │    │ 10.x.x.16    │    │  (LXC)    │  │
│  └────┬─────┘    └──────────────┘    └───────────┘  │
│       │ TCP 6638                                     │
│       ▼                                              │
│  ┌──────────┐                                        │
│  │ SLZB-06  │  (coordinator PoE)                     │
│  │10.x.x.200│                                        │
│  └──────────┘                                        │
└─────────────────────────────────────────────────────┘
  • SLZB-06: coordinator PoE collegato via Ethernet, agisce da RCP (Radio Co-Processor)
  • OTBR (OpenThread Border Router): collega la rete Thread alla LAN e all'IPv6
  • Matter Server: espone le API per far comunicare Home Assistant con i dispositivi Matter
  • Home Assistant: interfaccia utente finale, con integrazioni OTBR + Matter

2 Prerequisiti

Proxmox VE 8.xGià installato e configurato
Home AssistantGià installato (via helper-script o altro)
helper-scriptsAccesso alla shell Proxmox
SLZB-06Collegato via Ethernet (PoE)
Guarda i prodotti che ho recensito

Su teotek.me trovi tutti i componenti del mio setup Home Assistant — incluso lo SLZB-06 — con recensioni e link affiliati che supportano queste guide gratuitamente.

3 Configurazione iniziale SLZB-06

3.1 Assegnare IP statico

Accedi al WebUI dello SLZB-06 (http://slzb-06.local o dall'IP ricevuto via DHCP) e configura un IP statico per evitare che cambi dopo un riavvio del router:

  • IP: 192.168.1.200 (adatta alla tua subnet)
  • Subnet: 255.255.255.0
  • Gateway: 192.168.1.1
  • DNS: 1.1.1.1

3.2 Verificare la porta TCP

OTBR si connette allo SLZB-06 via TCP sulla porta 6638. Verifica la raggiungibilità dal Proxmox host prima di procedere:

bash
echo > /dev/tcp/192.168.1.200/6638 && echo "OK" || echo "FAIL"

4 Creazione LXC OTBR

4.1 Eseguire l'helper-script

Sul Proxmox host, esegui:

bash
bash -c "$(wget -qLO - https://github.com/community-scripts/ProxmoxVE/raw/main/ct/create_lxc.sh)"

Cerca "otbr" o "OpenThread Border Router" e segui la procedura guidata. Durante la creazione assicurati di:

  • Assegnare un IP statico (es. 192.168.1.17/24)
  • Inserire il gateway corretto
  • Abilitare l'avvio automatico (onboot)

4.2 Configurazione IP post-creazione

Se non hai impostato l'IP durante la creazione, modificalo da Proxmox:

bash
pct set 109 --net0 name=eth0,bridge=vmbr0,ip=192.168.1.17/24,gw=192.168.1.1

Oppure modifica direttamente /etc/network/interfaces dentro l'LXC:

/etc/network/interfaces
auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
    address 192.168.1.17/24
    gateway 192.168.1.1

E configura i DNS:

bash
echo -e "nameserver 1.1.1.1\nnameserver 1.0.0.1" > /etc/resolv.conf

5 Modifiche critiche all'LXC OTBR

5.1 TUN/TAP device

OTBR ha bisogno del device /dev/net/tun per creare l'interfaccia Thread (wpan0). Senza questo mount il servizio non parte.

Arresta l'LXC, poi aggiungi queste righe al file /etc/pve/lxc/109.conf (sostituisci 109 con il tuo VMID):

/etc/pve/lxc/109.conf
ini
lxc.cgroup2.devices.allow: c 10:200 rwm
lxc.mount.entry: /dev/net/tun dev/net/tun none bind,create=file
  • c 10:200 rwm — autorizza il device /dev/net/tun (major 10, minor 200) con permessi r/w
  • lxc.mount.entry — monta il device dal host dentro il container via bind mount
L'LXC creato dagli helper-scripts è unprivileged per default. Per questo i device vengono esposti tramite cgroup2.devices.allow invece di renderlo privileged.

In alternativa, usa pct set:

bash
pct set 109 -lxc.cgroup2.devices.allow "c 10:200 rwm"
pct set 109 -lxc.mount.entry "/dev/net/tun dev/net/tun none bind,create=file"

5.2 Verificare il mount

Riavvia l'LXC e controlla che il device sia presente:

bash
pct start 109
pct exec 109 -- ls -la /dev/net/tun
output atteso
crw------- 1 root root 10, 200 ... /dev/net/tun

6 Configurazione OTBR Agent

6.1 Modificare il file di configurazione

Il cuore della configurazione è /etc/default/otbr-agent dentro l'LXC OTBR. Per SLZB-06 (connessione via rete TCP):

/etc/default/otbr-agent
OTBR_AGENT_OPTS="-I wpan0 -B eth0 \
  --vendor-name OpenThread --model-name BorderRouter \
  --rest-listen-address 0.0.0.0 --rest-listen-port 8081 \
  spinel+hdlc+forkpty:///usr/bin/socat?forkpty-arg=-,rawer&forkpty-arg=tcp:192.168.1.200:6638 \
  trel://eth0"

Parametri spiegati:

  • -I wpan0 — nome dell'interfaccia Thread
  • -B eth0 — interfaccia di backbone (LAN)
  • --rest-listen-address 0.0.0.0 --rest-listen-port 8081 — REST API usata da Matter Server
  • spinel+hdlc+forkpty:///usr/bin/socat...tcp:192.168.1.200:6638 — usa socat come bridge tra TCP (SLZB-06) e pseudo-terminal (OTBR parla con un RCP via protocollo seriale)
  • trel://eth0 — abilita Thread Radio Encapsulation Link (migliora la comunicazione tra più border router)
Dongle USB (SkyConnect, Sonoff, ecc.): sostituisci la riga spinel+... con spinel+hdlc+uart:///dev/ttyACM0 e aggiungi il passthrough del device USB all'LXC.

6.2 Riavviare il servizio

bash
pct exec 109 -- systemctl restart otbr-agent
pct exec 109 -- systemctl enable otbr-agent

6.3 Abilitare IPv6 forwarding

OTBR abilita automaticamente net.ipv6.conf.all.forwarding = 1 all'avvio. Verificalo:

bash
pct exec 109 -- sysctl net.ipv6.conf.all.forwarding
# Atteso: net.ipv6.conf.all.forwarding = 1

Se non fosse attivo, aggiungilo in modo persistente:

/etc/sysctl.d/99-otbr-ipv6.conf
net.ipv6.conf.all.forwarding = 1
net.ipv6.conf.default.forwarding = 1

7 Verifica OTBR funzionante

7.1 Interfaccia Thread

bash
pct exec 109 -- ip link show wpan0
output atteso
wpan0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> ...

7.2 Stato del servizio

bash
pct exec 109 -- systemctl status otbr-agent

Deve mostrare active (running).

7.3 WebUI OTBR

bash
# Da terminale
pct exec 109 -- curl -s http://127.0.0.1
# Dal browser: http://192.168.1.17

7.4 Verifica connettività SLZB-06

bash
pct exec 109 -- bash -c 'echo > /dev/tcp/192.168.1.200/6638 && echo "OK" || echo "FAIL"'
Seguimi su Telegram

Iscriviti al canale per non perderti le prossime guide, aggiornamenti su Home Assistant e le ultime novità dal mondo smart home.

8 Creazione LXC Matter Server

8.1 Eseguire l'helper-script

bash
bash -c "$(wget -qLO - https://github.com/community-scripts/ProxmoxVE/raw/main/ct/create_lxc.sh)"

Cerca "matter-server" e segui la procedura, assegnando un IP statico sulla stessa rete (es. 192.168.1.16/24).

Matter Server e OTBR devono essere sulla stessa LAN (stessa subnet), perché Matter Server si connette a OTBR via REST API sulla porta 8081.

8.2 Verificare il servizio

bash
pct exec 108 -- systemctl status matter-server

Deve mostrare active (running).

8.3 WebUI Matter Server

Matter Server espone una WebUI sulla porta 5580:

bash
pct exec 108 -- curl -s http://127.0.0.1:5580
# Dal browser: http://192.168.1.16:5580

9 Firewall Proxmox

9.1 Il problema

Proxmox VE imposta la policy FORWARD di iptables su DROP per default. Questo blocca il traffico tra i vari LXC anche se sono sulla stessa bridge (vmbr0).

bash
iptables -L FORWARD -n
# Chain FORWARD (policy DROP)  ← PROBLEMA!

9.2 La soluzione

Aggiungi regole per accettare il forwarding sulla bridge principale:

bash
iptables -I FORWARD 1 -i vmbr0 -j ACCEPT
iptables -I FORWARD 1 -o vmbr0 -j ACCEPT

Per renderle permanenti dopo il riavvio:

bash
apt-get install -y iptables-persistent
netfilter-persistent save
Se usi il firewall integrato di Proxmox, puoi in alternativa abilitarlo sulla bridge con una policy di accettazione tra LXC invece di usare iptables direttamente.

10 Integrazione in Home Assistant

10.1 Aggiungere OTBR

  1. In HA vai su Impostazioni → Dispositivi e servizi → Aggiungi integrazione
  2. Cerca "OpenThread Border Router"
  3. Inserisci l'IP dell'LXC OTBR (es. 192.168.1.17) e la porta REST API (default: 8081)
  4. HA scoprirà automaticamente il border router

10.2 Aggiungere Matter

  1. Vai su Impostazioni → Dispositivi e servizi → Aggiungi integrazione
  2. Cerca "Matter"
  3. Inserisci l'IP dell'LXC Matter Server (es. 192.168.1.16)
  4. Segui la procedura di commissioning

10.3 Commissionare un dispositivo

Per aggiungere un dispositivo Matter over Thread:

  1. Metti il dispositivo in pairing mode (di solito reset o pressione lunga)
  2. In HA: Aggiungi dispositivo → Matter → Commissiona con codice
  3. Inserisci il codice di commissioning (QR code o manual code fornito col dispositivo)
Se tutto è configurato correttamente, il dispositivo verrà rilevato in pochi secondi e apparirà nella dashboard di Home Assistant con tutti i suoi attributi.

11 Troubleshooting

wpan0 non esiste o OTBR non parte
log
● otbr-agent.service - Main process exited, code=exited, status=1/FAILURE

Causa: manca il mount /dev/net/tun.

Soluzione: verifica e aggiungi le righe cgroup2.devices.allow e lxc.mount.entry al file di configurazione LXC (sezione 5.1).

Connection refused verso SLZB-06
log
bash: connect: Connection refused
bash: /dev/tcp/192.168.1.200/6638: Connection refused

Cause possibili: SLZB-06 non raggiungibile sulla rete, porta 6638 chiusa o disabilitata nel firmware, firewall tra VLAN diverse.

Soluzione: verifica la connettività di rete e accedi al WebUI dello SLZB-06 per controllare le impostazioni della porta TCP.

OTBR parte ma non si connette allo SLZB-06
log
journalctl -u otbr-agent -f
...
[ERROR] Failed to connect to RCP: Connection refused

Causa: il comando socat in OTBR_AGENT_OPTS punta all'IP sbagliato o la porta è errata.

Soluzione: controlla IP e porta in /etc/default/otbr-agent. Ricorda che il carattere & nell'URL socat deve rimanere & (non codificato HTML) nel file di config.

I dispositivi Matter non vengono scoperti

Cause possibili: Matter Server non raggiunge OTBR sulla porta 8081, il dispositivo non è in modalità pairing, la rete Thread non è attiva.

Soluzione: verifica la REST API di OTBR da Matter Server:

bash
pct exec 108 -- curl -s http://192.168.1.17:8081
IPv6 non funzionante

OTBR richiede IPv6 per il routing Thread. Verifica:

bash
pct exec 109 -- sysctl net.ipv6.conf.all.forwarding
# Deve essere = 1

pct exec 109 -- ip -6 addr show eth0
# Deve mostrare almeno un indirizzo IPv6 link-local (fe80::...)

Se manca IPv6 su eth0: verifica che il router assegni IPv6 via SLAAC o DHCPv6. Proxmox deve avere IPv6 abilitato sulla bridge vmbr0.

Hai trovato utile questa guida?

Supporta il progetto visitando teotek.me per i link ai prodotti consigliati, e unisciti al canale Telegram per non perderti le prossime guide.