Afficher le code source sur GitHub
Le routeur de bordure OpenThread (OTBR) nécessite un nœud RCP Thread pour rejoindre un réseau Thread. Docker OTBR prend en charge à la fois un RCP physique (dongle OpenThread) ou une simulation de RCP.
Si vous souhaitez connecter OTBR Docker à d'autres appareils Thread physiques, utilisez un RCP physique. Si vous souhaitez tester le routage à la frontière avec un réseau Thread simulé, utilisez une simulation de RCP.
RCP physique
Utilisez n'importe quelle plate-forme OpenThread compatible pour le RCP physique. Pour en savoir plus, reportez-vous à l'étape Compiler et flasher RCP du guide de création et de configuration d'OpenThread Border Router.
Associer le RCP
- Après avoir créé et flashé l'appareil RCP, connectez-le à la machine exécutant Docker OTBR via USB.
- Déterminez le nom du port série pour l'appareil RCP en cochant
/dev
:ls /dev/tty*
/dev/ttyACMO
Démarrer le conteneur Docker OTBR
Dans une nouvelle fenêtre de terminal, démarrez OTBR Docker en référençant le port série du 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
En cas de réussite, 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.
Docker OTBR 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.
RCP simulé
Utilisez une version RCP simulée pour le RCP simulé. Cette fonctionnalité est utile si vous souhaitez tester le routage à la frontière avec une simulation de réseau Thread sur une seule machine.
Créer l'application RCP simulée
Clonez le dépôt OpenThread :
cd ~
git clone https://github.com/openthread/openthread
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 les simulations de RCP et de OTBR Docker.
Ouvrez une nouvelle fenêtre de terminal pour exécuter ce processus, car il doit rester exécuté pendant que OTBR Docker est en cours d'exécution.
Installez
socat
:sudo apt-get install socat
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
= OTBR Docker
Laissez cette fenêtre de terminal ouverte et exécutée en arrière-plan.
Démarrer le RCP simulé
Ouvrez une nouvelle fenêtre de terminal pour exécuter le RCP simulé, car il doit rester en cours d'exécution pendant l'exécution de OTBR Docker.
En utilisant le premier port série dans la sortie
socat
, démarrez l'application RCP simulée. Par exemple, si vous utilisez/dev/pts/2
à partir de la sortiesocat
:~/openthread/build/simulation/examples/apps/ncp/ot-rcp 1 > /dev/pts/2 < /dev/pts/2
Cette commande ne renvoie 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 OTBR Docker à l'aide du 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.
En cas de réussite, 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.
Docker OTBR 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é.