Happy and Weave ile Başlarken

Koleksiyonlar ile düzeninizi koruyun İçeriği tercihlerinize göre kaydedin ve kategorilere ayırın.

1. Giriş

Mutlu simüle ağ topolojileri hafif orkestrasyon için Yuvası laboratuarları tarafından oluşturulan bir araçtır. Happy, IoT ev alanı ağlarının geliştirilmesi ve test edilmesi için kullanışlıdır.

Happy ile şunları yapabilirsiniz:

  • IoT cihaz donanımını kullanmadan tek bir Linux geliştirme makinesinde ağ protokollerini ve diğer dağıtılmış yürütme programlarını test edin
  • Bir ağ üzerinde otomatikleştirilmiş işlevsel testler gerçekleştirin
  • Test verimini artırmak için aynı sistemde birden fazla eşzamanlı, paralel ağ çalıştırın

Bu Codelab olarak, Mutlu yanı sıra temelleri ile başlamak öğreneceksiniz Dokuma Iot cihazlar için. Kullanacağınız Dokuma uygulamasıdır OpenWeave , Nest tarafından yayımlanan bir açık kaynak sürümü.

f6996428fb06dede.png

ne öğreneceksin

  • Mutlu ve OpenWeave nasıl oluşturulur
  • Simüle edilmiş bir IoT ağı manuel olarak nasıl oluşturulur
  • Özel topolojiler nasıl yönetilir
  • Simüle edilmiş bir Mutlu ağı internete nasıl bağlanır
  • Dokumanın temelleri

Neye ihtiyacın olacak

  • Bir Linux makinesi, fiziksel veya sanal
  • Git istemcisi veya klibi
  • Python 2.7
  • Ağ oluşturma ve yönlendirme kavramlarına ilişkin temel bir anlayış

2. Başlayın

Araç zincirini ve bağımlılıkları yükleyin

Happy and Weave'i oluşturmak için desteklenen bir araç zincirine ve tüm bağımlılıkların kurulu olduğundan emin olun.

$ 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

Kaynak kodunu alın

Happy ve OpenWeave Git depolarını komut satırından klonlayın:

$ cd ~
$ git clone https://github.com/openweave/happy.git
$ git clone https://github.com/openweave/openweave-core.git

Mutlu Yükle

Happy kök dizininden Happy'i yükleyin:

$ cd ~/happy
$ make

Mutlu kurulumu doğrulayın

Mutlu komutlara artık komut satırından erişilebilir olmalıdır:

$ happy-state
State Name:  happy

NETWORKS   Name         Type   State                                     Prefixes

NODES      Name    Interface    Type                                          IPs

OpenWeave'i kurun

OpenWeave kök dizininden OpenWeave'i kurun:

$ cd ~/openweave-core
$ make -f Makefile-Standalone

Happy'yi OpenWeave ile Yapılandırın

OpenWeave'i Happy ile kullanmak için, Happy'e Weave kurulumunu nerede bulacağını bildirmeniz gerekir. Yolu ile mutlu yapılandırmasını güncelleme /src/test-apps sizin OpenWeave yapı içinde:

$ happy-configuration weave_path ~/openweave-core/build/x86_64-unknown-linux-gnu/src/test-apps

Yapılandırmayı onaylayın:

$ happy-configuration
User Happy Configuration
        weave_path         ~/openweave-core/build/x86_64-unknown-linux-gnu/src/test-apps

OpenWeave kurulumunu doğrulayın

Bu Codelab'de ihtiyaç duyulan örgü komutlarına komut satırından erişilebilir:

$ 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

Hata alırsanız weave-fabric-add: command not found , sizin güncellemek PATH Mutlu çiftler için kullanılan yol ile çevre değişkeni:

$ export PATH=$PATH:~/openweave-core/src/test-apps/happy/bin

3. İlk topolojiniz

Happy ile aşağıdaki üç düğümlü topolojiyi oluşturalım.

a3295ee87fbd9764.png

Bu topoloji, basit bir Ev Alanı Ağı (HAN) örneğidir. Bu HAN'da, bir Thread ağında iki düğüm birbirine bağlanır ve bu düğümlerden biri Wi-Fi aracılığıyla üçüncü bir düğüme bağlanır. Bu düğüm, tüm HAN için internet bağlantısı sağlamak üzere evdeki bir kablosuz yönlendiriciye de bağlanabilir. Bu konuda daha sonra.

İlk önce, üç düğümü oluşturun:

$ happy-node-add 01ThreadNode
$ happy-node-add 02BorderRouter
$ happy-node-add 03WiFiNode

Var olduklarından emin olalım:

$ happy-node-list
01ThreadNode
02BorderRouter
03WiFiNode

Şimdi bazı ağlar oluşturalım:

$ happy-network-add ThreadNetwork thread
$ happy-network-add WiFiNetwork wifi

Ağların var olduğunu doğrulayın:

$ happy-network-list
ThreadNetwork
WiFiNetwork

Mutlu durumunu kontrol edin:

$ happy-state

State Name:  happy

NETWORKS   Name         Type   State                                     Prefixes
  ThreadNetwork       thread      UP
    WiFiNetwork         wifi      UP

NODES      Name    Interface    Type                                          IPs
   01ThreadNode
 02BorderRouter
     03WiFiNode

Sadece bir ağı kurmak yeterli değil - ağlara düğümler eklemeliyiz. Topoloji diyagramımızı izleyerek, her bir düğümü uygun ağ(lar)a ekleyin:

$ happy-node-join 01ThreadNode ThreadNetwork
$ happy-node-join 02BorderRouter ThreadNetwork
$ happy-node-join 02BorderRouter WiFiNetwork
$ happy-node-join 03WiFiNode WiFiNetwork

O Not 02BorderRouter hem eklendi ThreadNetwork ve WiFiNetwork . Bunun nedeni, HAN'ımızdaki bir Sınır Yönlendiricisi olarak bu düğümün iki ayrı ağı birbirine bağlamasıdır.

Mutlu durumunu kontrol edin. Her düğümün arayüzleri hazır:

$ 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

Topolojimiz şimdi şöyle görünüyor:

2d054e6c4e54089c.png

Happy ağımızı oluşturmanın son adımı, her düğümdeki her arayüze IP adresleri atamak. Bir ağ için IP önekini belirleyin ve Happy sizin için otomatik olarak IP adresleri atar.

Thread protokolü IPv6 kullandığından, Thread ağına bir IPv6 öneki ekleyin:

$ happy-network-address ThreadNetwork 2001:db8:1:2::

Mutlu durumunu kontrol edin. Her bir Thread düğümündeki Thread arayüzlerinin IP adresleri vardır:

$ 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

WiFi ağı için hem IPv4 hem de IPv6 öneklerini ekleyin:

$ happy-network-address WiFiNetwork 2001:db8:a:b::
$ happy-network-address WiFiNetwork 10.0.1.0

Mutlu durumunu bir kez daha kontrol edin. Tüm arayüzler, her Wi-Fi arayüzü için iki adet olmak üzere IP adresleri atamıştır:

$ 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

İşte güncellenmiş topolojimiz:

84eecd23871618ca.png

4. Bağlantıyı test edin

Şimdi Mutlu ağ çalışır durumda olduğunu, en diğer düğümlerin ping'leyerek onun bağlantısını test edelim 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

happy-ping komutu çalışır hedef düğümünde her arayüz için her IP adresi ping. IPv4 adreslerini görmezden gelebiliriz çünkü Thread sadece IPv6 kullanır.

Sadece bir IPv6 ping başarılı olduğunu Not: üzerine bir 02BorderRouter 'ın wpan0 tek adresidir arayüzü 01ThreadNode doğrudan ulaşabilirsiniz:

5447bcbdf7d539df.png

İletme arasındaki etkin değil çünkü diğer IPv6 adresleri başarısız wpan0 ve wlan0 üzerinde 02BorderRouter . Böylece, 01ThreadNode hiçbir fikri yok 03WiFiNode var veya nasıl ulaşmak için. Happy, simüle edilmiş ağı ortaya çıkardı, ancak düğümler arasında tüm yönlendirme ve yönlendirmeyi etkinleştirmedi.

Rota ekle

IPv6 trafiğini HAN üzerinden yönlendirmek için, her ağdaki her bir düğüme her iki yönde de uygun yolları ekleyin (böylece ping kaynak düğüme nasıl döneceğini bilir).

Her düğüm için şunları bilmeniz gerekir:

  • En yakın ağ geçidi bu örnekte, 02BorderRouter ikisi için
  • hedef ağ—ağ geçidinden sonra nereye gidileceği

Üç düğümlü ağımız için bu bize şunları verir:

Kaynak Ağdan

Hedef Ağa

Ağ Geçidi aracılığıyla

ThreadNetwork

WiFiNetwork

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

WiFiNetwork

ThreadNetwork

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

Bu her düğüm için ayrı ayrı yapılabilir happy-node-route , ancak her ağdaki tüm düğümler için bunu yapmak daha kolaydır 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

Komut satırı bayrakları açıklaması için, kullanmak happy-network-route -h .

happy-network-route gerektiği gibi komut ayrıca, her bir düğüm için IPv4 ve IPv6 yönlendirme açar. Bu, trafiğin bir düğüm içindeki bir arabirimden diğerine yönlendirilmesine izin verir.

Şimdi ping'i yeniden deneyin:

$ 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

Her iki IPv6 pingi de çalışıyor! Yönlendirme ile, nasıl ulaşılacağını bilen wlan0 arayüz. Yalnızca IPv6 yollarını ve iletmeyi yapılandırdığımız için (ayrıca Thread IPv4 üzerinden çalışmadığından) IPv4 pingi hala başarısız oluyor.

Her iki tarafa da ağ yolları eklediğimize göre, ağlar arasında ping atalım:

$ 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

IPv6 ping'i beklendiği gibi çalışıyor. Artık tam işlevli, simüle edilmiş bir IPv6 HAN'ınız var.

5bb53be0280b3320.png

Her şeyi birbirine bağlamanın daha güvenli ve güvenilir bir yolunu sağlamak için, HAN'ın üstüne Weave'i ekleyelim.

5. Örgü Ekle

Weave, Nest ürünleri için güvenli ve güvenilir iletişim omurgası sağlayan bir ağ uygulama katmanıdır. Weave'in açık kaynak versiyonu olan OpenWeave ile Weave işlevselliği ekleyebiliriz.

Weave uygulamasına "kumaş" denir. Bir Örgü yapısı, tüm HAN düğümlerini, Nest Hizmetini ve HAN'a katılan tüm mobil cihazları içeren bir ağdır. HAN'ın üzerine oturur ve farklı temel ağ bağlantı teknolojileri (örneğin, Thread veya Wi-Fi) arasında daha kolay yönlendirme sağlar.

Kullanarak, HAN için Dokuma kumaş oluşturma fab1 sonra Dokuma için tüm düğümleri yapılandırmak, Kumaş kimliği olarak:

$ weave-fabric-add fab1
$ weave-node-configure

Artık Örgü yapılandırıldığına göre, Mutlu durumunu kontrol edin:

$ 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

Her düğüm Örgü kumaşa ilave edilmiştir, ve her bir arayüz ile başlayan yeni bir IPv6 adresine sahip fd00 . Dokuma kumaş hakkında daha fazla bilgi almak için, kullanmak weave-state komutu:

$ 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

Örgü değerleri mavi ile güncellenmiş topolojimiz:

ce3fa9082408355b.png

dokuma kumaş

Weave ve Happy durumlarında birçok yeni bilgi var. Dan kumaşla başlayalım weave-state :

FABRIC     Fabric Id           Global Prefix
                fab1     fd00:0000:fab1::/48

Örgü kullanımları IPv6 öneki fd00::/48 her bir düğüm için. Bu bloktaki adreslere Benzersiz Yerel Adresler denir ve HAN gibi özel ağlarda kullanılmak üzere belirlenir. Bunu Kumaş Kimliği ile birleştirmek, yukarıda gösterilen Örgü Global Öneki'ni oluşturur.

Örgü düğümleri

Örgü kumaşındaki her düğüme, Eşleştirme Koduyla birlikte benzersiz bir Düğüm Kimliği atanır:

NODES           Name       Weave Node Id    Pairing Code
        01ThreadNode    69ca9502eb6911e7          8ZJB5Q
      02BorderRouter    686af236eb6911e7          B5YV3P
          03WiFiNode    69826e60eb6911e7          L3VT3A

Düğüm Kimliği, Örgü dokusundaki bir düğümü global olarak tanımlar. Eşleştirme Kodu, eşleştirme işlemi sırasında "birleştirici kimlik bilgisi" olarak kullanılır ve genellikle bir ürünün QR kodunun yanında yazdırılır.

Örneğin, bir Nest Protect veya Nest Cam'deki QR koduna bakarsanız, genellikle Giriş Anahtarı olarak adlandırılan 6 karakterlik bir dize görürsünüz. Bu Örgü Eşleştirme Kodudur.

e7c6fa3e24d61d1b.png

Örgü, kumaştaki her düğüm ve arayüz için Örgüye özgü IPv6 adresleri oluşturmak için Global Önek, Yapı Kimliği ve Düğüm Kimliğinin bir kombinasyonunu kullanır.

Adresleri örgü

Mutlu topoloji dört yeni IPv6 adres bulunduğunu Not hepsinden bizim Dokuma Küresel Önekine ile başlayan 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

Örgü protokolleri, her bir düğüme atanan standart IPv6 adresleri yerine bu adresleri Weave dokusunda iletişim kurmak için kullanır.

Örgü ağ geçidi

Bir Thread ağındaki örgü düğümlerinin, bu ağdan nereden çıkacağını bilmesi gerekir. Bir Weave ağ geçidi - tipik olarak bir İplik Kenarlığı Yönlendiricisi üzerinde - bu işlevi sağlar.

Örnek topolojimizde, BorderRouter düğümünü Weave ağ geçidi olarak atayalım:

$ weave-network-gateway ThreadNetwork 02BorderRouter

Bu komut, örgü kumaş alt tüm Konu düğümlerden bir yol ekler ( fd:0:fab1::/48 ) üzerinden BorderRouter düğümün Konu arabirimi ( wpan0 Konu ağı dışında herhangi bir örgü düğümü ulaşmak için her bir iplik düğüm sağlar). Bu benzerdir happy-network-route Dokuma kumaş yollarına daha önce kullanılan komutun, ancak spesifik.

6. Topoloji bakımı

Happy'i bu kadar güçlü yapan şey, simüle edilmiş bir topolojinin tüm kurulum ve sökme işlemlerini nasıl kolayca yönetmesidir.

Happy topolojinizi daha sonra kullanmak üzere kaydedin:

$ happy-state -s codelab.json

Bu yerler Kök tam topoloji ile JSON dosyası ~/ klasörünün. JSON dosyası olarak bulunan mevcut Mutlu devlet, bir kopyasıdır ~/.happy_state.json .

Kaydedildikten sonra mevcut topolojiyi silin:

$ happy-state-delete

Bu, tüm ağ ad boşlukları ve bulunan ilgili yapılandırmaları siler ~/.happy-state.json dosyası. Kontrol happy-state ve weave-state boş yapılandırmayı doğrulamak için:

$ 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

Kaydedilmiş bir konfigürasyonu yeniden yüklemek için iki komuttan birini kullanın:

  • happy-state-load - Dokuma eklentisini desteklemiyor
  • weave-state-load - destekleri Dokuma eklentisi

Senin topoloji Weave içerir Yani eğer hep kullanmak weave-state-load Dokuma kumaş ve ilgili yapılandırma tatbik edilmesi ve böylece komutu.

Kaydedilen Happy topolojisini yeniden yükleyin:

$ weave-state-load codelab.json

Başarılı bir yüklemeyi onaylamak için tüm durumları kontrol edin:

$ 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

Happy deposunda hem kabuk komut dosyası hem de JSON biçiminde bir dizi önceden tanımlanmış topoloji sağlanmıştır. Onları bulun ~/happy/topologies .

OpenWeave ayrıca test amacıyla önceden tanımlanmış belirli Happy topolojileriyle birlikte gelir. Onları bulun ~/openweave-core/src/test-apps/happy/topologies/standalone .

7. Nasıl çalışır?

Happy, karmaşık topolojileri simüle etmek için Linux ağ ad alanlarını kullanır. Tipik olarak, bir ağ yapılandırması tüm Linux işletim sistemi genelinde geçerlidir. Ağ ad alanları, ağ yapılandırmalarını, her bir ad alanının kendi arabirim ve yönlendirme tabloları kümesine sahip olacak şekilde bölümlendirmenize olanak tanır.

Happy'deki her düğüm ve ağ bir ağ ad alanıdır, aralarındaki bağlantılar ise ağ arabirimleridir.

Örneğin, topolojimizi kullanarak:

7d6654c2e4907f2a.png

Happy bunun için hangi ad alanlarını yarattığını görelim:

$ ip netns list
happy004
happy003
happy002
happy001
happy000

Eğer kontrol ederseniz netns Mutlu devlet JSON dosyasına bölümü, ne düğümleri ve ağları her ad karşılık gelir için görebilirsiniz:

$ happy-state -j | grep "netns" -A 5
"netns": {
    "01ThreadNode": "000",
    "02BorderRouter": "001",
    "03WiFiNode": "002",
    "ThreadNetwork": "003",
    "WiFiNetwork": "004",

49cfdce6ff9dd745.png

Çalışma zamanı günlükleri

Düğümlere verilen komutlar, her bir düğümün ad alanından yürütülen temel terminal komutlarıdır. Bunu görmenin kolay bir yolu, Mutlu çalışma zamanı günlüklerini etkinleştirmektir.

İkinci bir terminal penceresi açın ve günlükleri açın, bu pencerede sürekli çalışacaklar:

$ happy-state -l

İlk pencereye geri dönün ve bir Mutlu ping çalıştırın:

$ happy-ping 01ThreadNode 02BorderRouter

İkinci terminal penceresindeki en son günlük girişlerini kontrol edin. Günlüklerde şöyle bir satır görmelisiniz:

DEBUG [Driver:CallCmd():416] Happy [happy]: > sudo ip netns exec happy000 ping6 -c 1 2001:0db8:0001:0002:5e53:bbff:fe05:484b

happy-ping Mutlu çalışan daha komutu bir şey değildir ping6 komutunu happy000 ad ( 01ThreadNode ).

Bir düğüm girin

Kullanım happy-shell düğümler (ağ ad) birine açmış sanki olmayan Mutlu komutları çalıştırmak için:

$ happy-shell 01ThreadNode
root@01ThreadNode:#

Simüle edilmiş cihazlar her ad alanında çalıştırılır ve yalnızca Happy aracılığıyla belirtilen ağ yapılandırmasına erişimleri vardır.

Düğüm için arayüz yapılandırmasını kontrol edin. Bu, işletim sistemi genelindeki yapılandırmanızdan farklı olacak ve Mutlu durumunda listelenenleri yansıtmalıdır:

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)

Kullanım exit düğümün ad bırakmak:

root@01ThreadNode:# exit

8. Bir hizmete bağlanın

Happy'nin Linux ağ ad alanlarını nasıl kullandığını anlayarak, simüle edilmiş bir Happy ağını internete bağlamanın ve simüle edilmiş düğümlerden genel adreslere erişmenin artık mümkün olduğunu fark edebilirsiniz. Bu, simüle edilmiş cihazlarınızı gerçek bir hizmete (Örgü Üzerinden Yuva Hizmeti gibi) bağlamak için kullanışlıdır.

Weave'deki hizmet, HAN düğümlerini bir veri modeline bağlayan, uzaktan erişim sağlayan ve kapsamlı bir ekosistem oluşturmak için akıllı kontrolörler uygulayan bulut tabanlı bir altyapıdır.

Hizmet, Happy ile iki temel yolla temsil edilebilir:

  • Kendi ağ ad alanında benzetilmiş bir hizmet olarak (Happy node)
  • İnternette gerçek bir bulut hizmeti olarak

Önceden tanımlanmış topolojileri içinde verilmiştir ~/happy/topologies her hizmet senaryo örneği olarak.

Mutlu bir düğümde benzetilmiş hizmet

Mevcut Happy topolojilerini kaldırın:

$ happy-state-delete

Boş bir devlet onayla happy-state ve weave-state komutları.

Erişim noktası (AP) ve hizmet düğümleri ile önceden tanımlanmış bir topoloji yükleyin:

$ weave-state-load ~/happy/topologies/thread_wifi_ap_service.json

6d04cbfcc84038e2.png

Topolojiyi doğrulamak için Mutlu ve Örgü durumlarını kontrol edin. Bu topolojide, onhub ederken, AP ise cloud simüle hizmettir. İkisi de bir bağlı Not Internet tipi ağı 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

örgü tüneli

Bir Örgü tüneli, Örgü kumaşını bir hizmete bağlar. Bu, IPv6 UDP mesajlarını HAN ve hizmet arasında aktaran güvenli bir yoldur. Bu topoloji olarak, BorderRouter düğüm Örgü ağ geçidi, HAN tünel son nokta olarak işlev görmüştür.

Örgü tünelini oluşturun:

$ weave-tunnel-start BorderRouter cloud

Mutlu durumunu tekrar kontrol edin. Sen bir örgü IPv6 adresine sahip yeni tünel arayüzünü görmelisiniz cloud düğümü:

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

Artık Weave dokusundaki düğümler ve hizmetin Weave global öneki arasında başarılı bir şekilde ping atabilirsiniz:

$ happy-ping ThreadNode cloud
[Ping] ping from ThreadNode to cloud on address
    fd00:0000:fab1:0005:1ab4:3002:0000:0011 -> 0% packet loss

İnternette gerçek bulut hizmeti

Mevcut Happy topolojilerini kaldırın:

$ happy-state-delete

Boş bir devlet onayla happy-state ve weave-state komutları.

Erişim noktası (AP) düğümü ile önceden tanımlanmış bir topoloji yükleyin:

$ weave-state-load ~/happy/topologies/thread_wifi_ap_internet.json

c75127417ef3833a.png

Bu topolojide, onhub AP olduğunu. Mutlu durumunu kontrol edin. Bu olmadan, önceki topoloji benzeyen Internet ağı ve cloud düğümü:

$ 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

Her Happy düğümü bir ağ ad alanı olduğundan, varsayılan olarak genel internetten ayrılırlar. Bunu bir Mutlu düğüm girerek ve genel bir internet adresine ping atarak test edin. Biz kullanacağız 8.8.8.8 , google.com IPv4 adreslerinin biri.

$ happy-shell onhub
root@onhub:# ping -c2 8.8.8.8
connect: Network is unreachable

Bağlamak için onhub internete düğümü, Linux işletim sistemi düzeyinde yapılandırmasına o arabirime köprülenmelidir.

Düğümden çıkın:

root@onhub:# exit

İle internet bağlantısı için arayüz belirleyin route komutu:

$ 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

Bul default rota. Bu, Linux makinenizin internet bağlantısıdır. Iface sütun bu bağlantı için kullanılmakta olduğu arabirim gösterir. Yukarıdaki örnekte, bu kadar em1 .

Kullanım happy-internet varsayılan yol için arayüzü kullanarak, köprü kurmak. İçin --isp bayrağı, sayılar sondaki olmadan arayüz adı kullanın. Bu örnekte, bu kadar em . Varsayılan arayüzü ise eth1 , --isp bayrağı olacaktır eth .

$ happy-internet --node onhub --interface em1 --isp em --seed 249

Orada görünür hiçbir değişiklik olacak happy-state çıkışı ancak onhub düğüm İnternet bağlantısı olmalıdır. Düğüme geri dönelim ve kontrol edelim:

$ 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

Başarı!

c4d411ab1734131.png

DNS

Mutlu düğümlerin yerleşik DNS yetenekleri yoktur. google.com'a ping atmaya çalışırsanız, başarısız olur:

root@onhub:# ping -c2 google.com
ping: unknown host google.com

Neyse ki Happy, DNS için destek sağlıyor. Düğümden çıkın ve Linux makineniz için DNS sunucularını bulun. Uygun varsayılan arayüzü kullandığınızdan emin olun:

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

Bu DNS adreslerini kullan happy-dns :

$ happy-dns 172.16.255.1 172.16.255.153 172.16.255.53

Şimdi içinden google.com ping deneyin onhub düğümü:

$ 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

Çık onhub İşiniz bittiğinde düğüm:

root@onhub:# exit

örgü tüneli

Simüle edilmiş servis gibi, Happy'deki simüle edilmiş HAN ile servis arasında bir Örgü tüneli kurulmalıdır. Gerçek bir bulut hizmetiyle, tünel kurulumunda hizmetin IP adresini veya URL'sini kullanın. Örneğin:

$ weave-tunnel-start BorderRouter mycloud.service.com

3ed2c3c0df67f4d2.png

9. Temizleme

Linux ağ yapılandırmanızla ilgili sorunları önlemek için, işiniz bittiğinde Happy topolojilerini her zaman temizlemeniz önemlidir.

Eğer topolojinizde DNS desteği etkinse, o komutu çalıştırarak kaldırmak -d ilk (silme) bayrağı. Bu, ağ yapılandırmasının düzgün bir şekilde güncellendiğinden emin olmak için herhangi bir Happy düğümü kaldırılmadan önce çalıştırılmalıdır.

$ happy-dns -d 172.16.255.1 172.16.255.153 172.16.255.53

Ardından, Mutlu durumunu silin:

$ happy-state-delete

Bazen, bir durum silindikten sonra bazı durum dosyaları kalabilir. Herhangi bir sorunla ve mutlu olarak beklenen çalışan değilse, devleti silmek happy-state-delete kalan temiz up zorlamak için aşağıdaki komutları kullanın ve sonra:

$ ip netns | xargs -I {} sudo ip netns delete {}
$ rm -rf ~/.*state.json
$ rm -rf ~/.*state.json.lock

Makineniz normal ağ yapılandırmasına geri dönmelidir.

10. Tebrikler!

Artık biliyorsunuz:

  • Kendi IoT ev alanı ağlarınızı simüle etmek için Happy nasıl kullanılır?
  • Happy topolojileri internete nasıl bağlanır
  • Nest'in açık kaynaklı Weave sürümü olan OpenWeave aracılığıyla Weave'in temelleri

Sonraki adımlar

Bu Codelab'den yola çıkarak aşağıdaki alıştırmaları deneyin:

  • Her Thread ve Wi-Fi ağında birden çok düğüm içeren daha büyük bir topoloji oluşturun ve tüm düğümler arasında bağlantı kurun
  • Aracılığıyla topoloji yüklemek için bir bash komut dosyası oluşturun happy-state-load veya weave-state-load
  • Gibi diğer Mutlu komutları, Keşfet happy-traceroute ve happy-process-*

daha fazla okuma

Kontrol openweave.io referanslar dahil çeşitli:

f6996428fb06dede.png