Запустите OTBR Docker, Запустите OTBR Docker

Посмотреть исходный код на GitHub

Пограничному маршрутизатору OpenThread (OTBR) требуется узел Thread RCP для присоединения к сети Thread. OTBR Docker обеспечивает поддержку как физического RCP (ключ OpenThread), так и имитированного RCP.

Если вы хотите подключить OTBR Docker к другим физическим устройствам Thread, используйте физический RCP. Если вы хотите протестировать пограничную маршрутизацию с помощью моделируемой сети потоков, используйте моделируемый RCP.

Физический RCP

Используйте любую поддерживаемую платформу OpenThread для физического RCP. Для получения дополнительной информации см. шаг «Сборка и установка RCP» в руководстве по сборке и настройке пограничного маршрутизатора OpenThread.

Прикрепите RCP

  1. После сборки и прошивки подключите устройство RCP к машине, на которой работает OTBR Docker, через USB.
  2. Определите имя последовательного порта для устройства RCP, проверив /dev :
    ls /dev/tty*
    /dev/ttyACMO
    

Запустите Docker-контейнер OTBR.

В новом окне терминала запустите 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 отключится.

Перейдите в раздел «Проверка подключения» , чтобы продолжить настройку OTBR Docker.

Имитация RCP

Используйте смоделированную сборку OpenThread RCP для смоделированного RCP. Это полезно, если вы хотите протестировать пограничную маршрутизацию с моделируемой сетью потоков на одном компьютере.

Создайте смоделированное приложение RCP.

  1. Клонируйте репозиторий OpenThread:

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

  2. Загрузите и создайте моделируемое приложение:

    cd openthread
    ./script/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, а второй — для OTBR Docker. В примере выше:

  • /dev/pts/2 = Имитированный порт RCP
  • /dev/pts/7 = Докер OTBR

Оставьте это окно терминала открытым и работающим в фоновом режиме.

Запустите моделируемый RCP

  1. Откройте новое окно терминала, чтобы запустить имитируемый RCP, поскольку его необходимо оставить работающим, пока работает OTBR Docker.

  2. Используя первый последовательный порт в выходных данных socat , запустите имитируемое приложение RCP. Например, если использовать /dev/pts/2 из вывода socat :

    ~/openthread/build/simulation/examples/apps/ncp/ot-rcp 1 > /dev/pts/2 < /dev/pts/2
    

Эта команда не выводит никаких результатов. Оставьте это окно терминала открытым и работающим в фоновом режиме.

Запустите Docker-контейнер OTBR.

В новом окне терминала запустите OTBR Docker, используя второй последовательный порт в выводе socat . Например, если использовать /dev/pts/7 из вывода socat :

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 отключится.