1. शुरुआती जानकारी
थ्रेड क्या है?
Thread, आईपी पर आधारित कम पावर वाला वायरलेस मेश नेटवर्किंग प्रोटोकॉल है. इसकी मदद से, एक डिवाइस से दूसरे डिवाइस पर सुरक्षित तरीके से और एक से दूसरे डिवाइस पर सुरक्षित तरीके से बातचीत की जा सकती है. थ्रेड पॉइंट नेटवर्क, टोपोलॉजी से जुड़े बदलावों के हिसाब से काम कर सकते हैं, ताकि एक पॉइंट वाले डेटा को फ़ेल होने से रोका जा सके.
OpenThread क्या है?
Google की ओर से रिलीज़ किया गया OpenThread Thread® का एक ओपन सोर्स लागू करने का तरीका है.
OpenThread बॉर्डर राऊटर क्या है?
Google का रिलीज़ किया गया OpenThread बॉर्डर राऊटर (OTBR) Thread बॉर्डर बॉर्डर को ओपन-सोर्स लागू करता है.
एनएटी64
NAT64 ऐसा तरीका है जो IPv6-ओनली नेटवर्क में होस्ट को, IPv4 नेटवर्क में मौजूद संसाधनों को ऐक्सेस करने की सुविधा देता है. NAT64 गेटवे, IPv4 प्रोटोकॉल और IPv6 प्रोटोकॉल के बीच का अनुवादक है.
OpenThread बॉर्डर राऊटर के हिस्से के तौर पर, NAT64 अनुवादक टीसीपी, यूडीपी, और आईसीएमपी (आईएमपीएमपी6) प्रोटोकॉल का अनुवाद करता है.
आपके बनाए गए प्रॉडक्ट
इस कोडलैब में, आपको OpenThread बॉर्डर राऊटर और थ्रेड डिवाइस को सेट अप करना है. इसके बाद, OpenThread बॉर्डर राऊटर के ज़रिए इंटरनेट पर थ्रेड डिवाइसों और IPv4 होस्ट के बीच कम्यूनिकेशन को चालू और पुष्टि किया जाएगा.
आप इन चीज़ों के बारे में जानेंगे
- NAT64 सुविधाओं के साथ OpenThread बॉर्डर राऊटर बनाने का तरीका.
- Thread एंड डिवाइस से, IPv4 होस्ट से संपर्क करने का तरीका.
आपको इनकी ज़रूरत होगी
- Linux वर्कस्टेशन. यह थ्रेड एनसीपी बनाने, OpenThread सीएलआई को खोलने, और IPv4 कनेक्टिविटी को टेस्ट करने के लिए इस्तेमाल किया जाता है.
- Thread बॉर्डर राऊटर के लिए, 4 जीबी रैम वाला Raspber Pi 4. इस डिवाइस से, IPv4 पर आपके Linux वर्कस्टेशन को ऐक्सेस किया जा सकता है.
- दो नॉर्डिक सेमीकंडक्टर nRF52840 डीके बोर्ड.
इस कोडलैब के लिए नेटवर्क टोपोलॉजी:
2. OpenThread बॉर्डर राऊटर को सेट अप करें
OpenThread बॉर्डर राऊटर बनाने के लिए, थ्रेड बॉर्डर राऊटर - बाईडायरेक्शनल IPv6 कनेक्टिविटी और डीएनएस-आधारित सर्विस डिस्कवरी कोडलैब के OTBR चरण को फ़ॉलो करें:
OTBR और बनाना और इंस्टॉल करना, आपको स्क्रिप्ट को बताना होगा, ताकि OpenThread में NAT64 अनुवादक को चालू करने के लिए, एनवायरमेंट वैरिएबल NAT64
को 1
और NAT64_SERVICE
से openthread
पर सेट किया जा सके. इस चरण से पहले, नीचे दिया गया निर्देश चलाएं:
$ export NAT64=1 NAT64_SERVICE=openthread
Thread बॉर्डर बॉर्डर - बाइडायरेक्शनल IPv6 कनेक्टिविटी और डीएनएस-आधारित सर्विस डिस्कवरी कोडलैब (कोड बनाना सीखना) को उसी तरह जारी रखें जैसा कि लिखा गया है. थ्रेड नेटवर्क बनाने के बाद, इस बात की पुष्टि की जा सकती है कि बॉर्डर राऊटर, OpenThread सीएलआई कमांड का इस्तेमाल करके 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 थ्रेड थ्रेड लीडर के तौर पर काम कर रहा है और थ्रेड नेटवर्क डेटा में 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
किसी IPv4 होस्ट से संपर्क करने पर, थ्रेड डिवाइस, NAT64 प्रीफ़िक्स का इस्तेमाल करेंगे.
3. Thread थ्रेड वाला डिवाइस सेट अप करें
नीचे दिए गए तरीके में बदलाव करके, nRF52840 सीएलआई एंड डिवाइस बनाने और फ़्लैश करने के लिए, nRF52840 बोर्ड और OpenThread कोडलैब के साथ 'थ्रेड नेटवर्क बनाएं' सेट अप करें के निर्देशों का पालन करें:
बनाएं और फ़्लैश करें में, 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 बॉर्डर बॉर्डर - बाईडायरेक्शनल IPv6 कनेक्टिविटी और डीएनएस-आधारित सर्विस डिस्कवरी को फ़ॉलो करें.
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
पक्का करें कि नेटवर्क डेटा, OTBR वाले डेटा से मेल खाता हो.
4. Thread एंड डिवाइस से, IPv4 होस्ट से संपर्क करें
हमने अभी-अभी सेट अप किए गए एंड डिवाइस से, IPv4 नेटवर्क पर होस्ट के साथ संपर्क किया है.
IPv4 होस्ट को ICMP इको अनुरोध भेजें
हमारे 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
आपके थ्रेड डिवाइस का IPv6 पता होना चाहिए.
बॉर्डर राऊटर पर इस निर्देश की मदद से किसी भी समय यह देखें कि ट्रैफ़िक की गिनती कैसे की जाती है.
IPv4 डीएनएस सर्वर पर डीएनएस क्वेरी भेजें
IPv4 नेटवर्क पर होस्टनेम रिज़ॉल्व करने के लिए, dns resolve4
का इस्तेमाल करें. डीएनएस सर्वर का पता, IPv4 पता भी हो सकता है:
> 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
टीसीपी की मदद से बातचीत करें
IPv4 नेटवर्क में, एंड डिवाइस और होस्ट के बीच टीसीपी कनेक्शन बनाए जा सकते हैं.
मान लें कि आपका Linux IPv4 होस्ट, 192.168.0.2
का आईपी पता है.
अपने Linux IPv4 होस्ट पर, टीसीपी कनेक्शन को सुनने के लिए nc
का इस्तेमाल करें:
$ nc -l 0.0.0.0 12345
अपने Thread एंड डिवाइस से, टीसीपी कनेक्शन बनाएं और अपने Linux IPv4 होस्ट को मैसेज भेजें:
> 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 होस्ट से भी थ्रेड के एंड डिवाइस में मैसेज भेजे जा सकते हैं. "दुनिया" में टाइप करें और nc
चलाने वाले अपने Linux IPv4 होस्ट पर Enter दबाएं. इस थ्रेड को आपके आखिरी डिवाइस के आउटपुट के तौर पर इस्तेमाल किया जा सकेगा:
TCP: Received 6 bytes: world
यूडीपी के ज़रिए बातचीत करें
IPv4 नेटवर्क में, थ्रेड डिवाइसों और होस्ट के बीच यूडीपी का इस्तेमाल करके, कम्यूनिकेशन किया जा सकता है.
मान लें कि आपका Linux IPv4 होस्ट, 192.168.0.2
का आईपी पता है.
यूडीपी कनेक्शन को सुनने के लिए nc
का इस्तेमाल करें:
$ nc -u -l 0.0.0.0 12345
अपने Thread एंड डिवाइस से, यूडीपी कनेक्शन बनाएं और अपने Linux IPv4 होस्ट को मैसेज भेजें:
> 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 होस्ट से भी थ्रेड के एंड डिवाइस में मैसेज भेजे जा सकते हैं. "दुनिया" में टाइप करें और nc
चलाने वाले अपने Linux IPv4 होस्ट पर Enter दबाएं. इस थ्रेड को आपके आखिरी डिवाइस के आउटपुट के तौर पर इस्तेमाल किया जा सकेगा:
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
साथ ही, थ्रेड नेटवर्क के डिवाइस, अब इस बॉर्डर राऊटर से IPv4 होस्ट को ऐक्सेस नहीं कर सकते.
हमारे 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 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
सर्वर IPv6 पता (ऊपर दिए गए उदाहरण में) fdd2:0e53:2b87:b93f:50ad:4eea:0450:f1bf
, आपके OpenThread बॉर्डर राऊटर के पतों में से एक होना चाहिए.
अब आपके पास एंड डिवाइस से इंटरनेट डोमेन के लिए, डीएनएस क्वेरी भेजने का विकल्प है:
> 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 एपीआई रेफ़रंस
- डीएनएस के लिए OpenThread प्लैटफ़ॉर्म ऐब्स्ट्रैक्शन