Esegui Docker OTBR

Visualizza il codice sorgente su GitHub

Il router di confine OpenThread (OTBR) richiede un nodo RCP Thread per poter accedere a una rete Thread. OTBR Docker fornisce supporto sia per una chiavetta RCP (OpenThread) fisica che per una chiave RCP simulata.

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

RCP fisica

Utilizza qualsiasi piattaforma OpenThread supportata per l'RCP fisico. Per ulteriori informazioni, consulta il passaggio Compila e esegui il flashing dell'RCP della guida alla compilazione e alla configurazione del router di confine OpenThread.

Collega il cavo RCP

  1. Dopo la creazione e il flashing, collega il dispositivo RCP alla macchina che esegue OTBR Docker tramite USB.
  2. Per determinare il nome della porta seriale del dispositivo RCP, controlla /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 dell'RCP. Ad esempio, se la cassetta di derivazione è montata a /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

Se l'operazione riesce, l'output visualizzato 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.

OTBR Docker è ora in esecuzione. Lascia questa finestra del terminale aperta e in esecuzione in background. Se esci dal processo o chiudi la finestra, OTBR Docker verrà arrestato.

Vai a Testa la connettività per continuare con la configurazione di Docker OTBR.

RCP simulata

Utilizza una build RCP OpenThread simulata per l'RCP simulata. Questa operazione è utile se vuoi testare il routing di confine con una rete Thread simulata su un'unica macchina.

Crea l'applicazione RCP simulata

  1. Clona il repository OpenThread:

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

  2. Esegui il bootstrap e crea l'applicazione simulata:

    cd openthread
    ./script/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 il contenitore Docker RCP e OTBR simulato.

  1. Apri una nuova finestra del terminale per eseguire questo processo, che deve essere lasciato in esecuzione mentre Docker OTBR è in esecuzione.

  2. Installa socat:

    sudo apt-get install socat
    

  3. Avvio 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. Usa la prima per l'RCP simulato e la seconda per OTBR Docker. Nell'output di esempio riportato sopra:

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

Lascia questa finestra del terminale aperta e in esecuzione in background.

Avvia l'RCP simulato

  1. Apri una nuova finestra del terminale per eseguire l'RCP simulata, che deve essere lasciata in esecuzione mentre è in esecuzione 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/build/simulation/examples/apps/ncp/ot-rcp 1 > /dev/pts/2 < /dev/pts/2
    

Questo comando non genera output. Lascia questa finestra del terminale aperta 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'outputsocat. 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 il comando utilizza anche la porta /dev/ttyUSB0. Questo è il punto di montaggio predefinito all'interno del contenitore Docker.

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

Docker OTBR è ora in esecuzione. Lascia questa finestra del terminale aperta e in esecuzione in background. Se esci dal processo o chiudi la finestra, Docker OTBR verrà disattivato.