Memulai dengan Happy and Weave

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.

f6996428fb06dede.png

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.

a3295ee87fbd9764.png

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:

2d054e6c4e54089c.png

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:

84eecd23871618ca.png

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:

5447bcbdf7d539df.png

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

ThreadNetwork

WiFiNetwork

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

WiFiNetwork

ThreadNetwork

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

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.

5bb53be0280b3320.png

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:

ce3fa9082408355b.png

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.

e7c6fa3e24d61d1b.png

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:

7d6654c2e4907f2a.png

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

49cfdce6ff9dd745.png

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

6d04cbfcc84038e2.png

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

c5ffca09d7cd3208.png

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

c75127417ef3833a.png

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!

c4d411ab1734131.png

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

3ed2c3c0df67f4d2.png

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

Bacaan lebih lanjut

Periksa openweave.io untuk berbagai referensi, termasuk:

f6996428fb06dede.png