1. Perkenalan
Senang adalah alat yang dibuat oleh laboratorium Nest untuk orkestrasi ringan topologi jaringan simulasi. Happy berguna untuk pengembangan dan pengujian jaringan area rumah IoT.
Dengan Bahagia, Anda dapat:
- Uji protokol jaringan dan program eksekusi terdistribusi lainnya pada satu mesin pengembangan Linux tanpa menggunakan perangkat keras perangkat IoT
- Lakukan pengujian fungsional otomatis di seluruh jaringan
- Jalankan beberapa jaringan paralel bersamaan pada sistem yang sama untuk meningkatkan hasil pengujian
Dalam Codelab ini, Anda akan belajar bagaimana untuk memulai dengan Happy, serta dasar-dasar Weave untuk perangkat IOT. Pelaksanaan Weave yang akan Anda gunakan adalah OpenWeave , versi open-source yang dirilis oleh Nest.
Apa yang akan Anda pelajari?
- Bagaimana membangun Happy dan OpenWeave
- Cara membuat jaringan IoT yang disimulasikan secara manual
- Bagaimana mengelola topologi khusus
- Bagaimana menghubungkan jaringan Happy yang disimulasikan ke internet
- Dasar-dasar Menenun
Apa yang Anda butuhkan?
- Mesin Linux, fisik atau virtual
- Git klien atau cli
- Python 2.7
- Pemahaman dasar tentang konsep jaringan dan perutean
2. Mulai
Instal rantai alat dan dependensi
Untuk membangun Happy dan Weave, pastikan Anda memiliki rantai alat yang didukung dan semua dependensi terpasang.
$ 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
Dapatkan kode sumbernya
Kloning repositori Happy dan OpenWeave Git dari baris perintah:
$ cd ~ $ git clone https://github.com/openweave/happy.git $ git clone https://github.com/openweave/openweave-core.git
Instal Senang
Dari direktori root Happy, instal Happy:
$ cd ~/happy $ make
Verifikasi Selamat instalasi
Perintah bahagia sekarang harus dapat diakses dari baris perintah:
$ happy-state State Name: happy NETWORKS Name Type State Prefixes NODES Name Interface Type IPs
Instal OpenWeave
Dari direktori root OpenWeave, instal OpenWeave:
$ cd ~/openweave-core $ make -f Makefile-Standalone
Konfigurasikan Senang dengan OpenWeave
Untuk menggunakan OpenWeave dengan Happy, Anda perlu memberi tahu Happy di mana menemukan instalasi Weave. Update konfigurasi Bahagia dengan path ke /src/test-apps
dalam OpenWeave membangun Anda:
$ happy-configuration weave_path ~/openweave-core/build/x86_64-unknown-linux-gnu/src/test-apps
Konfirmasi konfigurasi:
$ happy-configuration User Happy Configuration weave_path ~/openweave-core/build/x86_64-unknown-linux-gnu/src/test-apps
Verifikasi instalasi OpenWeave
Perintah menenun yang diperlukan dalam Codelab ini dapat diakses dari baris perintah:
$ 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
Jika Anda mendapatkan error weave-fabric-add: command not found
, memperbarui PATH
variabel lingkungan dengan jalur yang digunakan untuk binari Selamat:
$ export PATH=$PATH:~/openweave-core/src/test-apps/happy/bin
3. Topologi pertama Anda
Mari kita buat topologi tiga node berikut dengan Happy.
Topologi ini merupakan contoh dari Home Area Network (HAN) sederhana. Dalam HAN ini, dua node terhubung bersama dalam jaringan Thread, dan salah satu dari node tersebut terhubung ke yang ketiga melalui Wi-Fi. Node ini juga dapat dihubungkan ke router nirkabel di rumah untuk menyediakan konektivitas internet untuk seluruh HAN. Lebih lanjut tentang ini nanti.
Pertama, buat tiga node:
$ happy-node-add 01ThreadNode $ happy-node-add 02BorderRouter $ happy-node-add 03WiFiNode
Mari kita pastikan mereka ada:
$ happy-node-list 01ThreadNode 02BorderRouter 03WiFiNode
Sekarang mari kita buat beberapa jaringan:
$ happy-network-add ThreadNetwork thread $ happy-network-add WiFiNetwork wifi
Verifikasi bahwa jaringan ada:
$ happy-network-list ThreadNetwork WiFiNetwork
Periksa status Bahagia:
$ happy-state State Name: happy NETWORKS Name Type State Prefixes ThreadNetwork thread UP WiFiNetwork wifi UP NODES Name Interface Type IPs 01ThreadNode 02BorderRouter 03WiFiNode
Tidak cukup hanya dengan membawa jaringan—kita harus menambahkan node ke jaringan. Mengikuti diagram topologi kami, tambahkan setiap node ke jaringan yang sesuai:
$ happy-node-join 01ThreadNode ThreadNetwork $ happy-node-join 02BorderRouter ThreadNetwork $ happy-node-join 02BorderRouter WiFiNetwork $ happy-node-join 03WiFiNode WiFiNetwork
Perhatikan bahwa 02BorderRouter
ditambahkan ke kedua ThreadNetwork
dan WiFiNetwork
. Itu karena sebagai Router Perbatasan dalam HAN kami, node ini menghubungkan dua jaringan individu bersama-sama.
Periksa status Bahagia. Antarmuka setiap node sudah habis:
$ 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
Topologi kami sekarang terlihat seperti ini:
Langkah terakhir dalam memunculkan jaringan Happy kami adalah menetapkan alamat IP untuk setiap antarmuka pada setiap node. Tentukan awalan IP untuk jaringan, dan Happy secara otomatis memberikan alamat IP untuk Anda.
Karena protokol Thread menggunakan IPv6, tambahkan awalan IPv6 ke jaringan Thread:
$ happy-network-address ThreadNetwork 2001:db8:1:2::
Periksa status Bahagia. Antarmuka Thread pada setiap node Thread memiliki alamat IP:
$ 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
Untuk jaringan WiFi, tambahkan awalan IPv4 dan IPv6:
$ happy-network-address WiFiNetwork 2001:db8:a:b:: $ happy-network-address WiFiNetwork 10.0.1.0
Periksa status Happy sekali lagi. Semua antarmuka telah menetapkan alamat IP, dengan dua untuk setiap antarmuka Wi-Fi:
$ 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
Berikut adalah topologi kami yang diperbarui:
4. Uji konektivitas
Sekarang bahwa jaringan Bahagia kita bangun dan berjalan, mari kita uji konektivitas dengan melakukan ping node lain dari 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
The happy-ping
perintah mencoba untuk melakukan ping setiap alamat IP untuk setiap antarmuka pada node target. Kita dapat mengabaikan alamat IPv4 karena Thread hanya menggunakan IPv6.
Perhatikan bahwa hanya satu ping IPv6 berhasil: satu di 02BorderRouter
's wpan0
interface, yang merupakan satu-satunya alamat 01ThreadNode
dapat langsung menjangkau:
Alamat IPv6 lainnya gagal karena forwarding belum diaktifkan antara wpan0
dan wlan0
di 02BorderRouter
. Dengan demikian, 01ThreadNode
tidak tahu 03WiFiNode
ada, atau bagaimana untuk mencapai itu. Happy telah memunculkan jaringan simulasi, tetapi belum mengaktifkan semua perutean dan penerusan antar node.
Tambahkan rute
Untuk merutekan lalu lintas IPv6 melintasi HAN, tambahkan rute yang tepat ke setiap node di setiap jaringan, di kedua arah (sehingga ping tahu cara kembali ke node sumber).
Untuk setiap simpul, Anda perlu mengetahui:
- jaringan terdekat gerbang-dalam hal ini,
02BorderRouter
untuk kedua - jaringan target—ke mana harus pergi setelah gateway
Untuk jaringan tiga simpul kami, itu memberi kami yang berikut:
dari Jaringan Sumber | ke Jaringan Target | melalui Gerbang |
| | |
| | |
Hal ini dapat dilakukan secara individual untuk setiap node dengan happy-node-route
, tapi lebih mudah untuk melakukannya untuk semua node dalam setiap jaringan dengan 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
Untuk penjelasan tentang bendera baris perintah, gunakan happy-network-route -h
.
The happy-network-route
perintah juga menyala IPv4 dan IPv6 forwarding untuk setiap node, sesuai kebutuhan. Ini memungkinkan lalu lintas untuk merutekan dari satu antarmuka ke antarmuka lain dalam sebuah simpul.
Sekarang coba lagi ping:
$ 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
Kedua ping IPv6 berfungsi! Dengan forwarding, itu tahu bagaimana untuk mencapai wlan0
antarmuka. Ping IPv4 masih gagal, karena kami hanya mengonfigurasi rute dan penerusan IPv6 (juga karena Thread tidak berjalan di atas IPv4).
Karena kami menambahkan rute jaringan ke kedua sisi, mari ping di seluruh jaringan:
$ 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
Ping IPv6 berfungsi seperti yang diharapkan. Anda sekarang memiliki HAN IPv6 simulasi yang berfungsi penuh.
Untuk mengaktifkan cara yang lebih aman dan andal untuk menghubungkan semuanya, mari tambahkan Weave di atas HAN.
5. Tambahkan Tenunan
Weave adalah lapisan aplikasi jaringan yang menyediakan tulang punggung komunikasi yang aman dan andal untuk produk Nest. Kita dapat menambahkan fungsionalitas Weave dengan OpenWeave, versi open-source dari Weave.
Implementasi dari Weave disebut "kain". Fabric Weave adalah jaringan yang terdiri dari semua node HAN, Layanan Nest, dan perangkat seluler apa pun yang berpartisipasi dalam HAN. Itu berada di atas HAN dan memungkinkan perutean yang lebih mudah melintasi berbagai teknologi tautan jaringan yang mendasarinya (misalnya, Thread atau Wi-Fi).
Buat kain Weave untuk HAN Anda, menggunakan fab1
sebagai Fabric ID, kemudian mengkonfigurasi semua node untuk Weave:
$ weave-fabric-add fab1 $ weave-node-configure
Sekarang setelah Weave dikonfigurasi, periksa 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
Setiap node telah ditambahkan ke kain Weave, dan masing-masing antarmuka memiliki alamat IPv6 baru dimulai dengan fd00
. Untuk mendapatkan informasi lebih lanjut tentang kain Weave, gunakan weave-state
perintah:
$ 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
Berikut adalah topologi kami yang diperbarui, dengan nilai Weave berwarna biru:
menenun kain
Ada banyak informasi baru di negara bagian Weave dan Happy. Mari kita mulai dengan kain dari weave-state
:
FABRIC Fabric Id Global Prefix fab1 fd00:0000:fab1::/48
Weave menggunakan awalan IPv6 dari fd00::/48
untuk setiap node. Alamat di blok ini disebut Alamat Lokal Unik dan ditujukan untuk digunakan dalam jaringan pribadi seperti HAN. Menggabungkannya dengan Fabric ID menghasilkan Weave Global Prefix yang ditunjukkan di atas.
Menenun simpul
Setiap node dalam kain Weave diberi ID Node unik, bersama dengan Kode Penyandingan:
NODES Name Weave Node Id Pairing Code 01ThreadNode 69ca9502eb6911e7 8ZJB5Q 02BorderRouter 686af236eb6911e7 B5YV3P 03WiFiNode 69826e60eb6911e7 L3VT3A
ID Node secara global mengidentifikasi sebuah node di fabric Weave. Kode Penyandingan digunakan sebagai "kredensial penggabung" selama proses pemasangan, dan biasanya akan dicetak di samping kode QR produk.
Misalnya, jika Anda melihat kode QR di Nest Protect atau Nest Cam, Anda akan melihat string 6 karakter, yang sering disebut sebagai Kunci Masuk. Ini adalah Kode Pairing Weave.
Weave menggunakan kombinasi Global Prefix, Fabric ID, dan Node ID untuk membuat alamat IPv6 khusus Weave untuk setiap node dan antarmuka di fabric.
Alamat tenun
Perhatikan bahwa ada empat alamat IPv6 baru di Happy topologi, semua dimulai dengan kami Weave global Awalan dari 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
Protokol Weave menggunakan alamat ini untuk berkomunikasi di seluruh fabric Weave, daripada alamat IPv6 standar yang ditetapkan untuk setiap node.
Menenun gerbang jaringan
Menenun node pada jaringan Thread perlu tahu ke mana harus keluar dari jaringan itu. Gateway jaringan Weave—biasanya pada Thread Border Router—menyediakan fungsionalitas ini.
Dalam topologi contoh kami, mari kita tentukan node BorderRouter sebagai gateway jaringan Weave:
$ weave-network-gateway ThreadNetwork 02BorderRouter
Perintah ini menambahkan rute dari semua node Thread ke kain subnet Weave ( fd:0:fab1::/48
) melalui BorderRouter
antarmuka Thread node ( wpan0
), yang memungkinkan setiap node Thread untuk mencapai setiap node Weave luar jaringan Thread. Ini adalah analog dengan happy-network-route
perintah yang kita gunakan sebelumnya, tetapi khusus untuk Weave kain rute.
6. Pemeliharaan topologi
Apa yang membuat Happy begitu kuat adalah bagaimana ia dengan mudah mengelola semua pengaturan dan pembongkaran topologi yang disimulasikan.
Simpan topologi Happy Anda untuk digunakan nanti:
$ happy-state -s codelab.json
Ini tempat file JSON dengan topologi lengkap dalam akar Anda ~/
folder. File JSON adalah salinan Happy keadaan Anda saat ini, yang ditemukan di ~/.happy_state.json
.
Setelah disimpan, hapus topologi saat ini:
$ happy-state-delete
Ini akan menghapus semua ruang nama jaringan dan konfigurasi terkait ditemukan di ~/.happy-state.json
berkas. Periksa happy-state
dan weave-state
untuk mengkonfirmasi konfigurasi kosong:
$ 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
Untuk memuat ulang konfigurasi yang disimpan, gunakan salah satu dari dua perintah:
-
happy-state-load
- tidak mendukung Plugin Weave -
weave-state-load
- mendukung Weave Plugin
Jadi jika topologi Anda termasuk Weave, selalu menggunakan weave-state-load
perintah sehingga kain Weave dan konfigurasi terkait diterapkan.
Muat ulang topologi Happy yang disimpan:
$ weave-state-load codelab.json
Periksa semua status untuk mengonfirmasi pemuatan yang berhasil:
$ 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
Sejumlah topologi yang telah ditentukan sebelumnya telah disediakan di repositori Happy, dalam format shell-script dan JSON. Menemukan mereka di ~/happy/topologies
.
OpenWeave juga dilengkapi dengan topologi Happy tertentu yang telah ditentukan sebelumnya untuk tujuan pengujian. Menemukan mereka di ~/openweave-core/src/test-apps/happy/topologies/standalone
.
7. Cara kerjanya
Happy menggunakan ruang nama jaringan Linux untuk mensimulasikan topologi kompleks. Biasanya, konfigurasi jaringan berlaku di seluruh OS Linux. Ruang nama jaringan memungkinkan Anda untuk mempartisi konfigurasi jaringan sehingga setiap ruang nama memiliki rangkaian antarmuka dan tabel peruteannya sendiri.
Setiap node dan jaringan di Happy adalah ruang nama jaringan, sedangkan tautan di antara mereka adalah antarmuka jaringan.
Misalnya, menggunakan topologi kami:
Mari kita lihat namespace apa yang dibuat Happy untuk ini:
$ ip netns list happy004 happy003 happy002 happy001 happy000
Jika Anda memeriksa netns
bagian dari negara Bahagia berkas JSON, Anda dapat melihat apa node dan jaringan masing-masing berkorespondensi namespace ke:
$ happy-state -j | grep "netns" -A 5 "netns": { "01ThreadNode": "000", "02BorderRouter": "001", "03WiFiNode": "002", "ThreadNetwork": "003", "WiFiNetwork": "004",
Log waktu berjalan
Perintah yang dikeluarkan ke node adalah perintah terminal dasar yang dijalankan dari dalam namespace setiap node. Cara mudah untuk melihat ini adalah dengan mengaktifkan Happy run-time logs.
Buka jendela terminal kedua dan nyalakan log, mereka akan terus berjalan di jendela ini:
$ happy-state -l
Kembali ke jendela pertama dan jalankan ping Selamat:
$ happy-ping 01ThreadNode 02BorderRouter
Periksa entri log terbaru di jendela terminal kedua. Anda akan melihat baris seperti ini di log:
DEBUG [Driver:CallCmd():416] Happy [happy]: > sudo ip netns exec happy000 ping6 -c 1 2001:0db8:0001:0002:5e53:bbff:fe05:484b
The happy-ping
perintah tidak lebih dari Selamat menjalankan ping6
perintah di happy000
namespace ( 01ThreadNode
).
Masukkan simpul
Gunakan happy-shell
untuk menjalankan perintah non-Happy seakan login ke salah satu node (ruang nama jaringan):
$ happy-shell 01ThreadNode root@01ThreadNode:#
Perangkat simulasi dijalankan dalam setiap namespace, dan mereka hanya memiliki akses ke konfigurasi jaringan yang ditentukan melalui Happy.
Periksa konfigurasi antarmuka untuk node. Ini akan berbeda dari konfigurasi seluruh OS Anda dan harus mencerminkan apa yang tercantum dalam status Happy:
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)
Gunakan exit
untuk meninggalkan namespace node:
root@01ThreadNode:# exit
8. Hubungkan ke layanan
Dengan pemahaman tentang bagaimana Happy menggunakan ruang nama jaringan Linux, Anda sekarang mungkin menyadari bahwa dimungkinkan untuk menghubungkan jaringan Happy yang disimulasikan ke internet dan mengakses alamat publik dari dalam node yang disimulasikan. Ini berguna untuk menghubungkan perangkat simulasi Anda ke layanan nyata (seperti Layanan Nest melalui Weave).
Layanan di Weave adalah infrastruktur berbasis cloud yang menghubungkan node HAN ke dalam model data, menyediakan akses jarak jauh, dan mengimplementasikan pengontrol cerdas untuk menciptakan ekosistem yang komprehensif.
Layanan dapat diwakili dua cara utama dengan Happy:
- Sebagai layanan simulasi di namespace jaringannya sendiri (Happy node)
- Sebagai layanan cloud nyata di internet
Topologi yang telah ditentukan telah disediakan di ~/happy/topologies
sebagai contoh masing-masing skenario layanan.
Layanan simulasi pada simpul Bahagia
Hapus topologi Happy yang ada:
$ happy-state-delete
Konfirmasi keadaan kosong dengan happy-state
dan weave-state
perintah.
Muat topologi yang telah ditentukan sebelumnya dengan titik akses (AP) dan node layanan:
$ weave-state-load ~/happy/topologies/thread_wifi_ap_service.json
Periksa status Happy dan Weave untuk mengonfirmasi topologi. Dalam topologi ini, onhub
adalah AP, sedangkan cloud
adalah layanan simulasi. Catatan keduanya terhubung ke Internet
jaringan dari jenis 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
Terowongan tenun
Terowongan Weave menghubungkan kain Weave ke layanan. Ini adalah rute aman yang mentransfer pesan IPv6 UDP antara HAN dan layanan. Dalam topologi ini, BorderRouter
node gateway jaringan Weave, yang berfungsi sebagai titik akhir terowongan di HAN.
Buat terowongan Weave:
$ weave-tunnel-start BorderRouter cloud
Periksa kembali status Happy. Anda akan melihat antarmuka terowongan baru dengan alamat Weave IPv6 pada cloud
simpul:
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
Anda sekarang dapat berhasil melakukan ping antara node pada fabric Weave dan awalan global Weave layanan:
$ happy-ping ThreadNode cloud [Ping] ping from ThreadNode to cloud on address fd00:0000:fab1:0005:1ab4:3002:0000:0011 -> 0% packet loss
Layanan cloud nyata di internet
Hapus topologi Happy yang ada:
$ happy-state-delete
Konfirmasi keadaan kosong dengan happy-state
dan weave-state
perintah.
Muat topologi yang telah ditentukan sebelumnya dengan node titik akses (AP):
$ weave-state-load ~/happy/topologies/thread_wifi_ap_internet.json
Dalam topologi ini, onhub
adalah AP. Periksa status Bahagia. Hal ini mirip dengan topologi sebelumnya, tanpa Internet
jaringan dan cloud
simpul:
$ 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
Karena setiap node Happy adalah namespace jaringan, mereka dipartisi dari internet publik secara default. Uji ini dengan memasukkan Happy node dan melakukan ping ke alamat internet publik. Kami akan menggunakan 8.8.8.8
, salah satu alamat IPv4 google.com ini.
$ happy-shell onhub root@onhub:# ping -c2 8.8.8.8 connect: Network is unreachable
Untuk menghubungkan onhub
node ke internet, harus bridge ke antarmuka pada Linux konfigurasi OS-tingkat.
Keluar dari simpul:
root@onhub:# exit
Tentukan antarmuka untuk koneksi internet Anda dengan route
perintah:
$ 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
Temukan default
rute. Ini adalah koneksi internet untuk mesin Linux Anda. The Iface
kolom yang menunjukkan antarmuka yang digunakan untuk konektivitas itu. Dalam contoh di atas, itu em1
.
Gunakan happy-internet
untuk mengatur jembatan, menggunakan antarmuka untuk rute default Anda. Untuk --isp
bendera, menggunakan nama antarmuka tanpa mengikuti nomor. Dalam contoh ini, itu em
. Jika antarmuka default Anda adalah eth1
, yang --isp
bendera akan eth
.
$ happy-internet --node onhub --interface em1 --isp em --seed 249
Tidak akan ada perubahan terlihat di happy-state
output, tetapi onhub
simpul harus memiliki konektivitas internet. Mari kembali ke node dan periksa:
$ 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
Kesuksesan!
DNS
Node bahagia tidak memiliki kemampuan DNS bawaan. Jika Anda mencoba melakukan ping ke google.com, gagal:
root@onhub:# ping -c2 google.com ping: unknown host google.com
Untungnya, Happy menyediakan dukungan untuk DNS. Keluar dari node dan temukan server DNS untuk mesin Linux Anda. Pastikan untuk menggunakan antarmuka default yang sesuai:
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
Gunakan alamat DNS ini dengan happy-dns
:
$ happy-dns 172.16.255.1 172.16.255.153 172.16.255.53
Sekarang coba ping google.com dari dalam onhub
simpul:
$ 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
Keluar onhub
simpul ketika Anda sudah selesai:
root@onhub:# exit
Terowongan tenun
Seperti layanan yang disimulasikan, terowongan Weave harus diatur antara HAN yang disimulasikan di Happy dan layanan. Dengan layanan cloud nyata, gunakan alamat IP atau URL layanan dalam pengaturan terowongan. Sebagai contoh:
$ weave-tunnel-start BorderRouter mycloud.service.com
9. Membersihkan
Sangat penting untuk selalu membersihkan topologi Happy setelah Anda selesai menggunakannya, untuk menghindari masalah dengan konfigurasi jaringan Linux Anda.
Jika Anda mengaktifkan dukungan DNS di topologi Anda, menghapusnya dengan Siarang perintah yang dengan -d
(delete) bendera pertama. Ini harus dijalankan sebelum node Happy dihapus, untuk memastikan konfigurasi jaringan diperbarui dengan benar.
$ happy-dns -d 172.16.255.1 172.16.255.153 172.16.255.53
Selanjutnya, hapus status Happy:
$ happy-state-delete
Terkadang, beberapa file status mungkin tetap ada setelah penghapusan status. Jika Anda mengalami masalah dan Happy tidak bekerja seperti yang diharapkan, menghapus negara dengan happy-state-delete
dan kemudian menggunakan perintah berikut untuk memaksa tersisa membersihkan:
$ ip netns | xargs -I {} sudo ip netns delete {} $ rm -rf ~/.*state.json $ rm -rf ~/.*state.json.lock
Mesin Anda harus kembali ke konfigurasi jaringan normal.
10. Selamat!
Anda sekarang tahu:
- Cara menggunakan Happy untuk mensimulasikan jaringan area rumah IoT Anda sendiri
- Bagaimana menghubungkan topologi Happy ke internet
- Dasar-dasar Weave melalui OpenWeave, versi open-source dari Weave dari Nest
Langkah selanjutnya
Membangun dari Codelab ini, coba latihan berikut:
- Buat topologi yang lebih besar dengan banyak node di setiap Thread dan jaringan Wi-Fi, dan buat konektivitas di antara semua node
- Membuat script bash untuk memuat topologi melalui
happy-state-load
atauweave-state-load
- Jelajahi perintah Selamat lainnya, seperti
happy-traceroute
danhappy-process-*
Bacaan lebih lanjut
Periksa openweave.io untuk berbagai referensi, termasuk: