OpenThread Border Router (OTBR) wymaga węzła RCP Thread, aby dołączyć do sieci Thread. OTBR Docker zapewnia obsługę zarówno fizycznego klucza sprzętowego 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ć kierowanie graniczne z użyciem symulowanej sieci Thread, użyj symulowanego RCP.
Fizyczny RCP
Na potrzeby fizycznego RCP użyj dowolnej obsługiwanej platformy OpenThread. Więcej informacji znajdziesz w kroku Tworzenie i flashowanie RCP w przewodniku po kompilacji i konfiguracji routera granic OpenThread.
Dołącz RCP
- Po skompilowaniu i zaktualizowaniu podłącz urządzenie RCP do komputera z uruchomioną usługą OTBR Docker przez USB.
- Sprawdź 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 tle. Jeśli zamkniesz proces lub okno, OTBR Docker przestanie działać.
Przejdź do Test Connectivity (Testuj połączenie), aby kontynuować konfigurację OTBR Dockera.
Symulowany RCP
na potrzeby symulowanej kompilacji RCP OpenThread. Jest to przydatne, gdy chcesz przetestować routing graniczny z użyciem symulowanej sieci Thread na jednym komputerze.
Tworzenie symulowanej aplikacji RCP
Sklonuj repozytorium OpenThread:
cd ~
git clone https://github.com/openthread/openthread
Wczytywanie i kompilowanie 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 do przesyłania danych między symulowanym RCP i Dockerem OTBR.
Aby uruchomić ten proces, otwórz nowe okno terminala, ponieważ musi on pozostawać uruchomiony, gdy działa OTBR Docker.
Zainstaluj aplikację
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 pogrubione w danych wyjściowych. Pierwszego użyj dla symulowanego RCP, a drugiego dla OTBR Dockera. 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
Otwórz nowe okno terminala, aby uruchomić symulowany RCP, ponieważ musi on pozostawać uruchomiony, gdy działa OTBR Docker.
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ściowychsocat
:~/openthread/build/simulation/examples/apps/ncp/ot-rcp 1 > /dev/pts/2 < /dev/pts/2
To polecenie nie ma żadnych danych wyjściowych. Pozostaw okno terminala otwarte i uruchomione 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 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
. To domyślny punkt podłączania 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 tle. Jeśli zamkniesz proces lub okno, OTBR Docker przestanie działać.