O roteador de borda do OpenThread (OTBR) exige um nó RCP do Thread para unir Thread. O Docker para OTBR oferece suporte a um RCP (OpenThread) dongle) ou um RCP simulado.
Caso queira conectar o Docker OTBR a outros dispositivos físicos do Thread, use uma o RCP físico. Se você quiser testar o roteamento de borda com um Thread simulado use um RCP simulado.
RCP físico
Use qualquer plataforma OpenThread compatível para o RCP físico. Consulte Criar e atualizar RCP do guia de criação e configuração do roteador de borda do OpenThread informações imprecisas ou inadequadas.
Anexar o RCP
- Depois de criar e atualizar, conecte o dispositivo RCP à máquina em execução Docker OTBR via USB.
- Verifique
/dev
para determinar o nome da porta serial do dispositivo RCP:ls /dev/tty*
/dev/ttyACMO
Inicie o contêiner do Docker OTBR
Em uma nova janela do terminal, inicie o Docker do OTBR, fazendo referência à porta serial do RCP.
Por exemplo, se o RCP estiver ativado em /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
Após a conclusão, você deverá ter uma saída semelhante a esta:
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.
O Docker do OTBR está em execução. Deixe essa janela de terminal aberta e em execução no plano de fundo. Se você sair do processo ou fechar a janela, o Docker do OTBR para baixo.
Acesse Testar conectividade para continue com a configuração do Docker OTBR.
RCP simulado
Usar um build simulado do RCP do OpenThread para o RCP simulado. Isso é útil se você quiser testar o roteamento de borda com uma rede Thread simulada em uma única máquina virtual.
Criar o aplicativo RCP simulado
Clone o repositório do OpenThread:
cd ~
git clone https://github.com/openthread/openthread
Inicialize e crie o aplicativo simulado:
cd openthread
./script/bootstrap
./script/cmake-build simulation
Configurar um fluxo de dados bidirecional
Use o utilitário de linha de comando socat
para estabelecer um fluxo de dados bidirecional
para transferir dados entre o RCP simulado e o Docker OTBR.
Abra uma nova janela do terminal para executar este processo, já que ele precisa permanecer em execução enquanto o Docker OTBR estiver em execução.
Instale o
socat
:sudo apt-get install socat
Iniciar
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]
Anote as duas portas seriais em negrito na saída. Use o primeiro para o RCP simulado e o segundo para o Docker OTBR. No exemplo de saída acima:
/dev/pts/2
= porta RCP simulada/dev/pts/7
= Docker OTBR
Deixe essa janela do terminal aberta e em execução em segundo plano.
Iniciar o RCP simulado
Abra uma nova janela do terminal para executar o RCP simulado, já que ele precisa ser deixado em execução enquanto o Docker OTBR está em execução.
Usando a primeira porta serial na saída
socat
, inicie o RCP simulado para o aplicativo. Por exemplo, se estiver usando/dev/pts/2
da saídasocat
:~/openthread/build/simulation/examples/apps/ncp/ot-rcp 1 > /dev/pts/2 < /dev/pts/2
Não há resposta para esse comando. Deixe essa janela de terminal aberta e executados em segundo plano.
Inicie o contêiner do Docker OTBR
Em uma nova janela do terminal, inicie o Docker do OTBR usando a segunda porta serial no
Saída socat
. Por exemplo, se estiver usando /dev/pts/7
da saída 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
Observe que o comando também está usando a porta /dev/ttyUSB0
. Esse é o padrão
no contêiner do Docker.
Após a conclusão, você deverá ter uma saída semelhante a esta:
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.
O Docker do OTBR está em execução. Deixe essa janela de terminal aberta e em execução no plano de fundo. Se você sair do processo ou fechar a janela, o Docker do OTBR para baixo.