OTBR-Docker ausführen

<ph type="x-smartling-placeholder"></ph> Quelle auf GitHub ansehen

OpenThread Border Router (OTBR) benötigt einen Thread-RCP-Knoten, um eine Verbindung mit einem Thread-Netzwerk. OTBR-Docker bietet Unterstützung für ein physisches RCP (OpenThread) Dongle) oder einem simulierten RCP.

Wenn Sie OTBR-Docker mit anderen physischen Thread-Geräten verbinden möchten, verwenden Sie einen physischer RCP. Wenn Sie das Border-Routing mit einem simulierten Thread testen möchten ein simuliertes RCP.

Physischer RCP

Verwenden Sie eine beliebige unterstützte OpenThread-Plattform für das physischer RCP. Weitere Informationen finden Sie im Abschnitt Build- und Flash-RCP. aus dem Erstellungs- und Konfigurationsleitfaden für den OpenThread-Border-Router Informationen.

RCP anhängen

  1. Hängen Sie nach dem Erstellen und Flashen das RCP-Gerät an die ausgeführte Maschine an. OTBR-Docker über USB
  2. Ermitteln Sie den Namen des seriellen Ports für das RCP-Gerät. Prüfen Sie dazu /dev:
    ls /dev/tty*
    /dev/ttyACMO
    

OTBR-Docker-Container starten

Starten Sie OTBR-Docker in einem neuen Terminalfenster und verweisen Sie dabei auf den seriellen Port des RCP. Wenn das RCP beispielsweise unter /dev/ttyACM0 bereitgestellt wird:

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

Bei Erfolg sollte die Ausgabe in etwa so aussehen:

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 wird jetzt ausgeführt. Lassen Sie dieses Terminalfenster geöffnet und führen Sie es im Hintergrund. Wenn Sie den Prozess beenden oder das Fenster schließen, wird OTBR-Docker

Gehen Sie zu Verbindung testen, um Fahren Sie mit der OTBR-Docker-Einrichtung fort.

Simulierter RCP

Verwenden Sie einen simulierten OpenThread-RCP-Build für das simulierte RCP. Dies ist nützlich, wenn möchten Sie das Border Routing mit einem simulierten Thread-Netzwerk Maschine.

Simulierte RCP-Anwendung erstellen

  1. Klonen Sie das OpenThread-Repository:

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

  2. Führen Sie ein Bootstrapping der simulierten Anwendung aus und erstellen Sie sie:

    cd openthread
    ./script/bootstrap
    ./script/cmake-build simulation
    

Bidirektionalen Datenstream einrichten

Mit dem socat-Befehlszeilendienstprogramm einen bidirektionalen Datenstream einrichten um Daten zwischen dem simulierten RCP und dem OTBR-Docker zu übertragen.

  1. Öffnen Sie ein neues Terminalfenster, um diesen Prozess auszuführen. Er muss noch ausgeführt werden. während OTBR-Docker ausgeführt wird.

  2. Installieren Sie socat:

    sudo apt-get install socat
    

  3. Starten Sie 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]
    

Notieren Sie sich die beiden seriellen Ports, die in der Ausgabe fett hervorgehoben sind. Die erste verwenden für das simulierte RCP und das zweite für OTBR-Docker. In der Beispielausgabe oben:

  • /dev/pts/2 = Simulierter RCP-Port
  • /dev/pts/7 = OTBR-Docker

Lassen Sie dieses Terminalfenster geöffnet und im Hintergrund laufen.

Simulierten RCP starten

  1. Öffnen Sie ein neues Terminalfenster, um das simulierte RCP auszuführen, da es noch vorhanden sein muss während OTBR Docker ausgeführt wird.

  2. Starten Sie mit dem ersten seriellen Port in der socat-Ausgabe das simulierte RCP. . Wenn Sie beispielsweise /dev/pts/2 aus der socat-Ausgabe verwenden:

    ~/openthread/build/simulation/examples/apps/ncp/ot-rcp 1 > /dev/pts/2 < /dev/pts/2
    

Von diesem Befehl gibt es keine Ausgabe. Lassen Sie dieses Terminalfenster geöffnet und die im Hintergrund laufen.

OTBR-Docker-Container starten

Starten Sie OTBR-Docker in einem neuen Terminalfenster über den zweiten seriellen Port im socat-Ausgabe. Wenn Sie beispielsweise /dev/pts/7 aus der socat-Ausgabe verwenden:

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

Beachten Sie, dass der Befehl auch den Port /dev/ttyUSB0 verwendet. Dies ist die Standardeinstellung. Bereitstellungspunkt im Docker-Container.

Bei Erfolg sollte die Ausgabe in etwa so aussehen:

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 wird jetzt ausgeführt. Lassen Sie dieses Terminalfenster geöffnet und führen Sie es im Hintergrund. Wenn Sie den Prozess beenden oder das Fenster schließen, wird OTBR-Docker