Ejecuta OTBR Docker

Ver el código fuente en GitHub

El router de borde de OpenThread (OTBR) requiere un nodo RCP de Thread para poder unirse a una red de Thread. OTBR Docker proporciona compatibilidad con una RCP física (llave de OpenThread) o una RCP simulada.

Si deseas conectar el Docker de OTBR 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ísico

Usa cualquier plataforma de OpenThread compatible para la 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

  1. Después de compilar y escribir en la memoria flash, conecta el dispositivo RCP a la máquina que ejecuta el Docker de OTBR a través de USB.
  2. Determina el nombre del puerto en serie para el dispositivo RCP. Para ello, verifica /dev:
    ls /dev/tty*
    /dev/ttyACMO
    

Inicia el contenedor de Docker de OTBR

En una nueva ventana de terminal, inicia el Docker de OTBR y haz referencia al puerto en serie de 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 la operación es exitosa, 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 ya 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 simulado

Usar una compilación de RCP de OpenThread simulada para la RCP simulada 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

  1. Clona el repositorio de OpenThread:

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

  2. Inicia y compila la aplicación simulada:

    cd openthread
    ./script/bootstrap
    ./script/cmake-build simulation
    

Cómo configurar un flujo de datos bidireccional

Usa la utilidad de línea de comandos socat para establecer una transmisión de datos bidireccional para transferir datos entre el Docker RCP y OTBR simulado.

  1. Abre una ventana de terminal nueva para ejecutar este proceso, ya que debe dejarse en ejecución mientras se ejecuta el Docker de OTBR.

  2. Instala socat:

    sudo apt-get install socat
    
    .

  3. Inicio del 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 la RCP simulado y el segundo para el 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

  1. Abre una ventana de terminal nueva para ejecutar el RCP simulado, ya que debe dejarse en ejecución mientras se ejecuta el Docker de OTBR.

  2. Con el primer puerto en serie en la salida socat, inicia la aplicación RCP simulada. Por ejemplo, si usas /dev/pts/2 del resultado de socat:

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

No hay resultados de este comando. 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 el Docker de OTBR con el segundo puerto en serie en la salida socat. Por ejemplo, si usas /dev/pts/7 del 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.

Si la operación es exitosa, 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, el Docker de OTBR dejará de funcionar.