Uruchom Dockera OTBR

Wyświetl źródło na GitHubie

OpenThread Border Router (OTBR) wymaga węzła RCP Thread, aby dołączyć Sieć Thread. OTBR Docker zapewnia obsługę zarówno fizycznego RCP (OpenThread), lub symulowanym RCP.

Jeśli chcesz połączyć OTBR Docker z innymi fizycznymi urządzeniami Thread, użyj fizycznego RCP. Testowanie kierowania granicznego przy użyciu symulowanego wątku Thread użyj symulowanego RCP.

Fizyczny RCP

Użyj dowolnej obsługiwanej platformy OpenThread, fizycznego RCP. Zapoznaj się z artykułem RCP tworzenia i flashowania. w przewodniku po konfiguracji i konfiguracji routera granic OpenThread, aby dowiedzieć się więcej. i informacjami o nich.

Dołącz RCP

  1. Po skompilowaniu i zakończeniu aktualizacji podłącz urządzenie RCP do uruchomionego komputera OTBR Docker przez USB.
  2. Ustal nazwę portu szeregowego urządzenia RCP, sprawdzając pole /dev:
    ls /dev/tty*
    /dev/ttyACMO
    

Uruchom kontener Dockera OTBR

W nowym oknie terminala uruchom OTBR Docker, odwołując się do portu szeregowego RCP. Jeśli na przykład RCP jest podłączony w lokalizacji /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 przeprowadzeniu testu dane wyjściowe powinny wyglądać mniej więcej tak:

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.

Teraz działa OTBR Docker. Pozostaw okno terminala otwarte i uruchomione w w tle. Jeśli zamkniesz proces lub okno, OTBR Docker przestanie działać w dół.

Przejdź do testowania połączeń, aby kontynuuj konfigurowanie OTBR Dockera.

Symulowany RCP

na potrzeby symulowanej kompilacji RCP OpenThread. Jest to przydatne, jeśli Chcesz przetestować kierowanie graniczne z użyciem symulowanej sieci Thread na pojedynczym na komputerze.

Tworzenie symulowanej aplikacji RCP

  1. Sklonuj repozytorium OpenThread:

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

  2. Wczytywanie i skompilowanie symulowanej aplikacji:

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

Konfigurowanie dwukierunkowego strumienia danych

Użyj narzędzia wiersza poleceń socat, aby utworzyć dwukierunkowy strumień danych do przenoszenia danych między symulowanym RCP i OTBR Dockerem.

  1. Aby uruchomić ten proces, otwórz nowe okno terminala, ponieważ musi on pozostać uruchomiony podczas uruchamiania OTBR Dockera.

  2. Zainstaluj aplikację socat:

    sudo apt-get install socat
    

  3. Rozpoczęcie 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 2 porty szeregowe pogrubione w danych wyjściowych. Użyj pierwszej opcji symulowany RCP, a drugi – dla OTBR Docker. W przykładowych danych wyjściowych powyżej:

  • /dev/pts/2 = symulowany port RCP
  • /dev/pts/7 = OTBR Docker
.

Pozostaw okno terminala otwarte i uruchomione w tle.

Uruchom symulowany RCP

  1. Otwórz nowe okno terminala, aby uruchomić symulowany RCP (musi ono pozostać w pozycji) w trakcie działania OTBR Dockera.

  2. Uruchom symulowany RCP, korzystając z pierwszego portu szeregowego w wyjściu socat aplikacji. Jeśli na przykład używasz parametru /dev/pts/2 z danych wyjściowych socat:

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

To polecenie nie ma żadnych danych wyjściowych. Zostaw okno terminala otwarte i który działa w tle.

Uruchom kontener Dockera OTBR

W nowym oknie terminala uruchom OTBR Docker, używając drugiego portu szeregowego w Dane wyjściowe socat. Jeśli na przykład używasz parametru /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 ustawienie domyślne. w kontenerze Dockera.

Po pomyślnym przeprowadzeniu testu dane wyjściowe powinny wyglądać mniej więcej tak:

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.

Teraz działa OTBR Docker. Pozostaw okno terminala otwarte i uruchomione w w tle. Jeśli zamkniesz proces lub okno, OTBR Docker przestanie działać w dół.