OTBR-Docker ausführen

Mit Sammlungen den Überblick behalten Sie können Inhalte basierend auf Ihren Einstellungen speichern und kategorisieren.

Quelle auf GitHub ansehen

Der OpenThread Border Router (OTBR) benötigt einen Thread RCP-Knoten, um einem Thread-Netzwerk beizutreten. OTBR-Docker bietet Unterstützung für einen physischen RCP (OpenThread-Dongle) oder einen simulierten RCP.

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

Physischer RCP

Verwenden Sie eine beliebige unterstützte OpenThread-Plattform für den physischen RCP. Weitere Informationen finden Sie im Schritt Build und Flash RCP im Build- und Konfigurationsleitfaden für OpenThread Border Router.

RCP anhängen

  1. Nachdem Sie das Build erstellt und Flash erstellt haben, verbinden Sie das RCP-Gerät über USB mit dem Computer, auf dem OTBR Docker ausgeführt wird.
  2. Bestimmen Sie den Namen des seriellen Ports für das RCP-Gerät, indem Sie das Kästchen /dev anklicken:
    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. Beispiel: Der RCP wird unter /dev/ttyACM0 bereitgestellt:

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

Nach erfolgreicher Ausführung 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 im Hintergrund geöffnet und laufen. Wenn Sie den Prozess beenden oder das Fenster schließen, geht OTBR Docker herunter.

Rufen Sie Test Connectivity auf, um mit der OTBR-Docker-Einrichtung fortzufahren.

Simulierter RCP

Verwenden Sie für den simulierten RCP-Wert einen simulierten OpenThread-RCP-Build. Dies ist nützlich, wenn Sie das Randrouting mit einem simulierten Thread-Netzwerk auf einem einzelnen Computer testen möchten.

Simulierte RCP-Anwendung erstellen

  1. Klonen Sie das OpenThread-Repository:

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

  2. Bootstrap erstellen und die simulierte Anwendung erstellen:

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

Bidirektionalen Datenstream einrichten

Verwenden Sie das socat-Befehlszeilentool, um einen bidirektionalen Datenstream für die Übertragung von Daten zwischen dem simulierten RCP und OTBR Docker einzurichten.

  1. Öffnen Sie ein neues Terminalfenster, um diesen Prozess auszuführen, da er weiter ausgeführt werden muss, 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 formatiert sind. Verwenden Sie den ersten für den simulierten RCP und den zweiten für OTBR Docker. In der Beispielausgabe oben gilt:

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

Lassen Sie dieses Terminalfenster im Hintergrund geöffnet.

Simulierten RCP starten

  1. Öffnen Sie ein neues Terminalfenster, um den simulierten RCP auszuführen, da er weiter ausgeführt werden muss, während OTBR-Docker ausgeführt wird.

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

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

Dieser Befehl gibt keine Ausgabe aus. Lassen Sie dieses Terminalfenster im Hintergrund geöffnet.

OTBR-Docker-Container starten

Starten Sie OTBR Docker in einem neuen Terminalfenster über den zweiten seriellen Port in der Ausgabe socat. Wenn Sie beispielsweise /dev/pts/7 aus der Ausgabe socat 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 der Standardbereitstellungspunkt im Docker-Container.

Nach erfolgreicher Ausführung 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 im Hintergrund geöffnet und laufen. Wenn Sie den Prozess beenden oder das Fenster schließen, geht OTBR Docker herunter.