1. परिचय
Thread क्या है?
Thread, आईपी पर आधारित कम क्षमता वाला वायरलेस मेश नेटवर्किंग प्रोटोकॉल है. यह एक डिवाइस से दूसरे डिवाइस और डिवाइस से क्लाउड पर बातचीत करने की सुविधा देता है. सिंगल-पॉइंट फ़ेल होने से बचने के लिए, थ्रेड नेटवर्क टोपोलॉजी में होने वाले बदलावों के मुताबिक काम कर सकते हैं.
OpenThread क्या है?
Google की ओर से रिलीज़ किया गया OpenThread, Thread® का ओपन सोर्स लागू करता है.
OpenThread Border राऊटर क्या है?
Google की ओर से रिलीज़ किया गया OpenThread Border Router (OTBR), Thread Border राऊटर के लिए ओपन सोर्स को लागू किया गया था.
NAT64
NAT64 एक ऐसी सुविधा है जो सिर्फ़ IPv6 नेटवर्क में होस्ट को, आईपीवी4 नेटवर्क में संसाधनों को ऐक्सेस करने की सुविधा देती है. NAT64 गेटवे, IPv4 प्रोटोकॉल और IPv6 प्रोटोकॉल के बीच अनुवादक है.
OpenThread Border राऊटर के हिस्से के तौर पर, NAT64 का अनुवाद करने वाला टूल, टीसीपी, यूडीपी, और आईसीएमपी (आईएमपीएमपीवी6) प्रोटोकॉल का अनुवाद करने में मदद करता है.
आपको क्या बनाना होगा
इस कोडलैब में, OpenThread Border राऊटर और Thread डिवाइस को सेट अप किया जाएगा. इसके बाद, OpenThread Border राऊटर की मदद से, इंटरनेट पर Thread डिवाइसों और आईपीवी4 होस्ट के बीच कम्यूनिकेशन को चालू और इसकी पुष्टि की जाएगी.
आप इन चीज़ों के बारे में जानेंगे
- NAT64 सुविधाओं वाला OpenThread बॉर्डर राऊटर बनाने का तरीका.
- Thread के एंड डिवाइसों पर मौजूद आईपीवी4 होस्ट से संपर्क करने का तरीका.
आपको इनकी ज़रूरत होगी
- Thread NCP, OpenThread CLI बनाने और उन्हें फ़्लैश करने, और IPv4 कनेक्टिविटी की जांच करने के लिए Linux वर्कस्टेशन.
- Thread बॉर्डर राऊटर के लिए 4 जीबी रैम वाला Raspberry Pi 4. आपका Linux वर्कस्टेशन इस डिवाइस से आईपीवी4 पर ऐक्सेस किया जा सकता हो.
- दो नॉर्डिक सेमीकंडक्टर nRF52840 DK बोर्ड.
इस कोडलैब के लिए नेटवर्क टोपोलॉजी:
2. OpenThread बॉर्डर राऊटर को सेटअप करें
OpenThread बॉर्डर राऊटर बनाने के लिए, नीचे दिए गए बदलावों के साथ Thread Border राऊटर के OTBR को सेटअप करें - बायडायरेक्शनल आईपीवी6 कनेक्टिविटी और डीएनएस-आधारित सेवा डिस्कवरी कोडलैब का पालन करें:
OTBR बनाएं और इंस्टॉल करें में, आपको OpenThread में NAT64 अनुवादक को चालू करने के लिए स्क्रिप्ट को बताना होगा. इसके लिए, एनवायरमेंट वैरिएबल NAT64
को 1
और NAT64_SERVICE
को openthread
पर सेट करना होगा. इस चरण से पहले, यहां दिया गया कमांड चलाएं:
$ export NAT64=1 NAT64_SERVICE=openthread
Thread Border राऊटर - दो-तरफ़ा IPv6 कनेक्टिविटी और डीएनएस-आधारित सेवा डिस्कवरी कोडलैब का इस्तेमाल जारी रखें. Thread नेटवर्क बनाने के बाद, यह पुष्टि करें कि बॉर्डर राऊटर, OpenThread CLI निर्देशों की मदद से, NAT64 प्रीफ़िक्स पब्लिश कर रहा हो.
सबसे पहले, पक्का करें कि हमारा बॉर्डर राऊटर चालू है और चालू है. साथ ही, बॉर्डर राऊटर पर NAT64 चालू है:
$ sudo ot-ctl state leader Done $ sudo ot-ctl nat64 enable Done $ sudo ot-ctl nat64 state PrefixManager: Active Translator: Active Done
हमें यह देखना चाहिए कि OTBR, Thread लीडर के रूप में काम कर रहा है और Thread नेटवर्क डेटा में एक NAT64 प्रीफ़िक्स (हमारे मामले में fd4c:9574:3720:2:0:0::/96
) है:
$ sudo ot-ctl netdata show Prefixes: fd4c:9574:3720:1::/64 paos low 0800 Routes: fd49:7770:7fc5:0::/64 s med 0800 fd4c:9574:3720:2:0:0::/96 sn low 0800 Services: 44970 01 41000500000e10 s 0800 44970 5d fdd20e532b87b93f50ad4eea0450f1bfd11f s 0800 Done
आईपीवी4 होस्ट से कम्युनिकेट करते समय, Thread डिवाइसों में NAT64 प्रीफ़िक्स का इस्तेमाल किया जाएगा.
3. Thread का एंड डिवाइस सेटअप करें
nRF52840 सीएलआई एंड डिवाइस बनाने और फ़्लैश करने के लिए, nRF52840 बोर्ड और OpenThread कोडलैब के साथ Thread नेटवर्क बनाएं के FTD चरण को सेट अप करें को नीचे बताए गए तरीके में बदलाव करें:
बिल्ड और फ़्लैश में, script/build
को कॉल करते समय आपको -DOT_DNS_CLIENT=ON
, -DOT_SRP_CLIENT=ON
और -DOT_ECDSA=ON
को कमांड लाइन में जोड़ना होगा:
$ cd ~/src/ot-nrf528xx $ rm -rf build $ script/build nrf52840 USB_trans -DOT_JOINER=ON -DOT_COMMISSIONER=ON -DOT_DNS_CLIENT=ON -DOT_SRP_CLIENT=ON -DOT_ECDSA=ON
इसके बाद, nRF52840 बोर्ड और OpenThread कोडलैब के साथ Thread नेटवर्क बनाएं को जारी रखें. एंड डिवाइस पर सीएलआई इमेज दिखने के बाद, Thread का एंड डिवाइस सेट अप करें. इसके लिए, Thread Border Router - दो-तरफ़ा IPv6 कनेक्टिविटी और डीएनएस-आधारित सेवा डिस्कवरी का इस्तेमाल करें.
Thread का एंड डिवाइस सेट अप करने के बाद, कुछ सेकंड इंतज़ार करें और पुष्टि करें कि Thread नेटवर्क को कनेक्ट किया गया है या नहीं. आपको नेटवर्क डेटा में NAT64 प्रीफ़िक्स मिल जाएगा (हमारे मामले में fd4c:9574:3720:2:0:0::/96
):
> netdata show Prefixes: fd4c:9574:3720:1::/64 paos low 0800 Routes: fd49:7770:7fc5:0::/64 s med 0800 fd4c:9574:3720:2:0:0::/96 sn low 0800 Services: 44970 01 41000500000e10 s 0800 44970 5d fdd20e532b87b93f50ad4eea0450f1bfd11f s 0800 Done
पक्का करें कि नेटवर्क डेटा, ओटीबीआर में मौजूद डेटा से मेल खाता हो.
4. Thread के एंड डिवाइस पर जाकर, आईपीवी4 होस्ट से संपर्क करें
अब हमारे सेट अप किए गए एंड डिवाइस से, आईपीवी4 नेटवर्क पर होस्ट के साथ बातचीत की जा सकती है.
आईपीवी4 होस्ट को आईसीएमपी इको अनुरोध भेजें
हमारे Thread एंड डिवाइस के सीएलआई से:
> ping 8.8.8.8 Pinging synthesized IPv6 address: fd4c:9574:3720:2:0:0:808:808 16 bytes from fd4c:9574:3720:2:0:0:808:808: icmp_seq=15 hlim=119 time=48ms 1 packets transmitted, 1 packets received. Packet loss = 0.0%. Round-trip min/avg/max = 48/48.0/48 ms. Done
बॉर्डर राऊटर, nat64 mappings
निर्देश देकर इस डिवाइस के लिए NAT64 मैपिंग आइटम बनाता है:
$ sudo ot-ctl nat64 mappings | | Address | | 4 to 6 | 6 to 4 | +------------------+-------------------------------------------------------------+--------+-------------------------+-------------------------+ | ID | IPv6 | IPv4 | Expiry | Pkts | Bytes | Pkts | Bytes | +------------------+------------------------------------------+------------------+--------+----------+--------------+----------+--------------+ | 377ee63dd3127f1a | fd4c:9574:3720:1:1d61:b4c1:494f:f975 | 192.168.255.254 | 7190s | 1 | 16 | 1 | 16 | | | TCP | 0 | 0 | 0 | 0 | | | UDP | 0 | 0 | 0 | 0 | | | ICMP | 1 | 16 | 1 | 16 | Done
fd4c:9574:3720:1:1d61:b4c1:494f:f975
आपके Thread डिवाइस का आईपीवी6 पता होना चाहिए.
यह देखने के लिए कि यह ट्रैफ़िक की गिनती कैसे करता है, किसी भी समय बॉर्डर राऊटर पर इस निर्देश को चलाएं.
आईपीवी4 डीएनएस सर्वर पर डीएनएस क्वेरी भेजें
आईपीवी4 नेटवर्क पर किसी होस्टनेम का समाधान करने के लिए, dns resolve4
का इस्तेमाल करें. डीएनएस सर्वर पता, आईपीवी4 पता भी हो सकता है:
> dns resolve4 example.com 8.8.8.8 Synthesized IPv6 DNS server address: fd4c:9574:3720:2:0:0:808:808 DNS response for example.com. - fd4c:9574:3720:2:0:0:5db8:d822 TTL:20456 Done
टीसीपी के ज़रिए बातचीत करें
आईपीवी4 नेटवर्क में एंड डिवाइस और होस्ट के बीच टीसीपी कनेक्शन बनाए जा सकते हैं.
मान लें कि आपके Linux IPv4 होस्ट का आईपी पता 192.168.0.2
है.
अपने Linux IPv4 होस्ट पर, टीसीपी कनेक्शन सुनने के लिए nc
का इस्तेमाल करें:
$ nc -l 0.0.0.0 12345
अपने Thread एंड डिवाइस से, टीसीपी कनेक्शन बनाएं और Linux आईपीवी4 होस्ट को मैसेज भेजें:
> tcp init Done > tcp connect 192.168.0.2 12345 Connecting to synthesized IPv6 address: fd4c:9574:3720:2:0:0:c0a8:2 Done > tcp send hello
आपके Linux IPv4 होस्ट आउटपुट:
hello
अपने Linux IPv4 होस्ट से, Thread खत्म होने वाले डिवाइस पर भी मैसेज भेजे जा सकते हैं. "world" टाइप करें और nc
पर चलने वाले अपने Linux IPv4 होस्ट पर Enter दबाएं. ऐसा करने से, Thread खत्म होने वाले आपके डिवाइस से मिलने वाले आउटपुट:
TCP: Received 6 bytes: world
UDP के ज़रिए बातचीत करें
यूडीपी का इस्तेमाल करके, आईपीवी4 नेटवर्क में Thread डिवाइसों और होस्ट के बीच कम्यूनिकेट किया जा सकता है.
मान लें कि आपके Linux IPv4 होस्ट का आईपी पता 192.168.0.2
है.
यूडीपी कनेक्शन सुनने के लिए, nc
का इस्तेमाल करें:
$ nc -u -l 0.0.0.0 12345
अपने Thread एंड डिवाइस से, यूडीपी कनेक्शन बनाएं और Linux आईपीवी4 होस्ट को मैसेज भेजें:
> udp open Done > udp connect 192.168.0.2 12345 Connecting to synthesized IPv6 address: fd4c:9574:3720:2:0:0:c0a8:2 Done > udp send hello Done
आपके Linux IPv4 होस्ट आउटपुट:
hello
अपने Linux IPv4 होस्ट से, Thread खत्म होने वाले डिवाइस पर भी मैसेज भेजे जा सकते हैं. "world" टाइप करें और nc
पर चलने वाले अपने Linux IPv4 होस्ट पर Enter दबाएं. ऐसा करने से, Thread खत्म होने वाले आपके डिवाइस से मिलने वाले आउटपुट:
6 bytes from fd4c:9574:3720:2:0:0:c0a8:2 12345 world
5. बॉर्डर राऊटर पर NAT64 को टॉगल करें
NAT64 को किसी भी समय चालू या बंद किया जा सकता है. NAT64 को बंद करने के लिए, nat64 disable
का इस्तेमाल करें. साथ ही, NAT64 की स्थिति की जांच करने के लिए, nat64 state
का इस्तेमाल करें.
$ sudo ot-ctl nat64 disable Done $ sudo ot-ctl nat64 state PrefixManager: Disabled Translator: Disabled Done
बंद करने के बाद, डिवाइस NAT64 प्रीफ़िक्स को पब्लिश नहीं करेगा:
$ sudo ot-ctl netdata show Prefixes: fd4c:9574:3720:1::/64 paos low 0800 Routes: fd49:7770:7fc5:0::/64 s med 0800 Services: 44970 01 41000500000e10 s 0800 44970 5d fdd20e532b87b93f50ad4eea0450f1bfd11f s 0800 Done
साथ ही, Thread नेटवर्क के डिवाइस इस बॉर्डर राऊटर से आईपीवी4 होस्ट को ऐक्सेस नहीं कर सकते.
हमारे Thread एंड डिवाइस के सीएलआई से:
> ping 8.8.8.8 Error 13: InvalidState
NAT64 को चालू करने के लिए, nat64 enable
का इस्तेमाल करें. प्रीफ़िक्स मैनेजर को NAT64 प्रीफ़िक्स का विज्ञापन दिखाने में कुछ समय लग सकता है:
$ sudo ot-ctl nat64 enable Done $ sudo ot-ctl nat64 state PrefixManager: Idle Translator: NotWorking Done
कुछ सेकंड के बाद, NAT64 कॉम्पोनेंट काम करने के लिए तैयार हो जाएंगे:
$ sudo ot-ctl nat64 state PrefixManager: Active Translator: Active Done $ sudo ot-ctl netdata show Prefixes: fd4c:9574:3720:1::/64 paos low 0800 Routes: fd49:7770:7fc5:0::/64 s med 0800 fd4c:9574:3720:2:0:0::/96 sn low 0800 Services: 44970 01 41000500000e10 s 0800 44970 5d fdd20e532b87b93f50ad4eea0450f1bfd11f s 0800 Done
ध्यान दें कि NAT64 को बंद करने से मैपिंग टेबल मिट जाएगी:
$ sudo ot-ctl nat64 mappings | | Address | | 4 to 6 | 6 to 4 | +------------------+-------------------------------------------------------------+--------+-------------------------+-------------------------+ | ID | IPv6 | IPv4 | Expiry | Pkts | Bytes | Pkts | Bytes | +------------------+------------------------------------------+------------------+--------+----------+--------------+----------+--------------+ Done
6. डीएनएस क्वेरी को अपस्ट्रीम डीएनएस सर्वर पर फ़ॉरवर्ड करें
बॉर्डर राऊटर पर NAT64 चालू होने पर, OpenThread, इंटरनेट डोमेन के लिए डीएनएस क्वेरी को, अपस्ट्रीम डीएनएस सर्वर पर फ़ॉरवर्ड करने की कोशिश करेगा.
यह फ़ंक्शन इंटरनल डीएनएस-एसडी सर्वर पर काम करता है. इसलिए, यह पक्का करें कि डीएनएस-एसडी सर्वर चालू है.
$ sudo ot-ctl srp server state running Done
अगर यह running
नहीं है, तो इसे चालू करें:
$ sudo ot-ctl srp server enable Done
पक्का करें कि अपस्ट्रीम डीएनएस प्रॉक्सी चालू हो:
$ sudo ot-ctl dns server upstream Enabled Done
अगर यह Enabled
नहीं है, तो इसे चालू करें:
$ sudo ot-ctl dns server upstream enable Done
एंड डिवाइसों पर, पक्का करें कि SRP क्लाइंट चालू हो, ताकि यह बॉर्डर राऊटर पर डीएनएस क्वेरी भेज सके:
> srp client state Enabled Done
अगर यह Enabled
नहीं है, तो इसे चालू करें:
> srp client autostart enable Done
अपने डिवाइस पर, पक्का करें कि डिफ़ॉल्ट डीएनएस सर्वर बॉर्डर राऊटर है:
> dns config Server: [fdd2:0e53:2b87:b93f:50ad:4eea:0450:f1bf]:53 ResponseTimeout: 6000 ms MaxTxAttempts: 3 RecursionDesired: yes Done
सर्वर का आईपीवी6 पता (ऊपर दिए गए उदाहरण में fdd2:0e53:2b87:b93f:50ad:4eea:0450:f1bf
), आपके OpenThread Border राऊटर के पतों में से एक होना चाहिए.
अब एंड डिवाइस से इंटरनेट डोमेन के लिए डीएनएस क्वेरी भेजी जा सकती हैं:
> dns resolve example.com DNS response for example.com. - 2606:2800:220:1:248:1893:25c8:1946 TTL:8720 Done > dns resolve4 example.com DNS response for example.com. - fd4c:9574:3720:2:0:0:5db8:d822 TTL:20456 Done
7. बधाई हो
बधाई हो, आपने NAT64 की सुविधा वाला बॉर्डर राऊटर सेट अप कर लिया है और Thread के एंड डिवाइसों को इंटरनेट ऐक्सेस करने के लिए इसका इस्तेमाल कर लिया है!
इसके बारे में और पढ़ें
- OpenThread की गाइड
- OpenThread की सीएलआई रेफ़रंस
- NAT64 के लिए OpenThread API का रेफ़रंस
- अपस्ट्रीम डीएनएस के लिए OpenThread API का रेफ़रंस
- डीएनएस के लिए OpenThread प्लैटफ़ॉर्म का ऐब्स्ट्रैक्ट करना