執行 OTBR Docker

在 GitHub 中查看來源

OpenThread 邊界路由器 (OTBR) 需要執行緒 RCP 節點才能加入 Thread 網路。OTBR Docker 支援實體 RCP (OpenThread Dongle) 或模擬 RCP。

如果您想將 OTBR Docker 連線至其他實體執行緒裝置,請使用實體 RCP。如果您要使用模擬執行緒網路來測試邊界轉送,請使用模擬 RCP。

實體 RCP

請為實體 RCP 使用任何支援的 OpenThread 平台。詳情請參閱 OpenThread Border Router Build and Configuration 指南的Build and Flash RCP 步驟。

附加 RCP

  1. 建構並閃爍後,請透過 USB 將 RCP 裝置連接至執行 OTBR Docker 的機器。
  2. 勾選 /dev 來判斷 RCP 裝置的序列埠名稱:
    ls /dev/tty*
    /dev/ttyACMO
    

啟動 OTBR Docker 容器

在新的終端機視窗中啟動 OTBR Docker,參照 RCP 的序列埠。舉例來說,如果 RCP 掛接在 /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

成功後,您應該會看到如下的結果:

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.

OTBR Docker 現已執行。讓這個終端機視窗保持開啟,並在背景執行。如果您結束這項程序或關閉視窗,OTBR Docker 就會停止運作。

前往 Test Connectivity 繼續設定 OTBR Docker 設定。

模擬 RCP

使用模擬的 RThread 版本模擬模擬 RCP。如果想在單一機器上模擬模擬執行緒的網路測試,這項功能就非常實用。

建構模擬 RCP 應用程式

  1. 複製 OpenThread 存放區:

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

  2. 啟動並建構模擬應用程式:

    cd openthread
    ./bootstrap
    make -f examples/Makefile-simulation
    

設定雙向資料串流

使用 socat 指令列公用程式建立雙向資料串流,以便在模擬 RCP 與 OTBR Docker 之間傳輸資料。

  1. 開啟新的終端機視窗以執行這個程序,因為在 OTBR Docker 執行期間,必須保持運作。

  2. 安裝「socat」:

    sudo apt-get install socat
    

  3. 啟動 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]
    

並記下輸出內容中以粗體顯示的兩個序列埠。請使用第一個模擬工具做為模擬 RCP,第二個則用於 OTBR Docker。在上面的輸出示例中:

  • /dev/pts/2 = 模擬 RCP 連接埠
  • /dev/pts/7 = OTBR Docker

讓這個終端機視窗保持開啟,並在背景執行。

啟動模擬 RCP

  1. 開啟新的終端機視窗以執行模擬 RCP,因為該視窗在 OTBR Docker 執行期間必須保持執行。

  2. socat 輸出結果中使用第一個序列埠,啟動模擬 RCP 應用程式。舉例來說,如果透過 socat 輸出使用 /dev/pts/2

    ~/openthread/output/simulation/bin/ot-rcp 1 > /dev/pts/2 < /dev/pts/2
    

這個指令沒有輸出內容。請將這個終端機視窗保持開啟,並在背景執行。

啟動 OTBR Docker 容器

在新的終端機視窗中,使用 socat 輸出內容中的第二個序列埠來啟動 OTBR Docker。舉例來說,如果透過 socat 輸出使用 /dev/pts/7

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

請注意,這個指令也會使用 /dev/ttyUSB0 通訊埠。這是 Docker 容器中的預設掛接點。

成功後,您應該會看到如下的結果:

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.

OTBR Docker 現已執行。讓這個終端機視窗保持開啟,並在背景執行。如果您結束這項程序或關閉視窗,OTBR Docker 就會停止運作。