Ver el código fuente en GitHub
El router de borde de OpenThread (OTBR) requiere un nodo RCP de Thread para unirse a una red de Thread. OTBR Docker es compatible con un RCP físico (llave de subproceso de subprocesos) o un RCP simulado.
Si deseas conectar el OTBR de Docker a otros dispositivos físicos de Thread, usa un RCP físico. Si quieres probar el enrutamiento de borde con una red Thread simulada, usa un RCP simulado.
RCP físico
Usa cualquier plataforma compatible de OpenThread para el RCP físico. Si deseas obtener más información, consulta el paso Build and flash RCP de la guía de compilación y configuración del router de borde de OpenThread.
Adjunta el RCP
- Después de compilar y escribir en la memoria flash, conecta el dispositivo de RCP a la máquina que ejecuta Docker OTBR a través de USB.
- A fin de determinar el nombre del puerto en serie para el dispositivo RCP, verifica
/dev
:ls /dev/tty*
/dev/ttyACMO
Inicie el contenedor de Docker OTBR
En una ventana nueva de la terminal, inicia OTBR Docker, que hará referencia al puerto en serie de RCP.
Por ejemplo, si el RCP se activa en /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
Cuando se complete correctamente, debería obtener un resultado similar al siguiente:
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.
Se está ejecutando OTBR Docker. Deja esta ventana de la terminal abierta y en ejecución en segundo plano. Si sales del proceso o cierras la ventana, OTBR Docker dejará de funcionar.
Ve a Probar conectividad para continuar con la configuración de Docker de OTBR.
RCP simulado
Usa una compilación de RCP de OpenThread simulada para el RCP simulado. Esto es útil si quieres probar el enrutamiento de borde con una red Thread simulada en una sola máquina.
Compila la aplicación de RCP simulada
Clona el repositorio de OpenThread:
cd ~
git clone https://github.com/openthread/openthread
Inicia y compila la aplicación simulada:
cd openthread
./bootstrap
make -f examples/Makefile-simulation
Cómo configurar un flujo de datos bidireccional
Usa la utilidad de línea de comandos de socat
para establecer un flujo de datos bidireccional a fin de transferir datos entre el RCP simulado y el OTBR de Docker.
Abre una ventana de la terminal nueva para ejecutar este proceso, ya que se debe dejar en ejecución mientras se ejecuta OTBR Docker.
Instala
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]
Toma nota de los dos puertos en serie en negrita en la salida. Usa el primero para el RCP simulado y el segundo para Docker de OTBR. En el resultado de ejemplo anterior:
/dev/pts/2
= Puerto RCP simulado/dev/pts/7
= Docker de OTBR
Deje esta ventana de la terminal abierta y en ejecución en segundo plano.
Inicia el RCP simulado
Abre una ventana de terminal nueva para ejecutar el RCP simulado, ya que debe dejarse en ejecución mientras se ejecuta OTBR Docker.
Usa el primer puerto en serie de la salida
socat
para iniciar la aplicación de RCP simulada. Por ejemplo, si usas/dev/pts/2
del resultado desocat
:~/openthread/output/simulation/bin/ot-rcp 1 > /dev/pts/2 < /dev/pts/2
No hay resultados de este comando. Deja esta ventana de la terminal abierta y en ejecución en segundo plano.
Inicie el contenedor de Docker OTBR
En una ventana nueva de la terminal, inicia OTBR Docker con el segundo puerto en serie en el resultado de socat
. Por ejemplo, si usas /dev/pts/7
desde el resultado de 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
Ten en cuenta que el comando también usa el puerto /dev/ttyUSB0
. Este es el punto de activación predeterminado dentro del contenedor de Docker.
Cuando se complete correctamente, debería obtener un resultado similar al siguiente:
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.
Se está ejecutando OTBR Docker. Deja esta ventana de la terminal abierta y en ejecución en segundo plano. Si sales del proceso o cierras la ventana, OTBR Docker dejará de funcionar.