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ü.
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.
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:
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:
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:
İ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 |
| | |
| | |
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.
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:
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.
Ö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:
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",
Ç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
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
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
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ı!
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
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
veyaweave-state-load
- Gibi diğer Mutlu komutları, Keşfet
happy-traceroute
vehappy-process-*
daha fazla okuma
Kontrol openweave.io referanslar dahil çeşitli: