Exécuter OTBR pour Docker

Restez organisé à l'aide des collections Enregistrez et classez les contenus selon vos préférences.

Afficher la source sur GitHub

Le routeur de bordure OpenThread (OTBR) nécessite un nœud Thread RCP pour pouvoir rejoindre un réseau Thread. OTBR Docker est compatible avec un RCP physique (dongle OpenThread) ou une simulation de RCP.

Si vous souhaitez connecter le service OTBR Docker à d'autres appareils Thread physiques, utilisez un RCP physique. Si vous souhaitez tester le routage frontalier avec un réseau Thread simulé, utilisez un RCP simulé.

RCP physique

Utilisez n'importe quelle plate-forme OpenThread compatible pour le RCP physique. Pour en savoir plus, consultez l'étape Compiler et flasher le protocole RCP du guide de configuration et de création du routeur de bordure OpenThread.

Associer le RCP

  1. Après avoir créé et flashé l'appareil RCP, connectez-le à la machine qui exécute Docker OTBR via USB.
  2. Déterminez le nom du port série pour l'appareil RCP en vérifiant /dev :
    ls /dev/tty*
    /dev/ttyACMO
    

Démarrer le conteneur Docker OTBR

Dans une nouvelle fenêtre de terminal, démarrez Docker OTBR en référençant le port série du protocole RCP. Par exemple, si le RCP est installé dans /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 l'opération réussit, vous devriez obtenir un résultat semblable à celui-ci:

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 est maintenant en cours d'exécution. Laissez cette fenêtre de terminal ouverte et exécutée en arrière-plan. Si vous quittez le processus ou fermez la fenêtre, Docker OTBR sera arrêté.

Accédez à Tester la connectivité pour poursuivre la configuration de Docker OTBR.

Simulation de RCP

Utilisez une version RCP d'OpenThread simulé pour le RCP simulé. C'est utile si vous souhaitez tester le routage à la frontière avec un réseau Thread simulé sur une seule machine.

Créer l'application RCP simulée

  1. Clonez le dépôt OpenThread :

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

  2. Démarrez et compilez l'application simulée :

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

Configurer un flux de données bidirectionnel

Utilisez l'utilitaire de ligne de commande socat pour établir un flux de données bidirectionnel afin de transférer des données entre le pipeline Docker RCP et OTBR simulé.

  1. Ouvrez une nouvelle fenêtre de terminal pour exécuter ce processus. Vous devez le laisser en cours d'exécution pendant l'exécution de Docker OTBR.

  2. Installez socat :

    sudo apt-get install socat
    

  3. Démarrer 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]
    

Notez les deux ports série indiqués en gras dans le résultat. Utilisez la première pour le RCP simulé et la seconde pour Docker OTBR. Dans l'exemple de résultat ci-dessus:

  • /dev/pts/2 = port RCP simulé
  • /dev/pts/7 = Docker OTBR

Laissez cette fenêtre de terminal ouverte et exécutée en arrière-plan.

Démarrer le RCP simulé

  1. Ouvrez une nouvelle fenêtre de terminal pour exécuter le scénario RCP simulé, car il doit être laissé en cours d'exécution pendant l'exécution de Docker OTBR.

  2. À l'aide du premier port série de la sortie socat, démarrez l'application RCP simulée. Par exemple, si vous utilisez /dev/pts/2 à partir de la sortie socat :

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

Cette commande ne génère aucun résultat. Laissez cette fenêtre de terminal ouverte et exécutée en arrière-plan.

Démarrer le conteneur Docker OTBR

Dans une nouvelle fenêtre de terminal, démarrez Docker OTBR en utilisant le deuxième port série dans la sortie socat. Par exemple, si vous utilisez /dev/pts/7 à partir de la sortie 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

Notez que la commande utilise également le port /dev/ttyUSB0. Il s'agit du point d'installation par défaut dans le conteneur Docker.

Si l'opération réussit, vous devriez obtenir un résultat semblable à celui-ci:

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 est maintenant en cours d'exécution. Laissez cette fenêtre de terminal ouverte et exécutée en arrière-plan. Si vous quittez le processus ou fermez la fenêtre, Docker OTBR sera arrêté.