OTBR-Docker ausführen

Quellcode auf GitHub ansehen

Der OpenThread Border Router (OTBR) benötigt einen Thread-RCP-Knoten, um sich mit einem Thread-Netzwerk verbinden zu können. OTBR Docker unterstützt sowohl einen physischen RCP (OpenThread-Dongle) als auch einen simulierten RCP.

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

Physische RCP

Verwenden Sie für die physische RCP eine beliebige unterstützte OpenThread-Plattform. Weitere Informationen finden Sie im Leitfaden zum Erstellen und Konfigurieren von OpenThread-Border-Routern im Schritt RCP erstellen und flashen.

RCP anhängen

  1. Schließen Sie das RCP-Gerät nach dem Erstellen und Flashen über USB an den Computer an, auf dem OTBR Docker ausgeführt wird.
  2. Ermitteln Sie den Namen des seriellen Ports für das RCP-Gerät:
    ls /dev/tty*
    /dev/ttyACMO
    

OTBR-Docker-Container starten

Starten Sie in einem neuen Terminalfenster OTBR Docker und verweisen Sie dabei auf den seriellen Anschluss des RCP. Wenn der RCP beispielsweise an /dev/ttyACM0 montiert ist:

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 im Hintergrund laufen. Wenn Sie den Prozess beenden oder das Fenster schließen, wird OTBR Docker beendet.

Gehe zu Konnektivität testen, um mit der OTBR-Docker-Einrichtung fortzufahren.

Simulierte RCP

Verwenden Sie einen simulierten OpenThread-RCP-Build für die simulierte RCP. Dies ist nützlich, wenn Sie das Border-Routing 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. Bootstrappen und Erstellen der simulierten Anwendung:

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

Bidirektionalen Datenstream einrichten

Verwenden Sie das Befehlszeilen-Dienstprogramm socat, um einen bidirektionalen Datenstream zur Übertragung von Daten zwischen dem simulierten RCP und dem OTBR-Docker einzurichten.

  1. Öffnen Sie ein neues Terminalfenster, um diesen Prozess auszuführen, da er während der Ausführung von OTBR Docker aktiv bleiben muss.

  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 die simulierte RCP und den zweiten 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.

Simulierte RCP starten

  1. Öffnen Sie ein neues Terminalfenster, um das simulierte RCP auszuführen. Es muss noch ausgeführt werden, während OTBR-Docker ausgeführt wird.

  2. Starten Sie die simulierte RCP-Anwendung über den ersten seriellen Port in der socat-Ausgabe. 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
    

Dieser Befehl erzeugt keine Ausgabe. Lassen Sie dieses Terminalfenster geöffnet und im Hintergrund laufen.

OTBR-Docker-Container starten

Starten Sie in einem neuen Terminalfenster OTBR Docker mit dem zweiten seriellen Anschluss in der 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 der Standardbereitstellungspunkt 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 im Hintergrund laufen. Wenn Sie den Prozess beenden oder das Fenster schließen, wird OTBR Docker beendet.