Uruchom Dockera OTBR

Wyświetl źródło w GitHub

Aby połączyć się z siecią wątków, OpenThread Border Router (OTBR) wymaga węzła RCP. OTBR Docker zapewnia obsługę zarówno fizycznego RCP (OpenThread), jak i symulowanego RCP.

Jeśli chcesz połączyć OTBR Docker z innymi fizycznymi urządzeniami Thread, użyj fizycznego RCP. Jeśli chcesz przetestować routing graniczny w symulowanej sieci, użyj symulowanego RCP.

RCP

Możesz używać dowolnej obsługiwanej platformy OpenThread na potrzeby fizycznego RCP. Więcej informacji znajdziesz w kroku Build and Flash RCP (Tworzenie i uruchamianie Flasha RCP) w przewodniku tworzenia i konfiguracji routera OpenThread Border.

Załącz RCP

  1. Po utworzeniu i mignięciu urządzenia RCP podłącz do komputera, na którym działa Docker Docker przez USB.
  2. Sprawdź nazwę portu szeregowego urządzenia RCP, zaznaczając /dev:
    ls /dev/tty*
    /dev/ttyACMO
    

Uruchom kontener Dockera OTBR

W nowym oknie terminala uruchom interfejs OTBR Docker, odwołując się do portu szeregowego RCP. Jeśli na przykład protokół RCP jest podłączony do punktu /dev/ttyACM0:

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

Po pomyślnym zakończeniu wynik powinien być podobny do tego:

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 jest teraz uruchomiony. Pozostaw to okno terminala otwarte i działa w tle. Po zamknięciu procesu lub zamknięciu okna OTBR Docker zostanie zamknięty.

Aby kontynuować konfigurację OTBR Dockera, przejdź do Test Connectivity (Testuj połączenie).

Symulowany RCP

Użyj symulowanej kompilacji RCP OpenThread dla symulowanego RCP. Jest to przydatne, gdy na 1 komputerze chcesz przetestować routing graniczny z symulowaną siecią Thread.

Tworzenie symulowanej aplikacji RCP

  1. Skopiuj repozytorium OpenThread:

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

  2. Bootstrap i utwórz symulowaną aplikację:

    cd openthread
    ./bootstrap
    make -f examples/Makefile-simulation
    

Konfigurowanie dwukierunkowego strumienia danych

Za pomocą narzędzia wiersza poleceń socat możesz utworzyć dwukierunkowy strumień danych i przenosić dane między symulowanym RCP a OTBR Dockerem.

  1. Otwórz nowe okno terminala, aby rozpocząć ten proces, ponieważ musi on pozostawać uruchomiony podczas działania OTBR Dockera.

  2. Zainstaluj socat:

    sudo apt-get install socat
    

  3. Rozpocznij 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]
    

Zanotuj dwa pogrubione porty szeregowe w danych wyjściowych. Pierwszego dla symulowanego RCP, a drugiego dla OTBR Dockera. W tym przykładzie:

  • /dev/pts/2 = symulowany port RCP
  • /dev/pts/7 = Docker OOTBR

Pozostaw to okno terminala otwarte i działa w tle.

Uruchom symulowany RCP

  1. Otwórz nowe okno terminala, aby uruchomić symulowany RCP, ponieważ musi on pozostawać uruchomiony w czasie działania OTBR Dockera.

  2. Korzystając z pierwszego portu szeregowego w danych wyjściowych socat, uruchom symulowaną aplikację RCP. Jeśli na przykład używasz /dev/pts/2 z danych wyjściowych socat:

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

To polecenie nie ma danych wyjściowych. Pozostaw to okno otwarte i działa w tle.

Uruchom kontener Dockera OTBR

W nowym oknie terminala uruchom OTBR Docker, używając drugiego portu szeregowego w danych wyjściowych socat. Jeśli na przykład używasz /dev/pts/7 z danych wyjściowych socat:

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

Pamiętaj, że polecenie używa też portu /dev/ttyUSB0. Jest to domyślny punkt podłączania w kontenerze Dockera.

Po pomyślnym zakończeniu wynik powinien być podobny do tego:

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 jest teraz uruchomiony. Pozostaw to okno terminala otwarte i działa w tle. Po zamknięciu procesu lub zamknięciu okna OTBR Docker zostanie zamknięty.