Happy adalah fitur yang dibuat oleh lab Nest untuk orkestrasi ringan dari topologi jaringan tersimulasi. Happy berguna untuk pengembangan dan pengujian jaringan area rumah IoT.
Dengan Happy, 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 dan bersamaan di sistem yang sama untuk meningkatkan throughput pengujian
Di Codelab ini, Anda akan mempelajari cara memulai Happy, serta dasar-dasar Weave untuk perangkat IoT. Implementasi Weave yang akan Anda gunakan adalah OpenWeave , versi sumber terbuka yang dirilis oleh Nest.
Apa yang akan Anda pelajari
- Bagaimana membangun Happy dan OpenWeave
- Cara membuat jaringan IoT simulasi secara manual
- Bagaimana mengelola topologi kustom
- Cara menghubungkan jaringan Happy yang disimulasikan ke internet
- Dasar-dasar Weave
Yang Anda butuhkan
- Mesin Linux, fisik atau virtual
- Git client atau cli
- Python 2.7
- Pemahaman dasar tentang konsep jaringan dan perutean
Instal toolchain dan dependensi
Untuk membuat Happy dan Weave, pastikan Anda memiliki toolchain 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
Clone 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.dll
Instal Happy
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 Happy dengan OpenWeave
Untuk menggunakan OpenWeave dengan Happy, Anda perlu memberi tahu Happy di mana menemukan instalasi Weave. Perbarui konfigurasi Happy dengan jalur ke /src/test-apps
dalam build OpenWeave Anda:
$ happy-configuration weave_path ~/openweave-core/build/x86_64-unknown-linux-gnu/src/test-apps
Konfirmasikan konfigurasi:
$ happy-configuration User Happy Configuration weave_path ~/openweave-core/build/x86_64-unknown-linux-gnu/src/test-apps.dll
Verifikasi instalasi OpenWeave
Perintah weave yang diperlukan di 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
, perbarui variabel lingkungan PATH
Anda dengan jalur yang digunakan untuk Happy binaries:
$ export PATH=$PATH:~/openweave-core/src/test-apps/happy/bin
Mari buat topologi tiga node berikut dengan Happy.
Topologi ini merupakan contoh dari Home Area Network (HAN) sederhana. Dalam HAN ini, dua node dihubungkan bersama dalam jaringan Thread, dan salah satu 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 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
telah ditambahkan ke ThreadNetwork
dan WiFiNetwork
. Itu karena sebagai Border Router dalam HAN kami, node ini menghubungkan dua jaringan individu secara bersamaan.
Periksa status Bahagia. Setiap antarmuka node sudah aktif:
$ 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 kita sekarang terlihat seperti ini:
Langkah terakhir dalam membuka jaringan Happy kami adalah menetapkan alamat IP ke setiap antarmuka di setiap node. Tentukan prefiks IP untuk jaringan, dan Happy secara otomatis memberikan alamat IP untuk Anda.
Karena protokol Thread menggunakan IPv6, tambahkan prefiks 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 prefiks IPv4 dan IPv6:
$ happy-network-address WiFiNetwork 2001:db8:a:b:: $ happy-network-address WiFiNetwork 10.0.1.0
Periksa status Bahagia 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 topologi terbaru kami:
Sekarang jaringan Happy kita sudah aktif dan berjalan, mari kita uji konektivitasnya dengan melakukan ping ke 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
Perintah happy-ping
mencoba melakukan ping ke 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 penerusan belum diaktifkan antara wpan0
dan wlan0
di 02BorderRouter
. Jadi, 01ThreadNode
tidak tahu 03WiFiNode
ada, atau bagaimana menjangkaunya. Happy telah memunculkan jaringan yang disimulasikan, 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 node, Anda perlu mengetahui:
- gateway jaringan terdekat — dalam hal ini,
02BorderRouter
untuk keduanya - jaringan target — ke mana harus pergi setelah gateway
Untuk jaringan tiga node kami, itu memberi kami yang berikut:
dari Jaringan Sumber | ke Jaringan Target | melalui Gateway |
| | |
| | |
Ini dapat dilakukan secara individual untuk setiap node dengan happy-node-route
, tetapi lebih mudah melakukannya untuk semua node di 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 tanda baris perintah, gunakan happy-network-route -h
.
Perintah happy-network-route
juga mengaktifkan penerusan IPv4 dan IPv6 untuk setiap node, sesuai kebutuhan. Ini memungkinkan lalu lintas untuk merutekan dari satu antarmuka ke antarmuka lainnya dalam sebuah node.
Sekarang coba ping lagi:
$ 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 penerusan aktif, ia tahu cara menjangkau antarmuka wlan0
. Ping IPv4 masih gagal, karena kami hanya mengkonfigurasi rute dan penerusan IPv6 (juga karena Thread tidak berjalan melalui IPv4).
Karena kami menambahkan rute jaringan ke kedua sisi, mari melakukan ping ke 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 bersama-sama, mari tambahkan Weave di atas HAN.
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 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 di berbagai teknologi tautan jaringan yang mendasarinya (misalnya, Thread atau Wi-Fi).
Buat kain Weave untuk HAN Anda, menggunakan fab1
sebagai ID Fabric, lalu konfigurasikan 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 fabric Weave, dan setiap antarmuka memiliki alamat IPv6 baru yang dimulai dengan fd00
. Untuk mendapatkan informasi lebih lanjut tentang kain Weave, gunakan perintah weave-state
:
$ 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 terbaru kami, dengan nilai Weave berwarna biru:
Kain tenun
Ada banyak informasi baru di negara bagian Weave dan Happy. Mari kita mulai dengan kain dari kondisi weave-state
:
FABRIC Fabric Id Global Prefix fab1 fd00:0000:fab1::/48
Weave menggunakan prefiks 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 node
Setiap node di 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 node di kain Weave. Kode Penyandingan digunakan sebagai "kredensial penggabung" selama proses penyandingan, 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 Entri. Ini adalah Kode Penyandingan Weave.
Weave menggunakan kombinasi Global Prefix, ID Fabric, dan ID Node untuk membuat alamat IPv6 khusus Weave untuk setiap node dan antarmuka di fabric.
Menenun alamat
Perhatikan bahwa ada empat alamat IPv6 baru di topologi Happy, semuanya dimulai dengan Awalan Global Weave 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 kain Weave, bukan alamat IPv6 standar yang ditetapkan ke setiap node.
Weave gateway jaringan
Menenun node pada jaringan Thread perlu mengetahui ke mana harus keluar dari jaringan itu. Gateway jaringan Weave — biasanya pada Thread Border Router — menyediakan fungsionalitas ini.
Dalam contoh topologi kita, mari 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 analog dengan perintah happy-network-route
kita gunakan sebelumnya, tetapi khusus untuk rute kain Weave.
Apa yang membuat Happy begitu hebat adalah cara mudahnya mengelola semua pengaturan dan pembongkaran topologi simulasi.
Simpan topologi Happy Anda untuk digunakan nanti:
$ happy-state -s codelab.json
Ini menempatkan file JSON dengan topologi lengkap di folder root ~/
. File JSON adalah salinan dari status Happy Anda saat ini, yang ditemukan di ~/.happy_state.json
.
Setelah disimpan, hapus topologi saat ini:
$ happy-state-delete
Ini menghapus semua ruang nama jaringan dan konfigurasi terkait yang ditemukan di file ~/.happy-state.json
. Periksa happy-state
dan weave-state
untuk mengonfirmasi 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 plugin Weave
Jadi jika topologi Anda menyertakan Weave, selalu gunakan perintah weave-state-load
agar Weave fabric dan konfigurasi terkait diterapkan.
Muat ulang topologi Happy yang disimpan:
$ weave-state-load codelab.json
Periksa semua negara bagian 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, baik dalam format shell-script dan JSON. Temukan mereka di ~/happy/topologies
.
OpenWeave juga dilengkapi dengan topologi Happy yang telah ditentukan sebelumnya untuk tujuan pengujian. Temukan di ~/openweave-core/src/test-apps/happy/topologies/standalone
.
Happy menggunakan namespace jaringan Linux untuk mensimulasikan topologi kompleks. Biasanya, konfigurasi jaringan berlaku di seluruh OS Linux. Namespace jaringan memungkinkan Anda mempartisi konfigurasi jaringan sehingga setiap namespace memiliki seperangkat antarmuka dan tabel peruteannya sendiri.
Setiap node dan jaringan di Happy adalah namespace jaringan, sedangkan tautan di antara mereka adalah antarmuka jaringan.
Misalnya, menggunakan topologi kami:
Mari kita lihat namespace apa yang Happy buat untuk ini:
$ ip netns list happy004 happy003 happy002 happy001 happy000
Jika Anda memeriksa bagian netns
dari file JSON status Happy, Anda dapat melihat node dan jaringan mana yang sesuai dengan setiap namespace:
$ happy-state -j | grep "netns" -A 5 "netns": { "01ThreadNode": "000", "02BorderRouter": "001", "03WiFiNode": "002", "ThreadNetwork": "003", "WiFiNetwork": "004",
Log run-time
Perintah yang diberikan ke node adalah perintah terminal dasar yang dijalankan dari dalam namespace setiap node. Cara mudah untuk melihatnya adalah dengan mengaktifkan log waktu proses Happy.
Buka jendela terminal kedua dan nyalakan log, mereka akan terus berjalan di jendela ini:
$ happy-state -l
Kembali ke jendela pertama dan jalankan Happy ping:
$ 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 node
Gunakan happy-shell
untuk menjalankan perintah non-Happy seolah-olah masuk 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 tersebut. Ini akan berbeda dari konfigurasi seluruh OS Anda dan harus mencerminkan apa yang tercantum di 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 keluar dari namespace node:
root@01ThreadNode:# exit
Dengan pemahaman tentang bagaimana Happy menggunakan namespace jaringan Linux, Anda sekarang mungkin menyadari bahwa adalah mungkin 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 model data, menyediakan akses jarak jauh, dan menerapkan pengontrol cerdas untuk menciptakan ekosistem yang komprehensif.
Layanan ini dapat direpresentasikan dalam dua cara utama dengan Happy:
- Sebagai layanan simulasi dalam namespace jaringannya sendiri (node Happy)
- Sebagai layanan cloud nyata di internet
Topologi yang telah ditentukan sebelumnya telah disediakan di ~/happy/topologies
sebagai contoh dari setiap skenario layanan.
Layanan simulasi pada node Happy
Hapus topologi Happy yang ada:
$ happy-state-delete
Konfirmasikan status kosong dengan perintah happy-state
dan weave-state
.
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. Perhatikan bahwa keduanya terhubung ke jaringan Internet
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 sebuah layanan. Ini adalah rute aman yang mentransfer pesan IPv6 UDP antara HAN dan layanan. Dalam topologi ini, node BorderRouter
adalah gateway jaringan Weave, yang berfungsi sebagai titik akhir terowongan di HAN.
Buat terowongan Weave:
$ weave-tunnel-start BorderRouter cloud
Periksa kembali status Bahagia. Anda akan melihat antarmuka terowongan baru dengan alamat IPv6 Weave di simpul cloud
:
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 di Weave fabric 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
Konfirmasikan status kosong dengan perintah happy-state
dan weave-state
.
Muat topologi yang telah ditentukan dengan node titik akses (AP):
$ weave-state-load ~/happy/topologies/thread_wifi_ap_internet.json
Dalam topologi ini, onhub
adalah AP. Periksa status Bahagia. Ini mirip dengan topologi sebelumnya, tanpa jaringan Internet
dan node cloud
:
$ 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 node Happy dan melakukan ping ke alamat internet publik. Kami akan menggunakan 8.8.8.8
, salah satu alamat IPv4 google.com.
$ happy-shell onhub root@onhub:# ping -c2 8.8.8.8 connect: Network is unreachable
Untuk menghubungkan node onhub
ke internet, node tersebut harus dihubungkan ke antarmuka tersebut pada konfigurasi level OS Linux.
Keluar dari node:
root@onhub:# exit
Tentukan antarmuka untuk koneksi internet Anda dengan perintah route
:
$ 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 rute default
. Ini adalah koneksi internet untuk mesin Linux Anda. Kolom Iface
menunjukkan antarmuka mana yang digunakan untuk konektivitas itu. Pada contoh di atas, ini adalah em1
.
Gunakan happy-internet
untuk mengatur jembatan, menggunakan antarmuka untuk rute default Anda. Untuk bendera --isp
, gunakan nama antarmuka tanpa nomor belakang. Dalam contoh ini, itu em
. Jika antarmuka default Anda adalah eth1
, flag --isp
akan menjadi eth
.
$ happy-internet --node onhub --interface em1 --isp em --seed 249
Tidak akan ada perubahan yang terlihat pada keluaran happy-state
, tetapi node onhub
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
Keberhasilan!
DNS
Node yang 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 memberikan 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 node onhub
:
$ 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 dari node onhub
setelah Anda selesai:
root@onhub:# exit
Terowongan tenun
Seperti layanan simulasi, terowongan Weave harus disiapkan antara HAN simulasi di Happy dan layanan. Dengan layanan cloud nyata, gunakan alamat IP atau URL layanan di pengaturan tunnel. Sebagai contoh:
$ weave-tunnel-start BorderRouter mycloud.service.com
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, hapus dengan menjalankan kembali perintah itu dengan flag -d
(delete) terlebih dahulu . 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 Bahagia:
$ happy-state-delete
Kadang-kadang, beberapa file status mungkin tetap ada setelah penghapusan status. Jika Anda mengalami masalah dan Happy tidak berfungsi seperti yang diharapkan, hapus status dengan happy-state-delete
, lalu gunakan perintah berikut untuk memaksa pembersihan yang tersisa:
$ ip netns | xargs -I {} sudo ip netns delete {} $ rm -rf ~/.*state.json $ rm -rf ~/.*state.json.lock
Mesin Anda harus kembali ke konfigurasi jaringan normalnya.
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, Weave versi open source dari Nest
Langkah selanjutnya
Berdasarkan Codelab ini, cobalah latihan berikut:
- Buat topologi yang lebih besar dengan banyak node di setiap Thread dan jaringan Wi-Fi, dan buat konektivitas antara semua node
- Buat skrip bash untuk memuat topologi melalui
happy-state-load
atauweave-state-load
- Jelajahi perintah Happy lainnya, seperti
happy-traceroute
danhappy-process-*
Bacaan lebih lanjut
Lihat openweave.io untuk berbagai referensi, termasuk: