El router de borde OpenThread (OTBR) requiere un nodo RCP de Thread para unirse a una red de Thread. OTBR Docker admite un RCP físico (llave de dongle de OpenThread) o un RCP simulado.
Si deseas conectar OTBR Docker a otros dispositivos Thread físicos, usa un RCP físico. Si deseas probar el enrutamiento fronterizo con una red Thread simulada, usa una RCP simulada.
RCP física
Usa cualquier plataforma OpenThread compatible para el RCP físico. Para obtener más información, consulta el paso Cómo compilar y escribir en la memoria flash del RCP de la guía de compilación y configuración del router de borde OpenThread.
Conecta el RCP
- Después de compilar y actualizar la memoria flash, conecta el dispositivo RCP a la máquina que ejecuta Docker de OTBR a través de USB.
- Para determinar el nombre del puerto serie del dispositivo RCP, verifica
/dev
:ls /dev/tty*
/dev/ttyACMO
Inicia el contenedor de Docker de OTBR
En una ventana de terminal nueva, inicia OTBR Docker y haz referencia al puerto serie del RCP.
Por ejemplo, si el RCP está activado 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
Si se realiza de forma correcta, deberías tener 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.
OTBR Docker ahora se está ejecutando. Deja esta ventana de terminal abierta y ejecutándose en segundo plano. Si sales del proceso o cierras la ventana, el Docker de OTBR dejará de funcionar.
Ve a Probar conectividad para continuar con la configuración de OTBR Docker.
RCP simulada
Usa una compilación simulada de RCP de OpenThread para el RCP simulado. Esto es útil si deseas probar el enrutamiento de borde con una red Thread simulada en una sola máquina.
Compila la aplicación RCP simulada
Clona el repositorio de OpenThread:
cd ~
git clone https://github.com/openthread/openthread
Inicia y compila la aplicación simulada:
cd openthread
./script/bootstrap
./script/cmake-build simulation
Configura un flujo de datos bidireccional
Usa la utilidad de línea de comandos socat
para establecer un flujo de datos bidireccional para transferir datos entre el RCP simulado y el Docker de OTBR.
Abre una ventana de terminal nueva para ejecutar este proceso, ya que debe dejarse en ejecución mientras se ejecuta el Docker de OTBR.
Instala
socat
:sudo apt-get install socat
Inicia
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 que aparecen en negrita en el resultado. 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
Deja esta ventana de terminal abierta y ejecutándose en segundo plano.
Inicia la RCP simulada
Abre una ventana de terminal nueva para ejecutar el RCP simulado, ya que se debe dejar en ejecución mientras se ejecuta OTBR Docker.
Con el primer puerto en serie de la salida de
socat
, inicia la aplicación RCP simulada. Por ejemplo, si usas/dev/pts/2
desde el resultado desocat
:~/openthread/build/simulation/examples/apps/ncp/ot-rcp 1 > /dev/pts/2 < /dev/pts/2
Este comando no genera ningún resultado. Deja esta ventana de terminal abierta y ejecutándose en segundo plano.
Inicia el contenedor de Docker de OTBR
En una ventana de terminal nueva, inicia OTBR Docker con el segundo puerto 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 predeterminada dentro del contenedor de Docker.
Si se realiza de forma correcta, deberías tener 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.
OTBR Docker ya se está ejecutando. Deja esta ventana de terminal abierta y ejecutándose en segundo plano. Si sales del proceso o cierras la ventana, se cerrará el Docker de OTBR.