1. Einleitung
Glücklich ist ein Werkzeug von Nest Labs für leichte Orchestrierung von simulierten Netzwerktopologien erstellt. Happy ist nützlich für die Entwicklung und das Testen von IoT-Heimnetzwerken.
Mit Happy können Sie:
- Testen Sie Netzwerkprotokolle und andere verteilte Ausführungsprogramme auf einem einzigen Linux-Entwicklungscomputer, ohne IoT-Gerätehardware zu verwenden
- Führen Sie automatisierte Funktionstests in einem Netzwerk durch
- Führen Sie mehrere gleichzeitige, parallele Netzwerke auf demselben System aus, um den Testdurchsatz zu verbessern
In diesem Codelab, erfahren Sie , wie mit glücklichem zu beginnen, sowie die Grundlagen der Webart für IoT - Geräte. Die Webart Implementierung Sie verwenden werden , ist OpenWeave , eine Open-Source - Version von Nest freigegeben.
Was du lernst
- So bauen Sie Happy und OpenWeave
- So erstellen Sie manuell ein simuliertes IoT-Netzwerk
- So verwalten Sie benutzerdefinierte Topologien
- So verbinden Sie ein simuliertes Happy-Netzwerk mit dem Internet
- Die Grundlagen von Weben
Was du brauchen wirst
- Eine Linux-Maschine, physisch oder virtuell
- Git-Client oder -cli
- Python 2.7
- Ein grundlegendes Verständnis von Netzwerk- und Routingkonzepten
2. Fangen Sie an
Toolchain und Abhängigkeiten installieren
Um Happy and Weave zu erstellen, stellen Sie sicher, dass Sie eine unterstützte Toolchain und alle Abhängigkeiten installiert haben.
$ sudo apt-get update $ sudo apt-get install -y autotools-dev build-essential git lcov \ libdbus-1-dev libglib2.0-dev libssl-dev \ libudev-dev make python2.7 software-properties-common \ python-setuptools bridge-utils python-lockfile \ python-psutil $ sudo apt-get install -y --force-yes gcc-arm-none-eabi $ sudo apt-get update -qq
Holen Sie sich den Quellcode
Klonen Sie die Happy- und OpenWeave-Git-Repositorys über die Befehlszeile:
$ cd ~ $ git clone https://github.com/openweave/happy.git $ git clone https://github.com/openweave/openweave-core.git
Installieren Sie Happy
Installieren Sie Happy aus dem Happy-Stammverzeichnis:
$ cd ~/happy $ make
Überprüfen Sie die glückliche Installation
Happy-Befehle sollten jetzt über die Befehlszeile zugänglich sein:
$ happy-state State Name: happy NETWORKS Name Type State Prefixes NODES Name Interface Type IPs
OpenWeave installieren
Installieren Sie OpenWeave aus dem OpenWeave-Stammverzeichnis:
$ cd ~/openweave-core $ make -f Makefile-Standalone
Konfigurieren Sie Happy mit OpenWeave
Um OpenWeave mit Happy zu verwenden, müssen Sie Happy mitteilen, wo die Weave-Installation zu finden ist. Aktualisieren Sie die glückliche Konfiguration mit dem Pfad zu /src/test-apps
in Ihrem OpenWeave Baujahr:
$ happy-configuration weave_path ~/openweave-core/build/x86_64-unknown-linux-gnu/src/test-apps
Bestätigen Sie die Konfiguration:
$ happy-configuration User Happy Configuration weave_path ~/openweave-core/build/x86_64-unknown-linux-gnu/src/test-apps
Überprüfen Sie die OpenWeave-Installation
Weave-Befehle, die in diesem Codelab benötigt werden, sind über die Befehlszeile zugänglich:
$ weave-fabric-add -h weave-fabric-add creates a weave fabric. weave-fabric-add [-h --help] [-q --quiet] [-i --id <FABRIC_ID>] Example: $ weave-fabric-add 123456 Creates a Weave Fabric with id 123456 return: 0 success 1 fail
Wenn Sie den Fehler weave-fabric-add: command not found
, aktualisieren Sie Ihren PATH
- Umgebungsvariable mit dem Pfad für Happy - Binärdateien verwendet:
$ export PATH=$PATH:~/openweave-core/src/test-apps/happy/bin
3. Ihre erste Topologie
Lassen Sie uns mit Happy die folgende Topologie mit drei Knoten erstellen.
Diese Topologie ist ein Beispiel für ein einfaches Home Area Network (HAN). In diesem HAN sind zwei Knoten in einem Thread-Netzwerk miteinander verbunden, und einer dieser Knoten verbindet sich über Wi-Fi mit einem dritten. Dieser Knoten kann auch zu Hause mit einem WLAN-Router verbunden werden, um eine Internetverbindung für den gesamten HAN bereitzustellen. Dazu später mehr.
Erstellen Sie zunächst die drei Knoten:
$ happy-node-add 01ThreadNode $ happy-node-add 02BorderRouter $ happy-node-add 03WiFiNode
Stellen wir sicher, dass sie existieren:
$ happy-node-list 01ThreadNode 02BorderRouter 03WiFiNode
Lassen Sie uns nun einige Netzwerke erstellen:
$ happy-network-add ThreadNetwork thread $ happy-network-add WiFiNetwork wifi
Überprüfen Sie, ob die Netzwerke vorhanden sind:
$ happy-network-list ThreadNetwork WiFiNetwork
Überprüfen Sie den Status "Zufrieden":
$ happy-state State Name: happy NETWORKS Name Type State Prefixes ThreadNetwork thread UP WiFiNetwork wifi UP NODES Name Interface Type IPs 01ThreadNode 02BorderRouter 03WiFiNode
Es reicht nicht aus, nur ein Netzwerk aufzubauen – wir müssen den Netzwerken Knoten hinzufügen. Fügen Sie gemäß unserem Topologiediagramm jeden Knoten dem/den entsprechenden Netzwerk(en) hinzu:
$ happy-node-join 01ThreadNode ThreadNetwork $ happy-node-join 02BorderRouter ThreadNetwork $ happy-node-join 02BorderRouter WiFiNetwork $ happy-node-join 03WiFiNode WiFiNetwork
Beachten Sie, dass 02BorderRouter
wurde sowohl hinzugefügt ThreadNetwork
und WiFiNetwork
. Denn als Border Router innerhalb unseres HAN verbindet dieser Knoten die beiden einzelnen Netzwerke miteinander.
Überprüfen Sie den Status "Zufrieden". Die Schnittstellen jedes Knotens sind aktiv:
$ happy-state State Name: happy NETWORKS Name Type State Prefixes ThreadNetwork thread UP WiFiNetwork wifi UP NODES Name Interface Type IPs 01ThreadNode wpan0 thread 02BorderRouter wpan0 thread wlan0 wifi 03WiFiNode wlan0 wifi
Unsere Topologie sieht nun so aus:
Der letzte Schritt beim Aufbau unseres Happy-Netzwerks besteht darin, jeder Schnittstelle auf jedem Knoten IP-Adressen zuzuweisen. Geben Sie das IP-Präfix für ein Netzwerk an und Happy weist Ihnen automatisch IP-Adressen zu.
Da das Thread-Protokoll IPv6 verwendet, fügen Sie dem Thread-Netzwerk ein IPv6-Präfix hinzu:
$ happy-network-address ThreadNetwork 2001:db8:1:2::
Überprüfen Sie den Status "Zufrieden". Die Thread-Schnittstellen auf jedem Thread-Knoten haben IP-Adressen:
$ happy-state State Name: happy NETWORKS Name Type State Prefixes ThreadNetwork thread UP 2001:0db8:0001:0002/64 WiFiNetwork wifi UP NODES Name Interface Type IPs 01ThreadNode wpan0 thread 2001:0db8:0001:0002:3e36:13ff:fe33:732e/64 02BorderRouter wpan0 thread 2001:0db8:0001:0002:a651:3eff:fe92:6dbc/64 wlan0 wifi 03WiFiNode wlan0 wifi
Fügen Sie für das WLAN-Netzwerk sowohl IPv4- als auch IPv6-Präfixe hinzu:
$ happy-network-address WiFiNetwork 2001:db8:a:b:: $ happy-network-address WiFiNetwork 10.0.1.0
Überprüfen Sie den Happy-Zustand noch einmal. Alle Schnittstellen haben zugewiesene IP-Adressen, mit zwei für jede Wi-Fi-Schnittstelle:
$ happy-state State Name: happy NETWORKS Name Type State Prefixes ThreadNetwork thread UP 2001:0db8:0001:0002/64 WiFiNetwork wifi UP 2001:0db8:000a:000b/64 10.0.1/24 NODES Name Interface Type IPs 01ThreadNode wpan0 thread 2001:0db8:0001:0002:3e36:13ff:fe33:732e/64 02BorderRouter wpan0 thread 2001:0db8:0001:0002:a651:3eff:fe92:6dbc/64 wlan0 wifi 10.0.1.2/24 2001:0db8:000a:000b:426c:38ff:fe90:01e6/64 03WiFiNode wlan0 wifi 2001:0db8:000a:000b:9aae:2bff:fe71:62fa/64 10.0.1.3/24
Hier ist unsere aktualisierte Topologie:
4. Testen Sie die Konnektivität
Nun , da unsere Happy - Netzwerk ist und läuft, lassen Sie uns die Konnektivität testen , indem Sie die anderen Knoten aus Pingen 01ThreadNode
:
$ happy-ping 01ThreadNode 02BorderRouter [Ping] ping from 01ThreadNode to 02BorderRouter on address 10.0.1.2 -> 100% packet loss [Ping] ping from 01ThreadNode to 02BorderRouter on address 2001:0db8:0001:0002:a651:3eff:fe92:6dbc -> 0% packet loss [Ping] ping from 01ThreadNode to 02BorderRouter on address 2001:0db8:000a:000b:426c:38ff:fe90:01e6 -> 100% packet loss $ happy-ping 01ThreadNode 03WiFiNode [Ping] ping from 01ThreadNode to 03WiFiNode on address 2001:0db8:000a:000b:9aae:2bff:fe71:62fa -> 100% packet loss [Ping] ping from 01ThreadNode to 03WiFiNode on address 10.0.1.3 -> 100% packet loss
Die happy-ping
- Befehl versucht , jede IP - Adresse für jede Schnittstelle auf dem Zielknoten pingen. Wir können die IPv4-Adressen ignorieren, da Thread nur IPv6 verwendet.
Beachten Sie, dass nur eine IPv6 Ping erfolgreich war: die eine auf 02BorderRouter
‚s wpan0
- Schnittstelle, die die einzige Adresse ist 01ThreadNode
direkt erreichen:
Die anderen IPv6 - Adressen sind fehlgeschlagen , da Weiterleitung zwischen nicht aktiviert wurde wpan0
und wlan0
auf 02BorderRouter
. So 01ThreadNode
hat keine Ahnung , 03WiFiNode
vorhanden ist , oder wie es zu erreichen. Happy hat das simulierte Netzwerk aufgerufen, aber nicht das gesamte Routing und die Weiterleitung zwischen den Knoten aktiviert.
Routen hinzufügen
Um IPv6-Datenverkehr über den HAN zu leiten, fügen Sie die richtigen Routen zu jedem Knoten in jedem Netzwerk in beide Richtungen hinzu (damit der Ping weiß, wie er zum Quellknoten zurückkehrt).
Für jeden Knoten müssen Sie Folgendes wissen:
- das nächste Netzwerk - Gateway-in diesem Fall
02BorderRouter
für beide - das Zielnetzwerk – wohin nach dem Gateway
Für unser Drei-Knoten-Netzwerk ergibt sich daraus Folgendes:
vom Quellnetzwerk | zum Zielnetzwerk | über Gateway |
| | |
| | |
Dies kann individuell für jeden Knoten mit erfolgen happy-node-route
, aber es ist einfacher , es für alle Knoten mit in jedes Netzwerk zu tun happy-network-route
.
$ happy-network-route -a -i ThreadNetwork -t default -v 02BorderRouter -p 2001:db8:1:2::/64 $ happy-network-route -a -i WiFiNetwork -t default -v 02BorderRouter -p 2001:db8:a:b::/64
Eine Erläuterung der Befehlszeilen - Flags, verwenden Sie happy-network-route -h
.
Der happy-network-route
- Befehl schaltet auch IPv4 und IPv6 - Forwarding für jeden Knoten, je nach Bedarf. Dadurch kann der Verkehr innerhalb eines Knotens von einer Schnittstelle zu einer anderen geleitet werden.
Versuchen Sie nun den Ping erneut:
$ happy-ping 01ThreadNode 02BorderRouter [Ping] ping from 01ThreadNode to 02BorderRouter on address 10.0.1.2 -> 100% packet loss [Ping] ping from 01ThreadNode to 02BorderRouter on address 2001:0db8:0001:0002:a651:3eff:fe92:6dbc -> 0% packet loss [Ping] ping from 01ThreadNode to 02BorderRouter on address 2001:0db8:000a:000b:426c:38ff:fe90:01e6 -> 0% packet loss
Beide IPv6-Pings funktionieren! Mit Weiterleitung auf, weiß er , wie das erreichen wlan0
Schnittstelle. Der IPv4-Ping schlägt immer noch fehl, da wir nur IPv6-Routen und -Weiterleitung konfiguriert haben (auch weil Thread nicht über IPv4 läuft).
Da wir auf beiden Seiten Netzwerkrouten hinzugefügt haben, lassen Sie uns über Netzwerke pingen:
$ happy-ping 01ThreadNode 03WiFiNode [Ping] ping from 01ThreadNode to 03WiFiNode on address 2001:0db8:000a:000b:9aae:2bff:fe71:62fa -> 0% packet loss [Ping] ping from 01ThreadNode to 03WiFiNode on address 10.0.1.3 -> 100% packet loss
Der IPv6-Ping funktioniert wie erwartet. Sie haben jetzt einen voll funktionsfähigen, simulierten IPv6-HAN.
Um eine sicherere und zuverlässigere Möglichkeit zu ermöglichen, alles miteinander zu verbinden, fügen wir Weave über dem HAN hinzu.
5. Webart hinzufügen
Weave ist eine Netzwerkanwendungsschicht, die das sichere und zuverlässige Kommunikations-Backbone für Nest-Produkte bietet. Wir können die Weave-Funktionalität mit OpenWeave, der Open-Source-Version von Weave, hinzufügen.
Eine Implementierung von Weave wird als "Stoff" bezeichnet. Ein Weave Fabric ist ein Netzwerk, das alle HAN-Knoten, den Nest-Dienst und alle am HAN teilnehmenden Mobilgeräte umfasst. Es sitzt auf dem HAN und ermöglicht ein einfacheres Routing über die verschiedenen zugrunde liegenden Netzwerkverbindungstechnologien (z. B. Thread oder Wi-Fi).
Erstellen Sie die Webart Stoff für Ihren HAN, mit fab1
als Stoff - ID, dann konfigurieren , dass alle Knoten für Weave:
$ weave-fabric-add fab1 $ weave-node-configure
Nachdem Weave konfiguriert ist, überprüfen Sie den Status Happy:
$ happy-state State Name: happy NETWORKS Name Type State Prefixes ThreadNetwork thread UP 2001:0db8:0001:0002/64 WiFiNetwork wifi UP 2001:0db8:000a:000b/64 10.0.1/24 NODES Name Interface Type IPs 01ThreadNode wpan0 thread 2001:0db8:0001:0002:3e36:13ff:fe33:732e/64 fd00:0000:fab1:0006:6bca:9502:eb69:11e7/64 02BorderRouter wpan0 thread fd00:0000:fab1:0006:6a6a:f236:eb69:11e7/64 2001:0db8:0001:0002:a651:3eff:fe92:6dbc/64 wlan0 wifi fd00:0000:fab1:0001:6a6a:f236:eb69:11e7/64 10.0.1.2/24 2001:0db8:000a:000b:426c:38ff:fe90:01e6/64 03WiFiNode wlan0 wifi 2001:0db8:000a:000b:9aae:2bff:fe71:62fa/64 10.0.1.3/24 fd00:0000:fab1:0001:6b82:6e60:eb69:11e7/64
Jeder Knoten ist mit dem Webstoff hinzugefügt, und jede Schnittstelle weist eine neue IPv6 - Adresse mit dem Start fd00
. Um weitere Informationen über die Webart Stoff zu erhalten, verwenden Sie die weave-state
- Befehl ein :
$ weave-state State Name: weave NODES Name Weave Node Id Pairing Code 01ThreadNode 69ca9502eb6911e7 8ZJB5Q 02BorderRouter 686af236eb6911e7 B5YV3P 03WiFiNode 69826e60eb6911e7 L3VT3A FABRIC Fabric Id Global Prefix fab1 fd00:0000:fab1::/48
Hier ist unsere aktualisierte Topologie mit den Weave-Werten in Blau:
Webstoff
Es gibt viele neue Informationen in den Bundesstaaten Weave und Happy. Beginnen wir mit dem Stoff aus weave-state
:
FABRIC Fabric Id Global Prefix fab1 fd00:0000:fab1::/48
Weave verwendet ein IPv6 - Präfix von fd00::/48
für jeden Knoten. Adressen in diesem Block werden als Unique Local Addresses bezeichnet und sind für die Verwendung in privaten Netzwerken wie einer HAN vorgesehen. Durch die Kombination mit der Fabric-ID wird das oben gezeigte globale Weave-Präfix generiert.
Knoten flechten
Jedem Knoten im Weave-Fabric wird eine eindeutige Knoten-ID zusammen mit einem Pairing-Code zugewiesen:
NODES Name Weave Node Id Pairing Code 01ThreadNode 69ca9502eb6911e7 8ZJB5Q 02BorderRouter 686af236eb6911e7 B5YV3P 03WiFiNode 69826e60eb6911e7 L3VT3A
Die Knoten-ID identifiziert global einen Knoten im Weave-Fabric. Der Pairing-Code wird während des Pairing-Prozesses als "Joiner-Anmeldeinformationen" verwendet und normalerweise zusammen mit dem QR-Code eines Produkts gedruckt.
Wenn Sie sich beispielsweise den QR-Code auf einem Nest Protect oder einer Nest Cam ansehen, werden Sie eine sechsstellige Zeichenfolge bemerken, die oft als Zugangsschlüssel bezeichnet wird. Dies ist der Weave Pairing Code.
Weave verwendet eine Kombination aus dem globalen Präfix, der Fabric-ID und der Node-ID, um Weave-spezifische IPv6-Adressen für jeden Knoten und jede Schnittstelle in der Fabric zu erstellen.
Adressen weben
Beachten Sie, dass es vier neue IPv6 - Adressen in der Happy - Topologie sind, alle beginnend mit unserer Weave globalen Präfix von fd00:0000:fab1::/48
.
NODES Name Interface Type IPs 01ThreadNode wpan0 thread 2001:0db8:0001:0002:3e36:13ff:fe33:732e/64 fd00:0000:fab1:0006:6bca:9502:eb69:11e7/64 02BorderRouter wpan0 thread fd00:0000:fab1:0006:6a6a:f236:eb69:11e7/64 2001:0db8:0001:0002:a651:3eff:fe92:6dbc/64 wlan0 wifi fd00:0000:fab1:0001:6a6a:f236:eb69:11e7/64 10.0.1.2/24 2001:0db8:000a:000b:426c:38ff:fe90:01e6/64 03WiFiNode wlan0 wifi 2001:0db8:000a:000b:9aae:2bff:fe71:62fa/64 10.0.1.3/24 fd00:0000:fab1:0001:6b82:6e60:eb69:11e7/64
Weave-Protokolle verwenden diese Adressen, um über das Weave-Fabric zu kommunizieren, und nicht die jedem Knoten zugewiesenen Standard-IPv6-Adressen.
Weave-Netzwerk-Gateway
Weave-Knoten in einem Thread-Netzwerk müssen wissen, wo dieses Netzwerk zu verlassen ist. Ein Weave-Netzwerk-Gateway – normalerweise auf einem Thread-Border-Router – bietet diese Funktionalität.
In unserer Beispieltopologie legen wir den BorderRouter-Knoten als Weave-Netzwerk-Gateway fest:
$ weave-network-gateway ThreadNetwork 02BorderRouter
Mit diesem Befehl wird eine Route von allen Gewinden Knoten zum Webstoff Subnetzes ( fd:0:fab1::/48
) über das BorderRouter
Gewinde Schnittstelle des Knotens ( wpan0
), die jeden Thread Knoten jede Webart Knoten über das Thema Netzwerk zu erreichen ermöglicht. Dies ist analog zu dem happy-network-route
- Befehl wir früher verwendet, aber spezifisch für Webstoff Routen.
6. Topologiewartung
Was Happy so leistungsstark macht, ist die einfache Verwaltung des gesamten Auf- und Abbaus einer simulierten Topologie.
Speichern Sie Ihre Happy-Topologie zur späteren Verwendung:
$ happy-state -s codelab.json
Dies stellt eine JSON - Datei mit der vollständigen Topologie in Ihrem Stamm ~/
Ordnern. Die JSON - Datei ist eine Kopie Ihres aktuellen glücklichen Zustand, der bei gefunden ~/.happy_state.json
.
Löschen Sie nach dem Speichern die aktuelle Topologie:
$ happy-state-delete
Dies löscht all Netzwerk - Namespaces und die damit verbundene gefundenen Konfigurationen in der ~/.happy-state.json
Datei. Überprüfen Sie happy-state
und weave-state
eine leere Konfiguration zu bestätigen:
$ happy-state State Name: happy NETWORKS Name Type State Prefixes NODES Name Interface Type IPs $ weave-state State Name: weave NODES Name Weave Node Id Pairing Code FABRIC Fabric Id Global Prefix
Um eine gespeicherte Konfiguration neu zu laden, verwenden Sie einen von zwei Befehlen:
-
happy-state-load
- nicht unterstützt Weave - Plugin -
weave-state-load
- unterstützt Weave - Plugin
Also , wenn Ihre Topologie Weave enthält, verwenden Sie immer den weave-state-load
- Befehl , so dass der Webstoff und zugehörige Konfiguration angewandt wird.
Laden Sie die gespeicherte Happy-Topologie erneut:
$ weave-state-load codelab.json
Überprüfen Sie alle Zustände, um ein erfolgreiches Laden zu bestätigen:
$ happy-state State Name: happy NETWORKS Name Type State Prefixes ThreadNetwork thread UP 2001:0db8:0001:0002/64 WiFiNetwork wifi UP 2001:0db8:000a:000b/64 10.0.1/24 NODES Name Interface Type IPs 01ThreadNode wpan0 thread 2001:0db8:0001:0002:eef6:a0ff:feca:6697/64 fd00:0000:fab1:0006:6bca:9502:eb69:11e7/64 02BorderRouter wpan0 thread fd00:0000:fab1:0006:6a6a:f236:eb69:11e7/64 2001:0db8:0001:0002:5e53:bbff:fe05:484b/64 wlan0 wifi 2001:0db8:000a:000b:2e61:fdff:fed9:4fbc/64 fd00:0000:fab1:0001:6a6a:f236:eb69:11e7/64 10.0.1.2/24 03WiFiNode wlan0 wifi fd00:0000:fab1:0001:6b82:6e60:eb69:11e7/64 10.0.1.3/24 2001:0db8:000a:000b:5e8e:c9ff:fed2:bdd1/64 $ weave-state State Name: weave NODES Name Weave Node Id Pairing Code 01ThreadNode 69ca9502eb6911e7 8ZJB5Q 02BorderRouter 686af236eb6911e7 B5YV3P 03WiFiNode 69826e60eb6911e7 L3VT3A FABRIC Fabric Id Global Prefix fab1 fd00:0000:fab1::/48
Im Happy-Repository wurden eine Reihe vordefinierter Topologien sowohl im Shell-Skript- als auch im JSON-Format bereitgestellt. Finden Sie sie auf ~/happy/topologies
.
OpenWeave wird zu Testzwecken auch mit ausgewählten vordefinierten Happy-Topologien geliefert. Finden Sie sie auf ~/openweave-core/src/test-apps/happy/topologies/standalone
.
7. Wie es funktioniert
Happy verwendet Linux-Netzwerk-Namespaces, um komplexe Topologien zu simulieren. Normalerweise gilt eine Netzwerkkonfiguration für das gesamte Linux-Betriebssystem. Mit Netzwerk-Namespaces können Sie Netzwerkkonfigurationen partitionieren, sodass jeder Namespace über einen eigenen Satz von Schnittstellen und Routing-Tabellen verfügt.
Jeder Knoten und jedes Netzwerk in Happy ist ein Netzwerknamensraum, während Verbindungen zwischen ihnen Netzwerkschnittstellen sind.
Verwenden Sie beispielsweise unsere Topologie:
Mal sehen, welche Namespaces Happy dafür erstellt hat:
$ ip netns list happy004 happy003 happy002 happy001 happy000
Wenn Sie das Kontroll netns
Abschnitts der glücklichen Zustand JSON - Datei können Sie , was Knoten und Netzwerke jeweils Namensraum entspricht sehen:
$ happy-state -j | grep "netns" -A 5 "netns": { "01ThreadNode": "000", "02BorderRouter": "001", "03WiFiNode": "002", "ThreadNetwork": "003", "WiFiNetwork": "004",
Laufzeitprotokolle
An Knoten ausgegebene Befehle sind grundlegende Terminalbefehle, die innerhalb des Namensraums jedes Knotens ausgeführt werden. Eine einfache Möglichkeit, dies zu sehen, besteht darin, Happy-Laufzeitprotokolle zu aktivieren.
Öffnen Sie ein zweites Terminalfenster und schalten Sie Protokolle ein, sie werden kontinuierlich in diesem Fenster ausgeführt:
$ happy-state -l
Gehen Sie zurück zum ersten Fenster und führen Sie einen Happy-Ping aus:
$ happy-ping 01ThreadNode 02BorderRouter
Überprüfen Sie die neuesten Logeinträge im zweiten Terminalfenster. Sie sollten eine Zeile wie diese in den Protokollen sehen:
DEBUG [Driver:CallCmd():416] Happy [happy]: > sudo ip netns exec happy000 ping6 -c 1 2001:0db8:0001:0002:5e53:bbff:fe05:484b
Die happy-ping
- Befehl ist nicht mehr als glücklich , den laufenden ping6
Befehl im happy000
Namensraum ( 01ThreadNode
).
Geben Sie einen Knoten ein
Verwenden happy-shell
nicht-Happy Befehle auszuführen als protokolliert , wenn in einem der Knoten (Netzwerk - Namespaces):
$ happy-shell 01ThreadNode root@01ThreadNode:#
Simulierte Geräte werden in jedem Namespace ausgeführt und haben nur Zugriff auf die von Happy angegebene Netzwerkkonfiguration.
Überprüfen Sie die Schnittstellenkonfiguration für den Knoten. Dies unterscheidet sich von Ihrer betriebssystemweiten Konfiguration und sollte widerspiegeln, was im Status "Zufrieden" aufgeführt ist:
root@01ThreadNode:# ifconfig lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:65536 Metric:1 RX packets:1 errors:0 dropped:0 overruns:0 frame:0 TX packets:1 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1 RX bytes:152 (152.0 B) TX bytes:152 (152.0 B) wpan0 Link encap:Ethernet HWaddr ec:f6:a0:ca:66:97 inet6 addr: fd00:0:fab1:6:6bca:9502:eb69:11e7/64 Scope:Global inet6 addr: 2001:db8:1:2:eef6:a0ff:feca:6697/64 Scope:Global inet6 addr: fe80::eef6:a0ff:feca:6697/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:32 errors:0 dropped:0 overruns:0 frame:0 TX packets:26 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:2832 (2.8 KB) TX bytes:2348 (2.3 KB)
Verwenden exit
des Knotens Namensraum zu verlassen:
root@01ThreadNode:# exit
8. Mit einem Dienst verbinden
Wenn Sie wissen, wie Happy Linux-Netzwerk-Namespaces verwendet, werden Sie jetzt vielleicht feststellen, dass es möglich ist, ein simuliertes Happy-Netzwerk mit dem Internet zu verbinden und von simulierten Knoten aus auf öffentliche Adressen zuzugreifen. Dies ist nützlich, um Ihre simulierten Geräte mit einem echten Dienst (wie dem Nest-Dienst über Weave) zu verbinden.
Der Service in Weave ist eine Cloud-basierte Infrastruktur, die HAN-Knoten zu einem Datenmodell verbindet, Fernzugriff bietet und intelligente Controller implementiert, um ein umfassendes Ökosystem zu schaffen.
Der Service kann mit Happy auf zwei Arten dargestellt werden:
- Als simulierter Dienst im eigenen Netzwerknamensraum (Happy Node)
- Als echter Cloud-Dienst im Internet
Vordefinierte Topologien wurden bereitgestellt ~/happy/topologies
als Beispiel für jeden Dienst Szenario.
Simulierter Dienst auf einem Happy-Knoten
Entfernen Sie alle vorhandenen Happy-Topologien:
$ happy-state-delete
Bestätigen Sie einen leeren Zustand mit den happy-state
und weave-state
- Befehle.
Laden Sie eine vordefinierte Topologie mit Access Point (AP) und Service Nodes:
$ weave-state-load ~/happy/topologies/thread_wifi_ap_service.json
Überprüfen Sie die Zustände Happy und Weave, um die Topologie zu bestätigen. In dieser Topologie onhub
ist die AP, während cloud
der simulierte Service. Hinweis sind beide mit einem Internet
- Netzwerk des Typs wan
:
$ happy-state State Name: happy NETWORKS Name Type State Prefixes HomeThread thread UP 2001:0db8:0111:0001/64 HomeWiFi wifi UP 2001:0db8:0222:0002/64 10.0.1/24 Internet wan UP 192.168.100/24 NODES Name Interface Type IPs BorderRouter wpan0 thread 2001:0db8:0111:0001:f624:13ff:fe4a:6def/64 fd00:0000:fab1:0006:1ab4:3000:0000:0005/64 wlan0 wifi 10.0.1.2/24 fd00:0000:fab1:0001:1ab4:3000:0000:0005/64 2001:0db8:0222:0002:9e31:97ff:fe73:29f0/64 ThreadNode wpan0 thread 2001:0db8:0111:0001:c237:fbff:fecc:b082/64 fd00:0000:fab1:0006:1ab4:3000:0000:0009/64 cloud eth0 wan 192.168.100.3/24 onhub wlan0 wifi 10.0.1.3/24 2001:0db8:0222:0002:3266:20ff:fe98:6ee2/64 eth0 wan 192.168.100.2/24 $ weave-state State Name: weave NODES Name Weave Node Id Pairing Code BorderRouter 18B4300000000005 AAA123 ThreadNode 18B4300000000009 AAA123 FABRIC Fabric Id Global Prefix fab1 fd00:0000:fab1::/48
Tunnel flechten
Ein Weave-Tunnel verbindet das Weave-Fabric mit einem Dienst. Dies ist eine sichere Route, die IPv6-UDP-Nachrichten zwischen dem HAN und dem Dienst überträgt. In dieser Topologie der BorderRouter
ist der Knoten der Webart Netzwerk - Gateway, der als der Tunnelendpunkt auf dem HAN.
Erstellen Sie den Weave-Tunnel:
$ weave-tunnel-start BorderRouter cloud
Überprüfen Sie den Status "Zufrieden". Sie sollten einen neuen Tunnel - Schnittstelle mit einer Webart IPv6 - Adresse auf dem sehen cloud
- Knoten:
NODES Name Interface Type IPs cloud service-tun0 tun fd00:0000:fab1:0005:1ab4:3002:0000:0011/64 eth0 wan 192.168.100.3/24
Sie können jetzt erfolgreich zwischen Knoten im Weave-Fabric und dem globalen Weave-Präfix des Dienstes pingen:
$ happy-ping ThreadNode cloud [Ping] ping from ThreadNode to cloud on address fd00:0000:fab1:0005:1ab4:3002:0000:0011 -> 0% packet loss
Echter Cloud-Service im Internet
Entfernen Sie alle vorhandenen Happy-Topologien:
$ happy-state-delete
Bestätigen Sie einen leeren Zustand mit den happy-state
und weave-state
- Befehle.
Laden Sie eine vordefinierte Topologie mit einem Access Point (AP)-Knoten:
$ weave-state-load ~/happy/topologies/thread_wifi_ap_internet.json
In dieser Topologie onhub
ist die AP. Überprüfen Sie den Status "Zufrieden". Es ist ähnlich wie bei der vorherigen Topologie, ohne das Internet
- Netzwerk und cloud
- Knoten:
$ happy-state State Name: happy NETWORKS Name Type State Prefixes HomeThread thread UP 2001:0db8:0111:0001/64 HomeWiFi wifi UP 2001:0db8:0222:0002/64 10.0.1/24 NODES Name Interface Type IPs BorderRouter wpan0 thread 2001:0db8:0111:0001:ca3f:71ff:fe53:1559/64 fd00:0000:fab1:0006:1ab4:3000:0000:0006/64 wlan0 wifi 2001:0db8:0222:0002:32e7:dfff:fee2:107a/64 fd00:0000:fab1:0001:1ab4:3000:0000:0006/64 10.0.1.2/24 ThreadNode wpan0 thread 2001:0db8:0111:0001:c2fb:97ff:fe04:64bd/64 fd00:0000:fab1:0006:1ab4:3000:0000:000a/64 onhub wlan0 wifi 10.0.1.3/24 2001:0db8:0222:0002:3a3c:8dff:fe38:999b/64 $ weave-state State Name: weave NODES Name Weave Node Id Pairing Code BorderRouter 18B4300000000006 AAA123 ThreadNode 18B430000000000A AAA123 FABRIC Fabric Id Global Prefix fab1 fd00:0000:fab1::/48
Da jeder Happy-Knoten ein Netzwerk-Namespace ist, werden sie standardmäßig vom öffentlichen Internet partitioniert. Testen Sie dies, indem Sie einen Happy-Knoten eingeben und eine öffentliche Internetadresse anpingen. Wir verwenden 8.8.8.8
, von google.com IPv4 - Adressen.
$ happy-shell onhub root@onhub:# ping -c2 8.8.8.8 connect: Network is unreachable
Um die Verbindung onhub
Knoten mit dem Internet, muss es an diese Schnittstelle auf der Linux - OS-Level - Konfiguration überbrückt werden.
Verlassen Sie den Knoten:
root@onhub:# exit
Bestimmen Sie die Schnittstelle für Ihre Internetverbindung mit dem route
- Befehl:
$ route Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface default 192.168.1.0 0.0.0.0 UG 0 0 0 em1
Finden Sie die default
Dies ist die Internetverbindung für Ihren Linux-Rechner. Die Iface
Spalte gibt an, welche Schnittstelle für die Konnektivität verwendet wird. In dem obigen Beispiel ist es em1
.
Verwenden Sie happy-internet
die Brücke einzurichten, über die Schnittstelle für Ihre Standardroute. Für die --isp
Flag, verwenden Sie den Namen der Schnittstelle ohne Zahlen Hinter. In diesem Beispiel ist es em
. Wenn Ihre Standard - Schnittstelle ist eth1
, die --isp
wäre Flagge eth
.
$ happy-internet --node onhub --interface em1 --isp em --seed 249
Es wird in dem keine sichtbare Veränderung seines happy-state
ausgegeben, aber der onhub
Knoten sollte eine Internetverbindung verfügen. Gehen wir zurück in den Knoten und prüfen:
$ happy-shell onhub root@onhub:# ping -c2 8.8.8.8 PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data. 64 bytes from 8.8.8.8: icmp_seq=1 ttl=56 time=1.81 ms 64 bytes from 8.8.8.8: icmp_seq=2 ttl=56 time=1.81 ms --- 8.8.8.8 ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 1001ms rtt min/avg/max/mdev = 1.814/1.816/1.819/0.042 ms
Erfolg!
DNS
Happy Nodes verfügen nicht über integrierte DNS-Funktionen. Wenn Sie versuchen, google.com anzupingen, schlägt dies fehl:
root@onhub:# ping -c2 google.com ping: unknown host google.com
Glücklicherweise bietet Happy DNS-Unterstützung. Beenden Sie den Knoten und suchen Sie die DNS-Server für Ihren Linux-Computer. Stellen Sie sicher, dass Sie die entsprechende Standardschnittstelle verwenden:
root@onhub:# exit $ nmcli dev list iface em1 | grep domain_name_servers DHCP4.OPTION[13]: domain_name_servers = 172.16.255.1 172.16.255.153 172.16.255.53
Verwenden Sie diese DNS - Adressen mit happy-dns
:
$ happy-dns 172.16.255.1 172.16.255.153 172.16.255.53
Versuchen Sie nun google.com aus dem Pingen onhub
Knoten:
$ happy-shell onhub root@onhub:# ping -c2 google.com PING google.com (64.233.191.113) 56(84) bytes of data. 64 bytes from ja-in-f113.1e100.net (64.233.191.113): icmp_seq=1 ttl=46 time=36.9 ms 64 bytes from ja-in-f113.1e100.net (64.233.191.113): icmp_seq=2 ttl=46 time=37.0 ms --- google.com ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 1001ms rtt min/avg/max/mdev = 36.978/36.995/37.013/0.193 ms
Verlassen Sie den onhub
Knoten , wenn Sie fertig sind :
root@onhub:# exit
Tunnel flechten
Wie beim simulierten Dienst muss zwischen dem simulierten HAN in Happy und dem Dienst ein Weave-Tunnel eingerichtet werden. Verwenden Sie bei einem echten Cloud-Dienst die IP-Adresse oder URL des Dienstes in der Tunneleinrichtung. Zum Beispiel:
$ weave-tunnel-start BorderRouter mycloud.service.com
9. Aufräumen
Es ist wichtig, Happy-Topologien immer zu bereinigen, wenn Sie damit fertig sind, um Probleme mit Ihrer Linux-Netzwerkkonfiguration zu vermeiden.
Wenn Sie DNS - Unterstützung in Ihrer Topologie aktiviert ist , entfernen Sie sie durch diesen Befehl mit dem rerunning -d
(delete) Flag zuerst. Dies muss ausgeführt werden, bevor Happy-Knoten entfernt werden, um sicherzustellen, dass die Netzwerkkonfiguration ordnungsgemäß aktualisiert wird.
$ happy-dns -d 172.16.255.1 172.16.255.153 172.16.255.53
Löschen Sie als Nächstes den Status "Happy":
$ happy-state-delete
Gelegentlich können einige Statusdateien nach einer Statuslöschung verbleiben. Wenn Probleme und guten Rutsch ins laufen nicht wie erwartet funktioniert, löschen Sie den Zustand mit happy-state-delete
und dann die folgenden Befehle verwenden alle verbleibenden sauber bis zu erzwingen:
$ ip netns | xargs -I {} sudo ip netns delete {} $ rm -rf ~/.*state.json $ rm -rf ~/.*state.json.lock
Ihr Gerät sollte wieder in seiner normalen Netzwerkkonfiguration sein.
10. Herzlichen Glückwunsch!
Sie wissen jetzt:
- So verwenden Sie Happy, um Ihre eigenen IoT-Heimnetzwerke zu simulieren
- So verbinden Sie Happy-Topologien mit dem Internet
- Die Grundlagen von Weave über OpenWeave, Nests Open-Source-Version von Weave
Nächste Schritte
Versuchen Sie, aufbauend auf diesem Codelab, die folgenden Übungen:
- Erstellen Sie eine größere Topologie mit mehreren Knoten in jedem Thread und Wi-Fi-Netzwerk und stellen Sie die Konnektivität zwischen allen Knoten her
- Erstellen Sie einen Bash - Skript , um die Topologie über laden
happy-state-load
oderweave-state-load
- Sehen Sie sich andere Glückliche Befehle, wie
happy-traceroute
undhappy-process-*
Weiterlesen
Prüfen openweave.io für eine Vielzahl von Referenzen, einschließlich: