執行 OTBR Docker

透過集合功能整理內容 你可以依據偏好儲存及分類內容。

前往 GitHub 查看原始碼

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

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

實體 RCP

使用任何支援的 OpenThread 平台來處理實體 RCP。詳情請參閱 OpenThread Border 路由器建構和設定指南中的建構及刷新 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

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

建構模擬 RCP 應用程式

  1. 複製 OpenThread 存放區:

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

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

    cd openthread
    ./bootstrap
    ./script/cmake-build 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,第二個則用於模擬 DockerBR。在上述範例輸出中:

  • /dev/pts/2 = 模擬 RCP 通訊埠
  • /dev/pts/7 = OTBR Docker

請將這個終端機視窗保持開啟狀態,並在背景中執行。

啟動模擬的 RCP

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

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

    ~/openthread/build/simulation/examples/apps/ncp/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 會停止運作。