Router graniczny OpenThread (OTBR) wymaga węzła RCP Thread, aby dołączyć do sieci Thread. Docker OTBR obsługuje zarówno fizyczne urządzenie RCP (dongle OpenThread), jak i symulowane urządzenie RCP.
Jeśli chcesz połączyć OTBR Docker z innymi fizycznymi urządzeniami Thread, użyj fizycznego RCP. Jeśli chcesz przetestować routing graniczny z wykorzystaniem symulowanej sieci Thread, użyj symulowanego RCP.
Fizyczne RCP
Do obsługi RCP w przypadku urządzeń fizycznych możesz użyć dowolnej obsługiwanej platformy OpenThread. Więcej informacji znajdziesz w kroku dotyczącym kompilowania i programowania RCP w przewodniku OpenThread Border Router Build and Configuration.
Dołącz RCP
- Po skompilowaniu i zainstalowaniu aktualizacji podłącz urządzenie RCP do komputera z uruchomionym narzędziem OTBR Docker przez USB.
- Określ nazwę portu szeregowego urządzenia RCP, sprawdzając
/dev
:ls /dev/tty*
/dev/ttyACMO
Uruchom kontener Dockera OTBR
W nowym oknie terminala uruchom kontener OTBR Docker, odwołując się do portu szeregowego RCP.
Jeśli na przykład RCP jest zamontowany na wysokości /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
W przypadku powodzenia powinny pojawić się dane wyjściowe podobne do tych:
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 to okno terminala otwarte i uruchomione w tle. Jeśli zamkniesz proces lub okno, kontener Dockera OTBR zostanie zatrzymany.
Aby kontynuować konfigurowanie Dockera OTBR, przejdź do sekcji Testowanie połączenia.
Symulowany RCP
Użyj symulowanej wersji RCP OpenThread dla symulowanego RCP. Jest to przydatne, jeśli chcesz przetestować routing na granicy z symulowaną siecią Thread na jednym urządzeniu.
Tworzenie symulowanej aplikacji RCP
Sklonuj repozytorium OpenThread:
cd ~
git clone https://github.com/openthread/openthread
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 ustanowić dwukierunkowy strumień danych w celu przesyłania danych między symulowanymi kontenerami RCP i OTBR Docker.
Aby uruchomić ten proces, otwórz nowe okno terminala, ponieważ musi on pozostawać uruchomiony, gdy działa OTBR Docker.
Zainstaluj
socat
:sudo apt-get install socat
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 2 porty szeregowe wyróżnione pogrubioną czcionką w wyjściu. Użyj pierwszego z nich do symulowanego RCP, a drugiego do Dockera OTBR. W przykładowych danych wyjściowych:
/dev/pts/2
= Symulowany port RCP/dev/pts/7
= OTBR Docker
Pozostaw to okno terminala otwarte i uruchomione w tle.
Rozpocznij symulowane RCP
Otwórz nowe okno terminala, aby uruchomić symulowane RCP, ponieważ musi ono być uruchomione podczas działania kontenera Dockera OTBR.
Korzystając z pierwszego portu szeregowego w wyjściu
socat
, uruchom symulowaną aplikację RCP. Jeśli na przykład użyjesz/dev/pts/2
z wynikusocat
:~/openthread/build/simulation/examples/apps/ncp/ot-rcp 1 > /dev/pts/2 < /dev/pts/2
To polecenie nie ma żadnych danych wyjściowych. Pozostaw to okno terminala otwarte i uruchomione w tle.
Uruchamianie kontenera Dockera OTBR
W nowym oknie terminala uruchom Dockera OTBR, używając drugiego portu szeregowego w wyjściu socat
. Jeśli na przykład użyjesz /dev/pts/7
z wyniku 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 to polecenie używa też portu /dev/ttyUSB0
. Jest to domyślny punkt zamontowania w kontenerze Dockera.
W przypadku powodzenia powinny pojawić się dane wyjściowe podobne do tych:
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.
Docker OTBR jest teraz uruchomiony. Pozostaw to okno terminala otwarte i uruchomione w tle. Jeśli zamkniesz proces lub okno, kontener Dockera OTBR zostanie zatrzymany.