Посмотреть исходный код на GitHub
Пограничному маршрутизатору OpenThread (OTBR) требуется узел Thread RCP, чтобы присоединиться к сети Thread. OTBR Docker поддерживает как физический RCP (ключ OpenThread), так и смоделированный RCP.
Если вы хотите подключить OTBR Docker к другим физическим устройствам Thread, используйте физический RCP. Если вы хотите протестировать граничную маршрутизацию с смоделированной сетью потоков, используйте смоделированный RCP.
Физический RCP
Используйте любую поддерживаемую платформу OpenThread для физического RCP. Дополнительные сведения см. в шаге Сборка и прошивка RCP в руководстве по сборке и настройке OpenThread Border Router.
Прикрепите ПКП
- После сборки и прошивки подключите устройство RCP к машине, на которой работает OTBR Docker, через USB.
- Определите имя последовательного порта для устройства 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 отключится.
Перейдите к Test Connectivity , чтобы продолжить настройку OTBR Docker.
Смоделированный RCP
Используйте смоделированную сборку OpenThread RCP для смоделированного RCP. Это полезно, если вы хотите протестировать граничную маршрутизацию с симулированной сетью потоков на одном компьютере.
Создайте смоделированное приложение 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]
Обратите внимание на два последовательных порта, выделенных жирным шрифтом в выходных данных. Используйте первый для имитации RCP, а второй — для OTBR Docker. В примере выше:
-
/dev/pts/2
= смоделированный порт RCP -
/dev/pts/7
= Докер OTBR
Оставьте это окно терминала открытым и работающим в фоновом режиме.
Запустите смоделированный RCP
Откройте новое окно терминала, чтобы запустить смоделированный RCP, так как его нужно оставить работающим, пока работает OTBR Docker.
Используя первый последовательный порт в выходных данных
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 отключится.
,Посмотреть исходный код на GitHub
Пограничному маршрутизатору OpenThread (OTBR) требуется узел Thread RCP, чтобы присоединиться к сети Thread. OTBR Docker поддерживает как физический RCP (ключ OpenThread), так и смоделированный RCP.
Если вы хотите подключить OTBR Docker к другим физическим устройствам Thread, используйте физический RCP. Если вы хотите протестировать граничную маршрутизацию с смоделированной сетью потоков, используйте смоделированный RCP.
Физический RCP
Используйте любую поддерживаемую платформу OpenThread для физического RCP. Дополнительные сведения см. в шаге Сборка и прошивка RCP в руководстве по сборке и настройке OpenThread Border Router.
Прикрепите ПКП
- После сборки и прошивки подключите устройство RCP к машине, на которой работает OTBR Docker, через USB.
- Определите имя последовательного порта для устройства 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 отключится.
Перейдите к Test Connectivity , чтобы продолжить настройку OTBR Docker.
Смоделированный RCP
Используйте смоделированную сборку OpenThread RCP для смоделированного RCP. Это полезно, если вы хотите протестировать граничную маршрутизацию с симулированной сетью потоков на одном компьютере.
Создайте смоделированное приложение 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]
Обратите внимание на два последовательных порта, выделенных жирным шрифтом в выходных данных. Используйте первый для имитации RCP, а второй — для OTBR Docker. В примере выше:
-
/dev/pts/2
= смоделированный порт RCP -
/dev/pts/7
= Докер OTBR
Оставьте это окно терминала открытым и работающим в фоновом режиме.
Запустите смоделированный RCP
Откройте новое окно терминала, чтобы запустить смоделированный RCP, так как его нужно оставить работающим, пока работает OTBR Docker.
Используя первый последовательный порт в выходных данных
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 отключится.