Uruchom Dockera OTBR

Wyświetl źródło na GitHubie

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

  1. Po utworzeniu i migotaniu podłącz urządzenie RCP do komputera, na którym działa Docker Docker przez USB.
  2. 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

  1. Skopiuj repozytorium OpenThread:

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

  2. 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.

  1. Aby uruchomić ten proces, otwórz nowe okno terminala, ponieważ musi ono pozostać uruchomione, gdy uruchomiony jest Docker OTBR.

  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 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

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

  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/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ć.