Google は、黒人コミュニティのための人種的公平の促進に取り組んでいます。詳細をご覧ください。

OTBR Docker を実行する

GitHub でソースを見る

OpenThread 境界ルーター(OTBR)が Thread ネットワークに参加するには、Thread RCP ノードを必要とします。OTBR Docker は、物理 RCP(OpenThread ドングル)とシミュレートされた RCP の両方をサポートしています。

OTBR Docker を他の物理 Thread デバイスに接続する場合は、物理 RCP を使用します。シミュレートされた Thread ネットワークで境界ルーティングをテストする場合は、シミュレートされた RCP を使用します。

物理 RCP

物理 RCP には、サポートされている OpenThread プラットフォームを使用してください。詳細については、OpenThread Border Router のビルドと構成のガイドの RCP のビルドとフラッシュの手順を参照してください。

RCP を添付

  1. ビルドしてフラッシュした後、USB 経由で OTBR Docker を実行しているマシンに RCP デバイスを接続します。
  2. /dev を調べて、RCP デバイスのシリアルポート名を特定します。
    ls /dev/tty*
    /dev/ttyACMO
    

OTBR Docker コンテナを起動する

新しいターミナル ウィンドウで、RCP のシリアルポートを参照する OTBR Docker を起動します。たとえば、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 は停止します。

[接続のテスト] に移動して、OTBR Docker の設定を続行します。

シミュレートされた RCP

シミュレーションされた RCP には、シミュレートされた OpenThread RCP ビルドを使用します。これは、単一マシンのシミュレートされた Thread ネットワークで境界ルーティングをテストする場合に便利です。

シミュレートされた 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]
    

出力内の 2 つの太字のシリアルポートをメモします。最初の RCP はシミュレーション RCP 用、もう 1 つは 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 出力の 2 番目のシリアルポートを使用して、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 は停止します。