Esegui Docker OTBR

Visualizza sorgente su GitHub

Il router OpenThread Border Router (OTBR) richiede un nodo Thread RCP per unirsi a una rete Thread. OTBR Docker fornisce supporto per una RCP fisica (OpenThread dongle) o per una RCP simulata.

Se vuoi connettere Docker OTBR ad altri dispositivi Thread fisici, utilizza un RCP fisico. Se vuoi testare il routing dei confini con una rete Thread simulata, utilizza un RCP simulato.

RCP fisico

Utilizza qualsiasi piattaforma OpenThread supportata per il RCP fisico. Per ulteriori informazioni, consulta il passaggio Build and flash RCP della guida alla configurazione e alla configurazione del router OpenThread Border.

Allega la richiesta RCP

  1. Dopo aver creato e lampeggiato, collega il dispositivo RCP alla macchina che esegue OTBR Docker tramite USB.
  2. Determina il nome della porta seriale per il dispositivo RCP controllando /dev:
    ls /dev/tty*
    /dev/ttyACMO
    

Avvia il container Docker OTBR

In una nuova finestra del terminale, avvia Docker OTBR, facendo riferimento alla porta seriale di RCP. Ad esempio, se l'RCP è montato in /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, dovresti avere un output 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.

OTBR Docker è ora in esecuzione. Lascia aperta questa finestra del terminale in esecuzione in background. Se esci dal processo o chiudi la finestra, OTBR Docker si abbassa.

Vai a Test Connectivity (Prova connettività) per continuare la configurazione di Docker per OTBR.

RCP simulato

Utilizza una build RCP OpenThread simulata per l'RCP simulato. Questo è utile se vuoi testare il routing dei confini con una rete Thread simulata su una singola macchina.

Creazione dell'applicazione RCP simulata

  1. Clona il repository OpenThread:

    cd ~
    git clone https://github.com/openthread/openthread
    

  2. Avvia e crea l'applicazione simulata:

    cd openthread
    ./bootstrap
    make -f examples/Makefile-simulation
    

Configurazione di 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 il Docker RCP e l'OTBR Docker.

  1. Per eseguire questo processo, apri una nuova finestra del terminale, in quanto deve essere lasciata in esecuzione durante l'esecuzione di Docker OTBR.

  2. Installa socat:

    sudo apt-get install socat
    

  3. Inizio 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]
    

Prendi nota delle due porte seriali, in grassetto nell'output. Utilizza il primo per il RCP simulato e il secondo per Docker OTBR. Nell'output di esempio riportato sopra:

  • /dev/pts/2 = Porta RCP simulata
  • /dev/pts/7 = Docker OTBR

Lascia aperta questa finestra del terminale in esecuzione in background.

Avvia la simulazione RCP

  1. Apri una nuova finestra del terminale per eseguire la simulazione RCP, poiché deve essere lasciata in esecuzione mentre Docker OTBR.

  2. Utilizzando la prima porta seriale nell'output socat, avvia l'applicazione RCP simulata. Ad esempio, se utilizzi /dev/pts/2 dall'output socat:

    ~/openthread/output/simulation/bin/ot-rcp 1 > /dev/pts/2 < /dev/pts/2
    

Nessun output da questo comando. Lascia aperta questa finestra del terminale e in esecuzione in background.

Avvia il container Docker OTBR

In una nuova finestra del terminale, avvia Docker OTBR, utilizzando la seconda porta seriale nell'output di socat. Ad esempio, se utilizzi /dev/pts/7 dall'output 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 anche il comando usa la porta /dev/ttyUSB0. Questo è il punto di montaggio predefinito all'interno del container Docker.

In caso di esito positivo, dovresti avere un output 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.

OTBR Docker è ora in esecuzione. Lascia aperta questa finestra del terminale in esecuzione in background. Se esci dal processo o chiudi la finestra, OTBR Docker si abbassa.