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.
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.
┌─────────────────────────────────────────────────────┐ │ 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
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:
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 -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:
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:
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:
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):
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/wlxc.mount.entry— monta il device dal host dentro il container via bind mount
cgroup2.devices.allow invece di renderlo privileged.In alternativa, usa pct set:
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:
pct start 109
pct exec 109 -- ls -la /dev/net/tun
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):
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 Serverspinel+hdlc+forkpty:///usr/bin/socat...tcp:192.168.1.200:6638— usasocatcome 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)
spinel+...
con spinel+hdlc+uart:///dev/ttyACM0 e aggiungi il passthrough del device USB all'LXC.6.2 Riavviare il servizio
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:
pct exec 109 -- sysctl net.ipv6.conf.all.forwarding
# Atteso: net.ipv6.conf.all.forwarding = 1
Se non fosse attivo, aggiungilo in modo persistente:
net.ipv6.conf.all.forwarding = 1
net.ipv6.conf.default.forwarding = 1
7 Verifica OTBR funzionante
7.1 Interfaccia Thread
pct exec 109 -- ip link show wpan0
wpan0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> ...
7.2 Stato del servizio
pct exec 109 -- systemctl status otbr-agent
Deve mostrare active (running).
7.3 WebUI OTBR
# 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
pct exec 109 -- bash -c 'echo > /dev/tcp/192.168.1.200/6638 && echo "OK" || echo "FAIL"'
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 -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).
8081.8.2 Verificare il servizio
pct exec 108 -- systemctl status matter-server
Deve mostrare active (running).
8.3 WebUI Matter Server
Matter Server espone una WebUI sulla porta 5580:
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).
iptables -L FORWARD -n
# Chain FORWARD (policy DROP) ← PROBLEMA!
9.2 La soluzione
Aggiungi regole per accettare il forwarding sulla bridge principale:
iptables -I FORWARD 1 -i vmbr0 -j ACCEPT
iptables -I FORWARD 1 -o vmbr0 -j ACCEPT
Per renderle permanenti dopo il riavvio:
apt-get install -y iptables-persistent
netfilter-persistent save
10 Integrazione in Home Assistant
10.1 Aggiungere OTBR
- In HA vai su Impostazioni → Dispositivi e servizi → Aggiungi integrazione
- Cerca "OpenThread Border Router"
- Inserisci l'IP dell'LXC OTBR (es.
192.168.1.17) e la porta REST API (default:8081) - HA scoprirà automaticamente il border router
10.2 Aggiungere Matter
- Vai su Impostazioni → Dispositivi e servizi → Aggiungi integrazione
- Cerca "Matter"
- Inserisci l'IP dell'LXC Matter Server (es.
192.168.1.16) - Segui la procedura di commissioning
10.3 Commissionare un dispositivo
Per aggiungere un dispositivo Matter over Thread:
- Metti il dispositivo in pairing mode (di solito reset o pressione lunga)
- In HA: Aggiungi dispositivo → Matter → Commissiona con codice
- Inserisci il codice di commissioning (QR code o manual code fornito col dispositivo)
11 Troubleshooting
wpan0 non esiste o OTBR non parte● 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-06bash: 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.
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.
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:
pct exec 108 -- curl -s http://192.168.1.17:8081
OTBR richiede IPv6 per il routing Thread. Verifica:
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.
Supporta il progetto visitando teotek.me per i link ai prodotti consigliati, e unisciti al canale Telegram per non perderti le prossime guide.