Visualizza l'origine su GitHub
Il router di confine OpenThread (OTBR) richiede un nodo RCP di Thread per accedere a una rete Thread. OTBR Docker fornisce supporto per un RCP fisico (chiavetta OpenThread) o per un RCP simulato.
Se vuoi connettere OTBR Docker ad altri dispositivi Thread fisici, utilizza un RCP fisico. Se vuoi testare il routing del confine con una rete Thread simulata, utilizza un RCP simulato.
RCP fisico
Utilizza una qualsiasi piattaforma OpenThread supportata per il RCP fisico. Per ulteriori informazioni, consulta il passaggio Build and flash RCP della guida alla creazione e alla configurazione del router di confine OpenThread.
Collega RCP
- Dopo la creazione e il lampeggiamento, collega il dispositivo RCP alla macchina che esegue Docker OTBR tramite USB.
- Determina il nome della porta seriale per il dispositivo RCP selezionando
/dev
:ls /dev/tty*
/dev/ttyACMO
Avvia il container Docker OTBR
In una nuova finestra del terminale, avvia Docker di OTBR, facendo riferimento alla porta seriale dell'RCP.
Ad esempio, se il valore RCP è montato su /dev/ttyACM0
:
docker run --sysctl "net.ipv6.conf.all.disable_ipv6=0 net.ipv4.conf.all.forwarding=1 net.ipv6.conf.all.forwarding=1" -p 8080:80 --dns=127.0.0.1 -it --volume /dev/ttyACM0:/dev/ttyACM0 --privileged openthread/otbr --radio-url spinel+hdlc+uart:///dev/ttyACM0
In caso di esito positivo, l'output dovrebbe essere simile al seguente:
WARNING: Localhost DNS setting (--dns=127.0.0.1) may fail in containers. RADIO_URL: spinel+hdlc+uart:///dev/ttyACM0 TUN_INTERFACE_NAME: wpan0 NAT64_PREFIX: 64:ff9b::/96 AUTO_PREFIX_ROUTE: true AUTO_PREFIX_SLAAC: true Current platform is ubuntu * Applying /etc/sysctl.d/10-console-messages.conf ... kernel.printk = 4 4 1 7 * Applying /etc/sysctl.d/10-ipv6-privacy.conf ... net.ipv6.conf.all.use_tempaddr = 2 net.ipv6.conf.default.use_tempaddr = 2 * Applying /etc/sysctl.d/10-kernel-hardening.conf ... kernel.kptr_restrict = 1 * Applying /etc/sysctl.d/10-link-restrictions.conf ... fs.protected_hardlinks = 1 fs.protected_symlinks = 1 * Applying /etc/sysctl.d/10-magic-sysrq.conf ... kernel.sysrq = 176 * Applying /etc/sysctl.d/10-network-security.conf ... net.ipv4.conf.default.rp_filter = 1 net.ipv4.conf.all.rp_filter = 1 net.ipv4.tcp_syncookies = 1 * Applying /etc/sysctl.d/10-ptrace.conf ... kernel.yama.ptrace_scope = 1 * Applying /etc/sysctl.d/10-zeropage.conf ... vm.mmap_min_addr = 65536 * Applying /etc/sysctl.d/60-otbr-ip-forward.conf ... net.ipv6.conf.all.forwarding = 1 net.ipv4.ip_forward = 1 * Applying /etc/sysctl.conf ... * Starting userspace NAT64 tayga [ OK ] /usr/sbin/service * Starting domain name service... bind9 [ OK ] /usr/sbin/service * dbus is not running * Starting system message bus dbus [ OK ] ...fail! otWeb[155]: border router web started on wpan0 otbr-agent[224]: Thread interface wpan0 otbr-agent[224]: Thread is down otbr-agent[224]: Check if Thread is up: OK otbr-agent[224]: Stop publishing service otbr-agent[224]: PSKc is not initialized otbr-agent[224]: Check if PSKc is initialized: OK otbr-agent[224]: Initialize OpenThread Border Router Agent: OK otbr-agent[224]: Border router agent started.
Il Docker OTBR è ora in esecuzione. Lascia aperta e in esecuzione questa finestra di terminale. Se chiudi il processo o chiudi la finestra, OTBR Docker non sarà disponibile.
Vai a Test Connectivity (Prova connettività) per continuare con la configurazione di Docker di OTBR.
RCP simulato
Usa una build RCP OpenThread simulata per la RCP simulata. Ciò è utile se vuoi testare il routing del confine con una rete Thread simulata su un'unica macchina.
Crea l'applicazione RCP simulata
Clona il repository OpenThread:
cd ~
git clone https://github.com/openthread/openthread
Avvia il bootstrap e crea l'applicazione simulata:
cd openthread
./bootstrap
./script/cmake-build simulation
Configurare uno stream di dati bidirezionale
Utilizza l'utilità a riga di comando socat
per stabilire uno stream di dati bidirezionale per trasferire i dati tra RCP simulato e Docker OTBR.
Apri una nuova finestra del terminale per eseguire questo processo, che deve essere lasciato in esecuzione mentre Docker di OTBR è in esecuzione.
Installa
socat
:sudo apt-get install socat
Avvia
socat
:socat -d -d pty,raw,echo=0 pty,raw,echo=0
2018/09/06 09:58:29 socat[242994] N PTY is /dev/pts/2 2018/09/06 09:58:29 socat[242994] N PTY is /dev/pts/7 2018/09/06 09:58:29 socat[242994] N starting data transfer loop with FDs [5,5] and [7,7]
Annota le due porte seriali in grassetto nell'output. Utilizza il primo per l'RCP simulato e il secondo per OTBR Docker. Nell'esempio precedente,
/dev/pts/2
= porta RCP simulata/dev/pts/7
= Docker OTBR
Lascia aperta e in esecuzione questa finestra del terminale in background.
Avvia il valore RCP simulato
Apri una nuova finestra del terminale per eseguire l'RCP simulato, che deve essere lasciato in esecuzione mentre Docker di OTBR è in esecuzione.
Utilizzando la prima porta seriale nell'output
socat
, avvia l'applicazione RCP simulata. Ad esempio, se utilizzi/dev/pts/2
dall'output disocat
:~/openthread/build/simulation/examples/apps/ncp/ot-rcp 1 > /dev/pts/2 < /dev/pts/2
Nessun output di questo comando. Lascia aperta la finestra del terminale e in esecuzione in background.
Avvia il container Docker OTBR
In una nuova finestra del terminale, avvia Docker di OTBR utilizzando la seconda porta seriale nell'output socat
. Ad esempio, se utilizzi /dev/pts/7
dall'output di socat
:
docker run --sysctl "net.ipv6.conf.all.disable_ipv6=0 net.ipv4.conf.all.forwarding=1 net.ipv6.conf.all.forwarding=1" -p 8080:80 --dns=127.0.0.1 -it --volume /dev/pts/7:/dev/ttyUSB0 --privileged openthread/otbr
Tieni presente che il comando utilizza anche la porta /dev/ttyUSB0
. Questo è il punto di montaggio predefinito all'interno del container Docker.
In caso di esito positivo, l'output dovrebbe essere simile al seguente:
WARNING: Localhost DNS setting (--dns=127.0.0.1) may fail in containers. RADIO_URL: spinel+hdlc+uart:///dev/ttyUSB0 TUN_INTERFACE_NAME: wpan0 NAT64_PREFIX: 64:ff9b::/96 AUTO_PREFIX_ROUTE: true AUTO_PREFIX_SLAAC: true Current platform is ubuntu * Applying /etc/sysctl.d/10-console-messages.conf ... kernel.printk = 4 4 1 7 * Applying /etc/sysctl.d/10-ipv6-privacy.conf ... net.ipv6.conf.all.use_tempaddr = 2 net.ipv6.conf.default.use_tempaddr = 2 * Applying /etc/sysctl.d/10-kernel-hardening.conf ... kernel.kptr_restrict = 1 * Applying /etc/sysctl.d/10-link-restrictions.conf ... fs.protected_hardlinks = 1 fs.protected_symlinks = 1 * Applying /etc/sysctl.d/10-magic-sysrq.conf ... kernel.sysrq = 176 * Applying /etc/sysctl.d/10-network-security.conf ... net.ipv4.conf.default.rp_filter = 1 net.ipv4.conf.all.rp_filter = 1 net.ipv4.tcp_syncookies = 1 * Applying /etc/sysctl.d/10-ptrace.conf ... kernel.yama.ptrace_scope = 1 * Applying /etc/sysctl.d/10-zeropage.conf ... vm.mmap_min_addr = 65536 * Applying /etc/sysctl.d/60-otbr-ip-forward.conf ... net.ipv6.conf.all.forwarding = 1 net.ipv4.ip_forward = 1 * Applying /etc/sysctl.conf ... * Starting userspace NAT64 tayga [ OK ] /usr/sbin/service * Starting domain name service... bind9 [ OK ] /usr/sbin/service * dbus is not running * Starting system message bus dbus [ OK ] ...fail! otWeb[155]: border router web started on wpan0 otbr-agent[224]: Thread interface wpan0 otbr-agent[224]: Thread is down otbr-agent[224]: Check if Thread is up: OK otbr-agent[224]: Stop publishing service otbr-agent[224]: PSKc is not initialized otbr-agent[224]: Check if PSKc is initialized: OK otbr-agent[224]: Initialize OpenThread Border Router Agent: OK otbr-agent[224]: Border router agent started.
Il Docker OTBR è ora in esecuzione. Lascia aperta e in esecuzione questa finestra di terminale. Se chiudi il processo o chiudi la finestra, OTBR Docker non sarà disponibile.