Aby można było dołączyć do sieci typu Thread, Openroute Border Router (OTBR) wymaga węzła RCP w wątkach. Platforma OTBR Docker obsługuje zarówno fizyczny, jak i symulowany klucz RCP (otwarty wątek) oraz RCP.
Jeśli chcesz połączyć Dockera OTBR z innymi fizycznymi urządzeniami z wątkami, użyj fizycznego kontrolera RCP. Jeśli chcesz przetestować routing obramowania za pomocą symulowanej sieci typu Thread, użyj symulowanego RCP.
RCP (fizyczna)
Użyj dowolnej obsługiwanej platformy OpenThread na potrzeby fizycznego RCP. Aby dowiedzieć się więcej, zobacz krok Kompilowanie i Flash RCP w podręczniku tworzenia i konfigurowania routera obramowania OpenThread.
Podłącz RCP
- Po utworzeniu i migotaniu podłącz urządzenie RCP do komputera, na którym działa Docker Docker przez USB.
- Aby określić nazwę portu szeregowego urządzenia RCP, sprawdź
/dev
:ls /dev/tty*
/dev/ttyACMO
Uruchamianie kontenera Dockera OTBR
W nowym oknie terminala uruchom Dockera OTBR, odwołując się do portu szeregowego RCP.
Jeśli na przykład protokół RCP jest podłączony w obszarze /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 zakończeniu powinno pojawić się wynik 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.
Docker OTBR jest teraz uruchomiony. Pozostaw to okno terminala otwarte i działające w tle. Jeśli zakończysz ten proces lub zamkniesz okno, Docker OTBR przestanie działać.
Aby kontynuować konfigurację Dockera OTBR, przejdź do testowania połączeń.
Symulowany CP
Użyć symulowanej kompilacji RCP OpenThread dla symulowanego RCP. Jest to przydatne, gdy chcesz przetestować routing obramowania na symulowanej sieci typu Thread na jednej maszynie.
Tworzenie symulowanej aplikacji RCP
Skopiuj repozytorium OpenThread:
cd ~
git clone https://github.com/openthread/openthread
Uruchamianie i tworzenie symulowanej aplikacji:
cd openthread
./bootstrap
./script/cmake-build simulation
Konfigurowanie dwukierunkowego strumienia danych
Użyj narzędzia wiersza poleceń socat
, aby utworzyć dwukierunkowe źródło danych do przenoszenia danych między symulowanym systemem RCP i Dockerem OTBR.
Aby uruchomić ten proces, otwórz nowe okno terminala, ponieważ musi ono pozostać uruchomione, gdy uruchomiony jest Docker OTBR.
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 dwa porty szeregowe pogrubione w danych wyjściowych. Użyj pierwszego z symulowanego RCP, a drugiego dla OTBR Dockera. W przykładowym wyniku powyżej:
/dev/pts/2
= symulowany port RCP/dev/pts/7
= Docker OTBR
Pozostaw to okno terminala otwarte i działające w tle.
Uruchom symulowany RCP
Otwórz nowe okno terminala, aby uruchomić symulowany plik RCP, ponieważ musi on pozostać uruchomiony podczas działania Dockera OTBR.
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 zawiera żadnych danych wyjściowych. Pozostaw to okno terminala otwarte i działające w tle.
Uruchamianie kontenera Dockera OTBR
W nowym oknie terminala uruchom Dockera OTBR, używając drugiego portu szeregowego w danych wyjściowych socat
. Jeśli na przykład /dev/pts/7
używa 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
To polecenie używa też portu /dev/ttyUSB0
. Jest to domyślny punkt podłączania w kontenerze Dockera.
Po zakończeniu powinno pojawić się wynik 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.
Docker OTBR jest teraz uruchomiony. Pozostaw to okno terminala otwarte i działające w tle. Jeśli zakończysz ten proces lub zamkniesz okno, Docker OTBR przestanie działać.