Uruchom Dockera OTBR

Wyświetl źródło na GitHubie

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

  1. Po skompilowaniu i zaktualizowaniu podłącz urządzenie RCP do komputera z uruchomioną usługą OTBR Docker przez USB.
  2. 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

  1. Sklonuj repozytorium OpenThread:

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

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

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

  2. Zainstaluj aplikację 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 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

  1. Otwórz nowe okno terminala, aby uruchomić symulowany RCP, ponieważ musi on pozostawać uruchomiony, gdy działa OTBR Docker.

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