OTBR Docker ausführen

Quelle auf GitHub ansehen

OpenThread Border Router (OTBR) erfordert einen Thread-RCP-Knoten, um eine Verbindung zu einem Thread-Netzwerk herzustellen. 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. Verwenden Sie einen simulierten RCP, wenn Sie das Grenzrouting mit einem simulierten Thread-Netzwerk testen möchten.

Physischer RCP

Verwenden Sie für den physischen RCP eine beliebige unterstützte OpenThread-Plattform. Weitere Informationen finden Sie im Schritt Build und Flash RCP erstellen im Leitfaden zum OpenThread Border Router Build und Configuration (in englischer Sprache).

RCP anhängen

  1. Verbinden Sie nach dem Erstellen und Flashen 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 /dev prüfen:
    ls /dev/tty*
    /dev/ttyACMO
    

OTBR-Docker-Container starten

Starten Sie OTBR Docker in einem neuen Terminalfenster und verweisen Sie auf den seriellen Port des RCP. Wenn der 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 im Hintergrund geöffnet und laufen im Hintergrund. Wenn Sie den Vorgang beenden oder das Fenster schließen, wird OTBR Docker ausgeführt.

Rufen Sie Test Connectivity auf, um mit der Einrichtung des OTBR Dockers fortzufahren.

Simulierter RCP

Verwenden Sie einen simulierten OpenThread RCP-Build für den simulierten RCP. Dies ist nützlich, wenn Sie das Grenzrouting 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
    make -f examples/Makefile-simulation
    

Bidirektionalen Datenstream einrichten

Verwenden Sie das Befehlszeilendienstprogramm socat, um einen bidirektionalen Datenstream einzurichten, um Daten zwischen dem simulierten RCP und OTBR Docker zu übertragen.

  1. Öffnen Sie ein neues Terminalfenster, um diesen Prozess auszuführen, da er weiterhin 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 in der Ausgabe, die in der Ausgabe fett markiert sind. Verwenden Sie das erste für das simulierte RCP und das zweite für OTBR Docker. In der obigen Beispielausgabe:

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

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

Simulierten RCP starten

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

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

    ~/openthread/output/simulation/bin/ot-rcp 1 > /dev/pts/2 < /dev/pts/2
    

Von diesem Befehl wird keine Ausgabe ausgegeben. Lassen Sie dieses Terminalfenster im Hintergrund geöffnet und laufen im Hintergrund.

OTBR-Docker-Container starten

Starten Sie OTBR Docker in einem neuen Terminalfenster mit dem 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 und laufen im Hintergrund. Wenn Sie den Vorgang beenden oder das Fenster schließen, wird OTBR Docker ausgeführt.