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

OTBR Docker を実行します。

コレクションでコンテンツを整理 必要に応じて、コンテンツの保存と分類を行います。

GitHub でソースを見る

OpenThread Border Router(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

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

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

太字になっている 2 つのシリアルポートを出力に書き留めます。1 つ目はシミュレートされた RCP 用、2 つ目は OTBR Docker 用に使用します。上記の出力例では、次のようになります。

  • /dev/pts/2 = シミュレートされた RCP ポート
  • /dev/pts/7 = OTBR Docker

このターミナル ウィンドウは、開いたまま、バックグラウンドで実行したままにします。

シミュレートされた RCP の開始

  1. 新しいターミナル ウィンドウを開き、OTBR Docker の実行中に実行したままにする必要があるため、シミュレートされた RCP を実行します。

  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 出力の 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 は停止します。