1 परिचय
मुबारक नकली नेटवर्क स्थलाकृतिक विज्ञान के हल्के आर्केस्ट्रा के लिए घोंसला प्रयोगशालाओं द्वारा बनाई गई एक उपकरण है। IoT होम एरिया नेटवर्क के विकास और परीक्षण के लिए हैप्पी उपयोगी है।
हैप्पी के साथ, आप कर सकते हैं:
- IoT डिवाइस हार्डवेयर का उपयोग किए बिना एकल Linux विकास मशीन पर नेटवर्क प्रोटोकॉल और अन्य वितरित निष्पादन प्रोग्राम का परीक्षण करें
- एक नेटवर्क पर स्वचालित कार्यात्मक परीक्षण करें
- परीक्षण थ्रूपुट में सुधार के लिए एक ही सिस्टम पर कई समवर्ती, समानांतर नेटवर्क चलाएं
इस Codelab में, आप यह जानेंगे खुश है, साथ ही की मूल बातें के साथ कैसे शुरुआत की जाए Weave IOT उपकरणों के लिए। Weave कार्यान्वयन आप इस्तेमाल करेंगे है OpenWeave , एक खुला स्रोत संस्करण नेस्ट द्वारा जारी।
आप क्या सीखेंगे
- हैप्पी और ओपन वीव का निर्माण कैसे करें
- मैन्युअल रूप से एक नकली IoT नेटवर्क कैसे बनाएं
- कस्टम टोपोलॉजी को कैसे प्रबंधित करें
- नकली हैप्पी नेटवर्क को इंटरनेट से कैसे कनेक्ट करें
- बुनाई की मूल बातें
आपको किस चीज़ की ज़रूरत पड़ेगी
- एक Linux मशीन, भौतिक या आभासी
- गिट क्लाइंट या क्लि
- पायथन 2.7
- नेटवर्किंग और रूटिंग अवधारणाओं की एक बुनियादी समझ
2. आरंभ करें
टूलचेन और निर्भरताएँ स्थापित करें
हैप्पी एंड वीव बनाने के लिए, सुनिश्चित करें कि आपके पास एक समर्थित टूलचेन और सभी निर्भरताएँ स्थापित हैं।
$ 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
स्रोत कोड प्राप्त करें
कमांड लाइन से Happy and OpenWeave Git रिपॉजिटरी को क्लोन करें:
$ cd ~ $ git clone https://github.com/openweave/happy.git $ git clone https://github.com/openweave/openweave-core.git
हैप्पी स्थापित करें
हैप्पी रूट डायरेक्टरी से, हैप्पी स्थापित करें:
$ cd ~/happy $ make
हैप्पी इंस्टॉलेशन सत्यापित करें
हैप्पी कमांड अब कमांड लाइन से सुलभ होनी चाहिए:
$ happy-state State Name: happy NETWORKS Name Type State Prefixes NODES Name Interface Type IPs
OpenWeave स्थापित करें
OpenWeave रूट निर्देशिका से, OpenWeave स्थापित करें:
$ cd ~/openweave-core $ make -f Makefile-Standalone
OpenWeave के साथ हैप्पी कॉन्फ़िगर करें
OpenWeave with Happy का उपयोग करने के लिए, आपको हैप्पी को यह बताना होगा कि वीव इंस्टॉलेशन कहां मिलेगा। अद्यतन करने के लिए पथ के साथ खुश विन्यास /src/test-apps
अपने OpenWeave निर्माण के भीतर:
$ happy-configuration weave_path ~/openweave-core/build/x86_64-unknown-linux-gnu/src/test-apps
कॉन्फ़िगरेशन की पुष्टि करें:
$ happy-configuration User Happy Configuration weave_path ~/openweave-core/build/x86_64-unknown-linux-gnu/src/test-apps
OpenWeave स्थापना सत्यापित करें
इस कोडलैब में आवश्यक वेव कमांड कमांड लाइन से एक्सेस किए जा सकते हैं:
$ 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
आप त्रुटि मिलती है weave-fabric-add: command not found
है, अपने को अद्यतन PATH
मुबारक binaries के लिए इस्तेमाल किया पथ के साथ वातावरण चर:
$ export PATH=$PATH:~/openweave-core/src/test-apps/happy/bin
3. आपका पहला टोपोलॉजी
हैप्पी के साथ निम्नलिखित तीन-नोड टोपोलॉजी बनाते हैं।
यह टोपोलॉजी एक साधारण होम एरिया नेटवर्क (एचएएन) का एक उदाहरण है। इस एचएएन में, दो नोड्स एक थ्रेड नेटवर्क में एक साथ जुड़े हुए हैं, और उनमें से एक नोड वाई-फाई के माध्यम से तीसरे से जुड़ता है। पूरे एचएएन के लिए इंटरनेट कनेक्टिविटी प्रदान करने के लिए इस नोड को घर में वायरलेस राउटर से भी जोड़ा जा सकता है। इसके बारे में और बाद में।
सबसे पहले, तीन नोड बनाएं:
$ happy-node-add 01ThreadNode $ happy-node-add 02BorderRouter $ happy-node-add 03WiFiNode
आइए सुनिश्चित करें कि वे मौजूद हैं:
$ happy-node-list 01ThreadNode 02BorderRouter 03WiFiNode
अब कुछ नेटवर्क बनाते हैं:
$ happy-network-add ThreadNetwork thread $ happy-network-add WiFiNetwork wifi
सत्यापित करें कि नेटवर्क मौजूद हैं:
$ happy-network-list ThreadNetwork WiFiNetwork
खुश राज्य की जाँच करें:
$ happy-state State Name: happy NETWORKS Name Type State Prefixes ThreadNetwork thread UP WiFiNetwork wifi UP NODES Name Interface Type IPs 01ThreadNode 02BorderRouter 03WiFiNode
केवल एक नेटवर्क को ऊपर लाने के लिए पर्याप्त नहीं है - हमें नेटवर्क में नोड्स जोड़ना होगा। हमारे टोपोलॉजी आरेख के बाद, प्रत्येक नोड को उपयुक्त नेटवर्क में जोड़ें:
$ happy-node-join 01ThreadNode ThreadNetwork $ happy-node-join 02BorderRouter ThreadNetwork $ happy-node-join 02BorderRouter WiFiNetwork $ happy-node-join 03WiFiNode WiFiNetwork
ध्यान दें कि 02BorderRouter
दोनों को जोड़ा गया है ThreadNetwork
और WiFiNetwork
। ऐसा इसलिए है क्योंकि हमारे एचएएन के भीतर एक सीमा राउटर के रूप में, यह नोड दो अलग-अलग नेटवर्कों को एक साथ जोड़ता है।
हैप्पी स्टेट चेक करें। प्रत्येक नोड के इंटरफेस ऊपर हैं:
$ 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
हमारी टोपोलॉजी अब इस तरह दिखती है:
हमारे हैप्पी नेटवर्क को लाने का अंतिम चरण प्रत्येक नोड पर प्रत्येक इंटरफ़ेस को आईपी पते निर्दिष्ट करना है। एक नेटवर्क के लिए आईपी उपसर्ग निर्दिष्ट करें, और हैप्पी स्वचालित रूप से आपके लिए आईपी पते निर्दिष्ट करता है।
चूंकि थ्रेड प्रोटोकॉल IPv6 का उपयोग करता है, इसलिए थ्रेड नेटवर्क में IPv6 उपसर्ग जोड़ें:
$ happy-network-address ThreadNetwork 2001:db8:1:2::
हैप्पी स्टेट चेक करें। प्रत्येक थ्रेड नोड पर थ्रेड इंटरफ़ेस में 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
वाईफाई नेटवर्क के लिए, IPv4 और IPv6 दोनों उपसर्ग जोड़ें:
$ happy-network-address WiFiNetwork 2001:db8:a:b:: $ happy-network-address WiFiNetwork 10.0.1.0
एक बार फिर हैप्पी स्टेट चेक करें। सभी इंटरफेस ने प्रत्येक वाई-फाई इंटरफेस के लिए दो के साथ आईपी पते निर्दिष्ट किए हैं:
$ 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
यहाँ हमारी अद्यतन टोपोलॉजी है:
4. कनेक्टिविटी का परीक्षण करें
अब जब कि हमारे मुबारक नेटवर्क और चल रही है, चलो से अन्य नोड पिंग द्वारा अपने कनेक्टिविटी का परीक्षण करते हैं 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
कमांड की कोशिश करता लक्ष्य नोड पर हर अंतरफलक के लिए हर आईपी पते पिंग करने। हम IPv4 पतों को अनदेखा कर सकते हैं क्योंकि थ्रेड केवल IPv6 का उपयोग करता है।
ध्यान दें कि केवल एक IPv6 पिंग सफल रहा था: पर एक 02BorderRouter
के wpan0
इंटरफ़ेस है, जो केवल पता है 01ThreadNode
सीधे तक पहुँच सकते हैं:
अन्य IPv6 पतों विफल हो गया क्योंकि अग्रेषण के बीच सक्षम नहीं किया गया wpan0
और wlan0
पर 02BorderRouter
। इस प्रकार, 01ThreadNode
पता नहीं है 03WiFiNode
मौजूद है, या यह कैसे तक पहुँचने के लिए। हैप्पी ने नकली नेटवर्क लाया है, लेकिन नोड्स के बीच सभी रूटिंग और अग्रेषण को सक्षम नहीं किया है।
मार्ग जोड़ें
IPv6 ट्रैफ़िक को HAN में रूट करने के लिए, प्रत्येक नेटवर्क में प्रत्येक नोड के लिए दोनों दिशाओं में उचित मार्ग जोड़ें (ताकि पिंग जानता हो कि स्रोत नोड पर कैसे वापस जाना है)।
प्रत्येक नोड के लिए, आपको यह जानना होगा:
- निकटतम नेटवर्क प्रवेश द्वार-इस मामले में,
02BorderRouter
दोनों के लिए - लक्ष्य नेटवर्क—गेटवे के बाद कहां जाना है
हमारे तीन नोड नेटवर्क के लिए, जो हमें निम्नलिखित देता है:
स्रोत नेटवर्क से | नेटवर्क को लक्षित करने के लिए | गेटवे के माध्यम से |
| | |
| | |
यह व्यक्तिगत के साथ प्रत्येक नोड के लिए किया जा सकता है happy-node-route
है, लेकिन इसके साथ प्रत्येक नेटवर्क में सभी नोड्स के लिए यह करने के लिए आसान है 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
कमांड लाइन झंडे की एक विवरण के लिए, का उपयोग happy-network-route -h
।
happy-network-route
आदेश भी आवश्यकतानुसार प्रत्येक नोड के लिए IPv4 और IPv6 अग्रेषण चालू करता है। यह ट्रैफ़िक को एक नोड के भीतर एक इंटरफ़ेस से दूसरे इंटरफ़ेस तक रूट करने की अनुमति देता है।
अब पिंग पुनः प्रयास करें:
$ 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
दोनों IPv6 पिंग काम करते हैं! पर अग्रेषित करने के साथ, यह जानता है तक पहुँचने के लिए कैसे wlan0
इंटरफ़ेस। IPv4 पिंग अभी भी विफल है, क्योंकि हमने केवल IPv6 मार्गों और अग्रेषण को कॉन्फ़िगर किया है (क्योंकि थ्रेड IPv4 पर नहीं चलता है)।
चूंकि हमने दोनों तरफ नेटवर्क रूट जोड़े हैं, आइए नेटवर्क पर पिंग करें:
$ 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 पिंग अपेक्षा के अनुरूप काम करता है। अब आपके पास पूरी तरह कार्यात्मक, नकली IPv6 HAN है।
सब कुछ एक साथ जोड़ने का एक अधिक सुरक्षित और विश्वसनीय तरीका सक्षम करने के लिए, आइए HAN के ऊपर Weave जोड़ें।
5. बुनाई जोड़ें
वीव एक नेटवर्क एप्लिकेशन परत है जो नेस्ट उत्पादों के लिए सुरक्षित और विश्वसनीय संचार बैकबोन प्रदान करती है। हम Weave के ओपन-सोर्स संस्करण OpenWeave के साथ Weave कार्यक्षमता जोड़ सकते हैं।
बुनाई के कार्यान्वयन को "कपड़ा" कहा जाता है। वीव फैब्रिक एक ऐसा नेटवर्क है जिसमें सभी एचएएन नोड्स, नेस्ट सर्विस और एचएएन में भाग लेने वाले किसी भी मोबाइल डिवाइस शामिल हैं। यह एचएएन के शीर्ष पर बैठता है और विभिन्न अंतर्निहित नेटवर्क लिंक प्रौद्योगिकियों (उदाहरण के लिए, थ्रेड या वाई-फाई) में आसान रूटिंग को सक्षम बनाता है।
अपने हान के लिए Weave कपड़े बनाने का उपयोग कर, fab1
, कपड़ा आईडी के रूप में तो Weave के लिए सभी नोड्स कॉन्फ़िगर करें:
$ weave-fabric-add fab1 $ weave-node-configure
अब जब बुन कॉन्फ़िगर हो गया है, तो हैप्पी स्टेट की जाँच करें:
$ 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
प्रत्येक नोड Weave कपड़े में जोड़ा गया है, और प्रत्येक इंटरफ़ेस एक नया IPv6 पता के साथ शुरू है fd00
। Weave कपड़े पर और अधिक जानकारी प्राप्त करने के लिए, का उपयोग weave-state
आदेश:
$ weave-state State Name: weave NODES Name Weave Node Id Pairing Code 01ThreadNode 69ca9502eb6911e7 8ZJB5Q 02BorderRouter 686af236eb6911e7 B5YV3P 03WiFiNode 69826e60eb6911e7 L3VT3A FABRIC Fabric Id Global Prefix fab1 fd00:0000:fab1::/48
यहाँ हमारी अद्यतन टोपोलॉजी है, जिसमें नीले रंग में बुनें मान हैं:
कपड़ा बुनें
वीव एंड हैप्पी स्टेट्स में बहुत सी नई जानकारी है। से कपड़े के साथ आइए शुरू weave-state
:
FABRIC Fabric Id Global Prefix fab1 fd00:0000:fab1::/48
बुनाई का उपयोग करता है की एक IPv6 उपसर्ग fd00::/48
प्रत्येक नोड के लिए। इस ब्लॉक के पतों को विशिष्ट स्थानीय पता कहा जाता है और इन्हें निजी नेटवर्क जैसे HAN के भीतर उपयोग के लिए निर्दिष्ट किया जाता है। इसे फैब्रिक आईडी के साथ मिलाकर ऊपर दिखाया गया वेव ग्लोबल प्रीफिक्स जेनरेट होता है।
बुनाई नोड्स
वेव फैब्रिक में प्रत्येक नोड को एक पेयरिंग कोड के साथ एक अद्वितीय नोड आईडी दी गई है:
NODES Name Weave Node Id Pairing Code 01ThreadNode 69ca9502eb6911e7 8ZJB5Q 02BorderRouter 686af236eb6911e7 B5YV3P 03WiFiNode 69826e60eb6911e7 L3VT3A
नोड आईडी विश्व स्तर पर वेव फैब्रिक में एक नोड की पहचान करता है। पेयरिंग प्रक्रिया के दौरान पेयरिंग कोड का उपयोग "जॉइनर क्रेडेंशियल" के रूप में किया जाता है, और आमतौर पर इसे उत्पाद के क्यूआर कोड के साथ प्रिंट किया जाएगा।
उदाहरण के लिए, यदि आप नेस्ट प्रोटेक्ट या नेस्ट कैम पर क्यूआर कोड देखते हैं, तो आपको एक 6-वर्ण वाली स्ट्रिंग दिखाई देगी, जिसे अक्सर एंट्री कुंजी कहा जाता है। यह वेव पेयरिंग कोड है।
वेव फैब्रिक में प्रत्येक नोड और इंटरफेस के लिए वीव-विशिष्ट IPv6 पते बनाने के लिए ग्लोबल प्रीफिक्स, फैब्रिक आईडी और नोड आईडी के संयोजन का उपयोग करता है।
बुनाई के पते
नोट चार मुबारक टोपोलॉजी में नया IPv6 पतों देखते हैं कि, सभी के बारे में हमारी Weave वैश्विक उपसर्ग के साथ शुरू 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
प्रत्येक नोड को निर्दिष्ट मानक IPv6 पतों के बजाय, वीव प्रोटोकॉल इन पतों का उपयोग वेव फैब्रिक में संचार करने के लिए करते हैं।
नेटवर्क गेटवे बुनें
थ्रेड नेटवर्क पर वेव नोड्स को यह जानने की जरूरत है कि उस नेटवर्क से कहां से बाहर निकलना है। एक वीव नेटवर्क गेटवे—आमतौर पर थ्रेड बॉर्डर राउटर पर—यह कार्यक्षमता प्रदान करता है।
हमारे नमूना टोपोलॉजी में, हम सीमा राउटर नोड को वीव नेटवर्क गेटवे के रूप में नामित करते हैं:
$ weave-network-gateway ThreadNetwork 02BorderRouter
यह आदेश Weave कपड़े सबनेट करने के लिए सभी थ्रेड नोड से एक मार्ग कहते हैं ( fd:0:fab1::/48
) के माध्यम से BorderRouter
नोड के थ्रेड इंटरफेस ( wpan0
), कि थ्रेड नेटवर्क से परे किसी भी Weave नोड तक पहुँचने के लिए प्रत्येक थ्रेड नोड सक्षम बनाता है। इस के अनुरूप है happy-network-route
आदेश जैसा कि हम पहले थे, लेकिन Weave कपड़े मार्गों के लिए विशिष्ट।
6. टोपोलॉजी रखरखाव
क्या हैप्पी इतना शक्तिशाली बनाता है कि यह एक नकली टोपोलॉजी के सभी सेटअप और टियरडाउन को आसानी से कैसे प्रबंधित करता है।
बाद में उपयोग के लिए अपनी हैप्पी टोपोलॉजी को सेव करें:
$ happy-state -s codelab.json
यह स्थानों अपनी जड़ में पूरी टोपोलॉजी के साथ एक JSON फ़ाइल ~/
फ़ोल्डर। JSON फ़ाइल अपने वर्तमान मुबारक राज्य, में पाया जाता है जो की एक प्रति है ~/.happy_state.json
।
एक बार सहेजे जाने के बाद, वर्तमान टोपोलॉजी हटाएं:
$ happy-state-delete
यह सभी नेटवर्क नामस्थान और संबंधित विन्यास में पाया हटाता ~/.happy-state.json
फ़ाइल। चेक happy-state
और weave-state
एक खाली विन्यास पुष्टि करने के लिए:
$ 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
सहेजे गए कॉन्फ़िगरेशन को पुनः लोड करने के लिए, दो आदेशों में से एक का उपयोग करें:
-
happy-state-load
- Weave प्लगइन का समर्थन नहीं करता -
weave-state-load
- का समर्थन करता है Weave प्लगइन
इसलिए यदि आपके टोपोलॉजी Weave भी शामिल है, हमेशा उपयोग weave-state-load
कमांड ताकि Weave कपड़े और संबद्ध विन्यास लागू किया जाता है।
सहेजे गए हैप्पी टोपोलॉजी को पुनः लोड करें:
$ weave-state-load codelab.json
सफल लोडिंग की पुष्टि करने के लिए सभी राज्यों की जाँच करें:
$ 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
शेल-स्क्रिप्ट और JSON प्रारूप दोनों में, हैप्पी रिपॉजिटरी में कई पूर्व-निर्धारित टोपोलॉजी प्रदान की गई हैं। उन पर खोजें ~/happy/topologies
।
OpenWeave भी परीक्षण उद्देश्यों के लिए चुनिंदा पूर्व-परिभाषित हैप्पी टोपोलॉजी के साथ आता है। उन पर खोजें ~/openweave-core/src/test-apps/happy/topologies/standalone
।
7. यह कैसे काम करता है
हैप्पी जटिल टोपोलॉजी का अनुकरण करने के लिए लिनक्स नेटवर्क नेमस्पेस का उपयोग करता है। आमतौर पर, एक नेटवर्क कॉन्फ़िगरेशन पूरे Linux OS पर लागू होता है। नेटवर्क नेमस्पेस आपको नेटवर्क कॉन्फ़िगरेशन को विभाजित करने की अनुमति देता है ताकि प्रत्येक नेमस्पेस में इंटरफेस और रूटिंग टेबल का अपना सेट हो।
हैप्पी में प्रत्येक नोड और नेटवर्क एक नेटवर्क नेमस्पेस है, जबकि उनके बीच के लिंक नेटवर्क इंटरफेस हैं।
उदाहरण के लिए, हमारी टोपोलॉजी का उपयोग करना:
आइए देखें कि हैप्पी ने इसके लिए कौन से नेमस्पेस बनाए हैं:
$ ip netns list happy004 happy003 happy002 happy001 happy000
यदि आप इसे netns
मुबारक राज्य JSON फ़ाइल की धारा, तुम क्या नोड्स और नेटवर्क प्रत्येक नाम स्थान मेल खाती है के लिए देख सकते हैं:
$ happy-state -j | grep "netns" -A 5 "netns": { "01ThreadNode": "000", "02BorderRouter": "001", "03WiFiNode": "002", "ThreadNetwork": "003", "WiFiNetwork": "004",
रन-टाइम लॉग
नोड्स को जारी किए गए कमांड प्रत्येक नोड के नामस्थान के भीतर से निष्पादित मूल टर्मिनल कमांड हैं। इसे देखने का एक आसान तरीका हैप्पी रन-टाइम लॉग्स को सक्षम करना है।
दूसरी टर्मिनल विंडो खोलें और लॉग ऑन करें, वे इस विंडो पर लगातार चलेंगे:
$ happy-state -l
पहली विंडो पर वापस जाएँ और हैप्पी पिंग चलाएँ:
$ happy-ping 01ThreadNode 02BorderRouter
दूसरी टर्मिनल विंडो में नवीनतम लॉग प्रविष्टियों की जाँच करें। आपको लॉग में इस तरह की एक लाइन देखनी चाहिए:
DEBUG [Driver:CallCmd():416] Happy [happy]: > sudo ip netns exec happy000 ping6 -c 1 2001:0db8:0001:0002:5e53:bbff:fe05:484b
happy-ping
चल मुबारक से आदेश ज्यादा कुछ नहीं है ping6
में आदेश happy000
नाम स्थान ( 01ThreadNode
)।
एक नोड दर्ज करें
का प्रयोग करें happy-shell
गैर मुबारक आदेशों को चलाने के लिए के रूप में यदि नोड्स (नेटवर्क नामस्थान) में से एक में लॉग इन किया:
$ happy-shell 01ThreadNode root@01ThreadNode:#
सिम्युलेटेड डिवाइस प्रत्येक नेमस्पेस के भीतर चलाए जाते हैं, और उनके पास केवल हैप्पी के माध्यम से निर्दिष्ट नेटवर्क कॉन्फ़िगरेशन तक पहुंच होती है।
नोड के लिए इंटरफ़ेस कॉन्फ़िगरेशन की जाँच करें। यह आपके OS-व्यापी कॉन्फ़िगरेशन से भिन्न होगा और हैप्पी स्टेट में सूचीबद्ध चीज़ों को प्रतिबिंबित करना चाहिए:
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)
का प्रयोग करें exit
नोड के नाम स्थान छोड़ने के लिए:
root@01ThreadNode:# exit
8. किसी सेवा से कनेक्ट करें
हैप्पी लिनक्स नेटवर्क नेमस्पेस का उपयोग कैसे करता है, इसकी समझ के साथ, अब आप महसूस कर सकते हैं कि नकली हैप्पी नेटवर्क को इंटरनेट से कनेक्ट करना और नकली नोड्स के भीतर से सार्वजनिक पते तक पहुंचना संभव है। यह आपके सिम्युलेटेड डिवाइस को वास्तविक सेवा (जैसे नेस्ट सर्विस ओवर वीव) से जोड़ने के लिए उपयोगी है।
वीव में सेवा एक क्लाउड-आधारित बुनियादी ढांचा है जो एचएएन नोड्स को डेटा मॉडल में जोड़ता है, रिमोट एक्सेस प्रदान करता है, और एक व्यापक पारिस्थितिकी तंत्र बनाने के लिए बुद्धिमान नियंत्रकों को लागू करता है।
सेवा को हैप्पी के साथ दो प्राथमिक तरीकों से दर्शाया जा सकता है:
- अपने स्वयं के नेटवर्क नेमस्पेस (हैप्पी नोड) में एक नकली सेवा के रूप में
- इंटरनेट पर वास्तविक क्लाउड सेवा के रूप में
पूर्व परिभाषित टोपोलोजी में प्रदान किया गया है ~/happy/topologies
प्रत्येक सेवा परिदृश्य का एक उदाहरण के रूप में।
हैप्पी नोड पर नकली सेवा
किसी भी मौजूदा हैप्पी टोपोलॉजी को हटा दें:
$ happy-state-delete
के साथ एक खाली राज्य की पुष्टि happy-state
और weave-state
आदेशों।
एक्सेस प्वाइंट (एपी) और सर्विस नोड्स के साथ एक पूर्व-निर्धारित टोपोलॉजी लोड करें:
$ weave-state-load ~/happy/topologies/thread_wifi_ap_service.json
टोपोलॉजी की पुष्टि करने के लिए हैप्पी एंड वीव स्टेट्स की जाँच करें। इस टोपोलॉजी में, onhub
एपी, जबकि cloud
नकली सेवा है। नोट दोनों एक से जुड़े हैं Internet
प्रकार के नेटवर्क 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
बुनाई सुरंग
एक वेव टनल वेव फैब्रिक को एक सर्विस से जोड़ती है। यह एक सुरक्षित मार्ग है जो HAN और सेवा के बीच IPv6 UDP संदेशों को स्थानांतरित करता है। इस टोपोलॉजी में, BorderRouter
नोड Weave नेटवर्क प्रवेश द्वार है, जो हान पर सुरंग समाप्ति बिंदु के रूप में कार्य करता है।
बुनाई सुरंग बनाएं:
$ weave-tunnel-start BorderRouter cloud
हैप्पी स्टेट को रीचेक करें। आप पर एक Weave IPv6 पता के साथ एक नई सुरंग इंटरफ़ेस देखना चाहिए cloud
नोड:
NODES Name Interface Type IPs cloud service-tun0 tun fd00:0000:fab1:0005:1ab4:3002:0000:0011/64 eth0 wan 192.168.100.3/24
अब आप वीव फैब्रिक पर नोड्स और सर्विस के वीव ग्लोबल प्रीफिक्स के बीच सफलतापूर्वक पिंग कर सकते हैं:
$ happy-ping ThreadNode cloud [Ping] ping from ThreadNode to cloud on address fd00:0000:fab1:0005:1ab4:3002:0000:0011 -> 0% packet loss
इंटरनेट पर वास्तविक क्लाउड सेवा
किसी भी मौजूदा हैप्पी टोपोलॉजी को हटा दें:
$ happy-state-delete
के साथ एक खाली राज्य की पुष्टि happy-state
और weave-state
आदेशों।
एक्सेस प्वाइंट (एपी) नोड के साथ पूर्व-निर्धारित टोपोलॉजी लोड करें:
$ weave-state-load ~/happy/topologies/thread_wifi_ap_internet.json
इस टोपोलॉजी में, onhub
एपी है। हैप्पी स्टेट चेक करें। यह बिना पिछले टोपोलॉजी के समान है, Internet
नेटवर्क और cloud
नोड:
$ happy-state State Name: happy NETWORKS Name Type State Prefixes HomeThread thread UP 2001:0db8:0111:0001/64 HomeWiFi wifi UP 2001:0db8:0222:0002/64 10.0.1/24 NODES Name Interface Type IPs BorderRouter wpan0 thread 2001:0db8:0111:0001:ca3f:71ff:fe53:1559/64 fd00:0000:fab1:0006:1ab4:3000:0000:0006/64 wlan0 wifi 2001:0db8:0222:0002:32e7:dfff:fee2:107a/64 fd00:0000:fab1:0001:1ab4:3000:0000:0006/64 10.0.1.2/24 ThreadNode wpan0 thread 2001:0db8:0111:0001:c2fb:97ff:fe04:64bd/64 fd00:0000:fab1:0006:1ab4:3000:0000:000a/64 onhub wlan0 wifi 10.0.1.3/24 2001:0db8:0222:0002:3a3c:8dff:fe38:999b/64 $ weave-state State Name: weave NODES Name Weave Node Id Pairing Code BorderRouter 18B4300000000006 AAA123 ThreadNode 18B430000000000A AAA123 FABRIC Fabric Id Global Prefix fab1 fd00:0000:fab1::/48
चूंकि प्रत्येक हैप्पी नोड एक नेटवर्क नेमस्पेस है, वे डिफ़ॉल्ट रूप से सार्वजनिक इंटरनेट से विभाजित होते हैं। हैप्पी नोड दर्ज करके और सार्वजनिक इंटरनेट पते को पिंग करके इसका परीक्षण करें। हम इस्तेमाल करेंगे 8.8.8.8
, google.com के IPv4 पतों में से एक।
$ happy-shell onhub root@onhub:# ping -c2 8.8.8.8 connect: Network is unreachable
कनेक्ट करने के लिए onhub
इंटरनेट नोड, यह लिनक्स ओएस स्तर के विन्यास पर कि इंटरफेस को पाट किया जाना चाहिए।
नोड से बाहर निकलें:
root@onhub:# exit
साथ अपने इंटरनेट कनेक्शन के लिए इंटरफ़ेस निर्धारित route
आदेश:
$ route Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface default 192.168.1.0 0.0.0.0 UG 0 0 0 em1
खोजें default
मार्ग। यह आपके Linux मशीन के लिए इंटरनेट कनेक्शन है। Iface
कॉलम यह दर्शाता है जो इंटरफेस है कि कनेक्टिविटी के लिए इस्तेमाल किया जा रहा है। उपरोक्त उदाहरण में, यह है em1
।
का प्रयोग करें happy-internet
, पुल स्थापित करने के लिए अपने डिफ़ॉल्ट मार्ग के लिए इंटरफ़ेस का उपयोग कर। के लिए --isp
झंडा, संख्या अनुगामी बिना इंटरफ़ेस नाम का उपयोग करें। इस उदाहरण में, यह em
। अपने डिफ़ॉल्ट इंटरफ़ेस है eth1
, --isp
झंडा होगा eth
।
$ happy-internet --node onhub --interface em1 --isp em --seed 249
में नहीं दिखाई परिवर्तन नहीं होगा happy-state
उत्पादन, लेकिन onhub
नोड इंटरनेट कनेक्टिविटी होनी चाहिए। आइए नोड में वापस जाएं और जांचें:
$ 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
सफलता!
डीएनएस
हैप्पी नोड्स में अंतर्निहित DNS क्षमताएं नहीं होती हैं। यदि आप google.com को पिंग करने का प्रयास करते हैं, तो यह विफल हो जाता है:
root@onhub:# ping -c2 google.com ping: unknown host google.com
सौभाग्य से, हैप्पी डीएनएस के लिए समर्थन प्रदान करता है। नोड से बाहर निकलें और अपने Linux मशीन के लिए DNS सर्वर खोजें। उपयुक्त डिफ़ॉल्ट इंटरफ़ेस का उपयोग करना सुनिश्चित करें:
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
के साथ इन DNS पतों का उपयोग करें happy-dns
:
$ happy-dns 172.16.255.1 172.16.255.153 172.16.255.53
अब भीतर से google.com पिंग कोशिश onhub
नोड:
$ happy-shell onhub root@onhub:# ping -c2 google.com PING google.com (64.233.191.113) 56(84) bytes of data. 64 bytes from ja-in-f113.1e100.net (64.233.191.113): icmp_seq=1 ttl=46 time=36.9 ms 64 bytes from ja-in-f113.1e100.net (64.233.191.113): icmp_seq=2 ttl=46 time=37.0 ms --- google.com ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 1001ms rtt min/avg/max/mdev = 36.978/36.995/37.013/0.193 ms
बाहर निकलें onhub
नोड आपका काम पूरा हो:
root@onhub:# exit
बुनाई सुरंग
सिम्युलेटेड सर्विस की तरह, हैप्पी में सिम्युलेटेड HAN और सर्विस के बीच एक वीव टनल स्थापित की जानी चाहिए। वास्तविक क्लाउड सेवा के साथ, सुरंग सेटअप में सेवा के आईपी पते या यूआरएल का उपयोग करें। उदाहरण के लिए:
$ weave-tunnel-start BorderRouter mycloud.service.com
9. सफाई
अपने Linux नेटवर्क कॉन्फ़िगरेशन के साथ समस्याओं से बचने के लिए, जब आप उनके साथ काम कर रहे हों, तो हैप्पी टोपोलॉजी को हमेशा साफ़ करना महत्वपूर्ण है।
आप अपने टोपोलॉजी में डीएनएस समर्थन सक्षम हैं, तो इसके साथ कि आदेश का पुनर्प्रसारण से हटाने -d
(नष्ट) झंडा पहले। यह सुनिश्चित करने के लिए कि नेटवर्क कॉन्फ़िगरेशन ठीक से अपडेट किया गया है, किसी भी हैप्पी नोड्स को हटाने से पहले इसे चलाया जाना चाहिए।
$ happy-dns -d 172.16.255.1 172.16.255.153 172.16.255.53
इसके बाद, हैप्पी स्टेट को डिलीट करें:
$ happy-state-delete
कभी-कभी, कुछ राज्य फ़ाइलें किसी राज्य को हटाने के बाद भी रह सकती हैं। यदि आपको समस्याएं आ और मुबारक के रूप में की उम्मीद नहीं काम कर रहा है, के साथ राज्य को नष्ट happy-state-delete
और उसके बाद निम्न आदेश का उपयोग किसी भी शेष साफ अप के लिए मजबूर करने:
$ ip netns | xargs -I {} sudo ip netns delete {} $ rm -rf ~/.*state.json $ rm -rf ~/.*state.json.lock
आपकी मशीन अपने सामान्य नेटवर्क कॉन्फ़िगरेशन पर वापस आ जानी चाहिए।
10. बधाई!
अब आप जानते हैं:
- अपने स्वयं के IoT होम एरिया नेटवर्क का अनुकरण करने के लिए हैप्पी का उपयोग कैसे करें
- हैप्पी टोपोलॉजीज को इंटरनेट से कैसे कनेक्ट करें
- OpenWeave के माध्यम से Weave की मूल बातें, Nest का Weave . का ओपन-सोर्स संस्करण
अगला कदम
इस कोडलैब का निर्माण, निम्नलिखित अभ्यासों का प्रयास करें:
- प्रत्येक थ्रेड और वाई-फाई नेटवर्क में एकाधिक नोड्स के साथ एक बड़ा टोपोलॉजी बनाएं, और सभी नोड्स के बीच कनेक्टिविटी स्थापित करें
- के माध्यम से टोपोलॉजी लोड करने के लिए एक पार्टी स्क्रिप्ट बनाएं
happy-state-load
याweave-state-load
- जैसे अन्य मुबारक आदेश, अन्वेषण
happy-traceroute
औरhappy-process-*
आगे की पढाई
चेक openweave.io संदर्भ, सहित की एक किस्म के लिए: