Google berkomitmen untuk mendorong terwujudnya keadilan ras bagi komunitas Kulit Hitam. Lihat caranya.
Halaman ini diterjemahkan oleh Cloud Translation API.
Switch to English

Memulai dengan Happy and Weave

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.

f6996428fb06dede.png

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.

a3295ee87fbd9764.png

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:

2d054e6c4e54089c.png

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:

84eecd23871618ca.png

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:

5447bcbdf7d539df.png

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

ThreadNetwork

WiFiNetwork

02BorderRouter wlan0 2001:db8:1:2::/64 prefix

WiFiNetwork

ThreadNetwork

02BorderRouter wpan0 2001:db8:a:b::/64 prefix

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.

5bb53be0280b3320.png

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:

ce3fa9082408355b.png

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.

e7c6fa3e24d61d1b.png

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:

7d6654c2e4907f2a.png

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",

49cfdce6ff9dd745.png

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

6d04cbfcc84038e2.png

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

c5ffca09d7cd3208.png

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

c75127417ef3833a.png

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!

c4d411ab1734131.png

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

3ed2c3c0df67f4d2.png

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 atau weave-state-load
  • Jelajahi perintah Happy lainnya, seperti happy-traceroute dan happy-process-*

Bacaan lebih lanjut

Lihat openweave.io untuk berbagai referensi, termasuk:

f6996428fb06dede.png