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 を添付
- ビルドしてフラッシュしたら、USB 経由で OTBR Docker を実行するマシンに RCP デバイスを接続します。
/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 ビルドを使用してシミュレートします。これは、単一のマシンでシミュレートされた Thread ネットワークを使用してボーダー ルーティングをテストする場合に便利です。
シミュレートされた RCP アプリケーションを構築する
OpenThread リポジトリのクローンを作成します。
cd ~
git clone https://github.com/openthread/openthread
シミュレートされたアプリケーションをブートストラップしてビルドします。
cd openthread
./bootstrap
./script/cmake-build simulation
双方向データ ストリームの設定
socat
コマンドライン ユーティリティを使用して、シミュレートされた RCP と OTBR Docker の間でデータを転送するための双方向データ ストリームを確立します。
このプロセスを実行する新しいターミナル ウィンドウを開きます。これは、OTBR Docker の実行中に実行する必要があるためです。
socat
をインストールします。sudo apt-get install socat
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 を開始する
新しいターミナル ウィンドウを開いて、シミュレートされた RCP を実行します。OTBR Docker の実行中に RCP を実行し続けなければならないためです。
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 は停止します。