OTBR-Docker ausführen

Quelle auf GitHub ansehen

Für OpenThread Border Router (OTBR) ist ein Thread-RCP-Knoten erforderlich, um einem Thread-Netzwerk beizutreten. 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 Grenzrouting 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 des OpenThread Border Router-Builds und der Konfigurationsanleitung.

RCP anhängen

  1. Hängen Sie das RCP-Gerät nach dem Erstellen und Flashen über USB an den Computer an, 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 unter Bezug auf den seriellen Port des RCP. Wenn die RCP beispielsweise auf /dev/ttyACM0 bereitgestellt 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 im Hintergrund geöffnet. Wenn Sie den Prozess beenden oder das Fenster schließen, wird OTBR-Docker heruntergefahren.

Gehen Sie zu Test Connectivity (Testverbindung), um mit der OTBR-Docker-Einrichtung fortzufahren.

Simulierter RCP

Verwenden Sie einen simulierten OpenThread-RCP-Build für den simulierten RCP. Das 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. Bootstrap ausführen und die simulierte Anwendung erstellen:

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

Bidirektionalen Datenstream einrichten

Verwenden Sie das socat-Befehlszeilentool, um einen bidirektionalen Datenstream zum Übertragen von Daten zwischen dem simulierten RCP- und OTBR-Docker einzurichten.

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

  2. socat installieren:

    sudo apt-get install socat
    

  3. socat starten:

    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 in der Ausgabe. Verwenden Sie den ersten für den simulierten 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 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 socat-Ausgabe verwenden:

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

Von diesem Befehl wird keine Ausgabe ausgeführt. 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 von socat. 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 im Hintergrund geöffnet. Wenn Sie den Prozess beenden oder das Fenster schließen, wird OTBR-Docker heruntergefahren.