Uruchom Dockera OTBR

Wyświetl źródło w GitHubie

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

  1. Po skompilowaniu i zainstalowaniu aktualizacji podłącz urządzenie RCP do komputera z uruchomionym narzędziem OTBR Docker przez USB.
  2. 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

  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 ustanowić dwukierunkowy strumień danych w celu przesyłania danych między symulowanymi kontenerami RCP i OTBR Docker.

  1. Aby uruchomić ten proces, otwórz nowe okno terminala, ponieważ musi on pozostawać uruchomiony, gdy działa OTBR Docker.

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

  1. Otwórz nowe okno terminala, aby uruchomić symulowane RCP, ponieważ musi ono być uruchomione podczas działania kontenera Dockera OTBR.

  2. 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 wyniku socat:

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