1. परिचय

थ्रेड क्या है?
Thread, आईपी पर आधारित कम पावर वाला वायरलेस मेश नेटवर्किंग प्रोटोकॉल है. यह डिवाइस-से-डिवाइस और डिवाइस-से-क्लाउड के बीच सुरक्षित तरीके से कम्यूनिकेशन करने की सुविधा देता है. सिंगल-पॉइंट फ़ेलियर से बचने के लिए, थ्रेड नेटवर्क टोपोलॉजी में बदलाव कर सकते हैं.
OpenThread क्या है?
Google की ओर से रिलीज़ किया गया OpenThread, Thread® का ओपन-सोर्स वर्शन है.
OpenThread बॉर्डर राऊटर क्या है?
Google ने OpenThread बॉर्डर राऊटर (ओटीबीआर) रिलीज़ किया है. यह Thread बॉर्डर राऊटर का ओपन-सोर्स वर्शन है.
NAT64
NAT64 एक ऐसा तरीका है जिसकी मदद से, सिर्फ़ IPv6 नेटवर्क वाले होस्ट, IPv4 नेटवर्क में मौजूद संसाधनों को ऐक्सेस कर सकते हैं. NAT64 गेटवे, आईपीवी4 प्रोटोकॉल और आईपीवी6 प्रोटोकॉल के बीच अनुवादक का काम करता है.
NAT64 ट्रांसलेटर, OpenThread बॉर्डर राउटर का हिस्सा है. यह टीसीपी, यूडीपी, और आईसीएमपी (ICMPv6) प्रोटोकॉल को ट्रांसलेट करने की सुविधा देता है.
आपको क्या बनाना है
इस कोडलैब में, आपको OpenThread बॉर्डर राऊटर (ओटीबीआर) और Thread डिवाइस सेट अप करना है. इसके बाद, OpenThread बॉर्डर राऊटर के ज़रिए, इंटरनेट पर मौजूद Thread डिवाइसों और आईपीवी4 होस्ट के बीच कम्यूनिकेशन चालू करना है और इसकी पुष्टि करनी है.
आपको क्या सीखने को मिलेगा
- NAT64 सुविधाओं के साथ OpenThread बॉर्डर राउटर बनाने का तरीका.
- थ्रेड एंड डिवाइसों से IPv4 होस्ट के साथ कम्यूनिकेट करने का तरीका.
आपको किन चीज़ों की ज़रूरत होगी
- Linux वर्कस्टेशन, जिसका इस्तेमाल Thread RCP, OpenThread CLI बनाने और फ़्लैश करने के लिए किया जाता है. साथ ही, IPv4 कनेक्टिविटी की जांच करने के लिए भी इसका इस्तेमाल किया जाता है.
- Thread बॉर्डर राऊटर के लिए Raspberry Pi. आपके Linux वर्कस्टेशन को इस डिवाइस से IPv4 पर ऐक्सेस किया जा सकता हो.
- दो Nordic Semiconductor nRF52840 यूएसबी डोंगल (एक आरसीपी के लिए और एक थ्रेड एंड डिवाइस के लिए).
इस कोडलैब के लिए नेटवर्क टोपोलॉजी:

2. OpenThread बॉर्डर राऊटर सेट अप करना
OTBR को सेट अप करने का सबसे तेज़ तरीका, OTBR सेटअप गाइड में दिया गया है.
OTBR का सेटअप पूरा होने के बाद, ot-ctl का इस्तेमाल करके यह पुष्टि करें कि बॉर्डर राउटर पर NAT64 सेवा चालू है:
> nat64 state PrefixManager: Active Translator: Active Done
Thread बॉर्डर राऊटर, Thread नेटवर्क डेटा में NAT64 प्रीफ़िक्स पब्लिश करता है:
> netdata show Prefixes: fd16:a3d:e170:1::/64 paros low f800 Routes: ::/0 s med f800 fd16:a3d:e170:2:0:0::/96 sn low f800 Services: 44970 5d fd4db3e59738319339c4ee02ca9e2b1dd120 s f800 0 Contexts: fd16:a3d:e170:1::/64 1 sc Commissioning: 60365 - - - Done
NAT64 प्रीफ़िक्स, n फ़्लैग के साथ रूट एंट्री के तौर पर दिखता है. ऊपर दिए गए उदाहरण में, fd16:a3d:e170:2:0:0::/96 NAT64 प्रीफ़िक्स है.
IPv4 होस्ट से कम्यूनिकेट करते समय, थ्रेड डिवाइस NAT64 प्रीफ़िक्स का इस्तेमाल करेंगे.
3. Thread एंड डिवाइस सेट अप करना
nRF52840 बोर्ड और OpenThread कोडलैब की मदद से थ्रेड नेटवर्क बनाने के लिए, FTD सेट अप करने का तरीका अपनाएं. इससे nRF52840 CLI एंड डिवाइस बनाया और फ़्लैश किया जा सकता है. हालांकि, आपको इस तरीके में यह बदलाव करना होगा:
बनाएं और फ़्लैश करें में, 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_DNS_CLIENT=ON -DOT_SRP_CLIENT=ON -DOT_ECDSA=ON
nRF52840 बोर्ड और OpenThread कोडलैब की मदद से थ्रेड नेटवर्क बनाएं कोडलैब में दिए गए निर्देशों का पालन करें. एंड डिवाइस पर सीएलआई इमेज फ़्लैश करने के बाद, Thread डिवाइस को Thread नेटवर्क में जोड़ने के लिए, दूसरे नोड को Thread नेटवर्क से जोड़ें पर जाएं.
थ्रेड एंड डिवाइस सेट अप करने के बाद, कुछ सेकंड इंतज़ार करें. इसके बाद, पुष्टि करें कि थ्रेड नेटवर्क में शामिल होने की प्रोसेस पूरी हो गई है. ऊपर दिए गए उदाहरण की तरह, थ्रेड नेटवर्क डेटा में पब्लिश किया गया NAT64 प्रीफ़िक्स देखा जा सकता है.
> netdata show Prefixes: fd16:a3d:e170:1::/64 paros low f800 Routes: ::/0 s med f800 fd16:a3d:e170:2:0:0::/96 sn low f800 Services: 44970 5d fd4db3e59738319339c4ee02ca9e2b1dd120 s f800 0 Contexts: fd16:a3d:e170:1::/64 1 sc Commissioning: 60365 - - - Done
पक्का करें कि नेटवर्क डेटा, OTBR से मिले डेटा से मेल खाता हो.
4. Thread एंड डिवाइस से IPv4 होस्ट से कम्यूनिकेट करना
अब हमने जिस एंड डिवाइस को सेट अप किया है उससे IPv4 नेटवर्क पर होस्ट से कम्यूनिकेट किया जा सकता है.
IPv4 होस्ट को ICMP इको अनुरोध भेजें
हमारे थ्रेड एंड डिवाइस के सीएलआई से:
> ping 8.8.8.8 Pinging synthesized IPv6 address: fd16:a3d:e170:2:0:0:808:808 16 bytes from fd16:a3d:e170:2:0:0:808:808: icmp_seq=1 hlim=109 time=28ms 1 packets transmitted, 1 packets received. Packet loss = 0.0%. Round-trip min/avg/max = 28/28.0/28 ms. Done
बॉर्डर राऊटर, इस डिवाइस के लिए nat64 mappings कमांड की मदद से NAT64 मैपिंग आइटम बनाता है:
> nat64 mappings | | Address | Ports or ICMP Ids | | 4 to 6 | 6 to 4 | +------------------+-------------------------------------------------------------+-------------------+--------+-------------------------+-------------------------+ | ID | IPv6 | IPv4 | v6 | v4 | Expiry | Pkts | Bytes | Pkts | Bytes | +------------------+------------------------------------------+------------------+---------+---------+--------+----------+--------------+----------+--------------+ | 90b156e3cf609a23 | fd16:a3d:e170:1:492d:bcdb:9f72:6297 | 192.168.255.254 | N/A | N/A | 7162s | 1 | 16 | 1 | 16 | | | TCP | 0 | 0 | 0 | 0 | | | UDP | 0 | 0 | 0 | 0 | | | ICMP | 1 | 16 | 1 | 16 | Done
fd16:a3d:e170:1:492d:bcdb:9f72:6297, आपके Thread डिवाइस का IPv6 पता होना चाहिए.
ट्रैफ़िक को गिनने का तरीका देखने के लिए, बॉर्डर राउटर पर इस निर्देश को कभी भी चलाएं.
डीएनएस क्वेरी को IPv4 डीएनएस सर्वर पर भेजें
IPv4 नेटवर्क पर होस्टनेम का पता लगाने के लिए, dns resolve4 का इस्तेमाल करें. डीएनएस सर्वर का पता, IPv4 पता भी हो सकता है:
> dns resolve4 example.com 8.8.8.8 Synthesized IPv6 DNS server address: fd16:a3d:e170:2:0:0:808:808 DNS response for example.com. - fd16:a3d:e170:2:0:0:17c0:e454 TTL:295 fd16:a3d:e170:2:0:0:17d7:88 TTL:295 fd16:a3d:e170:2:0:0:17d7:8a TTL:295 fd16:a3d:e170:2:0:0:6007:80af TTL:295 fd16:a3d:e170:2:0:0:6007:80c6 TTL:295 fd16:a3d:e170:2:0:0:17c0:e450 TTL:295 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: fd16:a3d:e170:2:0:0:c0a8:2 Done > tcp send hello
आपके Linux IPv4 होस्ट के आउटपुट:
hello
आपके पास Linux IPv4 होस्ट से थ्रेड एंड डिवाइस पर मैसेज भेजने का विकल्प भी होता है. nc चलाने वाले अपने Linux IPv4 होस्ट पर "world" टाइप करें और Enter दबाएं. इसके बाद, आपका थ्रेड एंड डिवाइस यह आउटपुट देगा:
TCP: Received 6 bytes: world
यूडीपी के ज़रिए कम्यूनिकेट करना
IPv4 नेटवर्क में, Thread डिवाइसों और होस्ट के बीच यूडीपी का इस्तेमाल करके कम्यूनिकेट किया जा सकता है.
मान लें कि आपके 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: fd16:a3d:e170:2:0:0:c0a8:2 Done > udp send hello Done
आपके Linux IPv4 होस्ट के आउटपुट:
hello
आपके पास Linux IPv4 होस्ट से थ्रेड एंड डिवाइस पर मैसेज भेजने का विकल्प भी होता है. nc चलाने वाले Linux IPv4 होस्ट पर "world" टाइप करें और Enter दबाएं. इसके बाद, आपका थ्रेड एंड डिवाइस यह आउटपुट देगा:
6 bytes from fd16:a3d:e170:2:0:0:c0a8:2 12345 world
5. बॉर्डर राऊटर पर NAT64 को टॉगल करना
NAT64 को कभी भी चालू या बंद किया जा सकता है. NAT64 को बंद करने के लिए, nat64 disable का इस्तेमाल करें. साथ ही, NAT64 की स्थिति देखने के लिए nat64 state का इस्तेमाल करें.
> nat64 disable Done > nat64 state PrefixManager: Disabled Translator: Disabled Done
NAT64 को बंद करने के बाद, डिवाइस NAT64 प्रीफ़िक्स पब्लिश नहीं करता:
> netdata show Prefixes: fd16:a3d:e170:1::/64 paros low f800 Routes: ::/0 s med f800 Services: 44970 5d fd4db3e59738319339c4ee02ca9e2b1dd120 s f800 0 Contexts: fd16:a3d:e170:1::/64 1 sc Commissioning: 60365 - - - Done
साथ ही, Thread नेटवर्क में मौजूद डिवाइस अब इस बॉर्डर राऊटर के ज़रिए IPv4 होस्ट को ऐक्सेस नहीं कर सकते.
हमारे थ्रेड एंड डिवाइस के सीएलआई से:
> ping 8.8.8.8 Error 13: InvalidState
NAT64 चालू करने के लिए, nat64 enable का इस्तेमाल करें. NAT64 प्रीफ़िक्स का विज्ञापन दिखाने में प्रीफ़िक्स मैनेजर को कुछ समय लग सकता है:
> nat64 enable Done > nat64 state PrefixManager: Idle Translator: NotWorking Done
कुछ सेकंड बाद, NAT64 कॉम्पोनेंट चालू हो जाने चाहिए:
> nat64 state PrefixManager: Active Translator: Active Done > netdata show Prefixes: fd16:a3d:e170:1::/64 paros low f800 Routes: ::/0 s med f800 fd16:a3d:e170:2:0:0::/96 sn low f800 Services: 44970 5d fd4db3e59738319339c4ee02ca9e2b1dd120 s f800 0 Contexts: fd16:a3d:e170:1::/64 1 sc Commissioning: 60365 - - - Done
ध्यान दें कि NAT64 को बंद करने पर, मैपिंग टेबल मिट जाएगी:
> nat64 mappings | | Address | Ports or ICMP Ids | | 4 to 6 | 6 to 4 | +------------------+-------------------------------------------------------------+-------------------+--------+-------------------------+-------------------------+ | ID | IPv6 | IPv4 | v6 | v4 | Expiry | Pkts | Bytes | Pkts | Bytes | +------------------+------------------------------------------+------------------+---------+---------+--------+----------+--------------+----------+--------------+ Done
6. अपस्ट्रीम डीएनएस सर्वर को डीएनएस क्वेरी फ़ॉरवर्ड करना
बॉर्डर राऊटर पर NAT64 चालू होने पर, OpenThread इंटरनेट डोमेन के लिए डीएनएस क्वेरी को अपस्ट्रीम डीएनएस सर्वर पर फ़ॉरवर्ड करने की कोशिश करेगा.
अपने एंड डिवाइस पर, पक्का करें कि डिफ़ॉल्ट डीएनएस सर्वर, बॉर्डर राऊटर हो:
> dns config Server: [fd4d:b3e5:9738:3193:39c4:ee02:ca9e:2b1d]:53 ResponseTimeout: 6000 ms MaxTxAttempts: 3 RecursionDesired: yes ServiceMode: srv_txt_opt Nat64Mode: allow Done
सर्वर का IPv6 पता (ऊपर दिए गए उदाहरण में fd4d:b3e5:9738:3193:39c4:ee02:ca9e:2b1d) आपके OpenThread बॉर्डर राऊटर के पतों में से एक होना चाहिए.
अब एंड डिवाइस से, इंटरनेट डोमेन के लिए डीएनएस क्वेरी भेजी जा सकती हैं:
> dns resolve example.com DNS response for example.com. - 2600:1406:3a00:21:0:0:173e:2e65 TTL:161 2600:1406:3a00:21:0:0:173e:2e66 TTL:161 2600:1406:bc00:53:0:0:b81e:94c8 TTL:161 2600:1406:bc00:53:0:0:b81e:94ce TTL:161 2600:1408:ec00:36:0:0:1736:7f24 TTL:161 2600:1408:ec00:36:0:0:1736:7f31 TTL:161 Done > dns resolve4 example.com DNS response for example.com. - fd16:a3d:e170:2:0:0:6007:80af TTL:300 fd16:a3d:e170:2:0:0:6007:80c6 TTL:300 fd16:a3d:e170:2:0:0:17c0:e450 TTL:300 fd16:a3d:e170:2:0:0:17c0:e454 TTL:300 fd16:a3d:e170:2:0:0:17d7:88 TTL:300 fd16:a3d:e170:2:0:0:17d7:8a TTL:300 Done
7. बधाई हो
बधाई हो, आपने NAT64 की सुविधा के साथ बॉर्डर राऊटर को सेट अप कर लिया है. साथ ही, इसका इस्तेमाल Thread एंड डिवाइसों को इंटरनेट ऐक्सेस देने के लिए किया है!
इस बारे में और पढ़ें
- OpenThread गाइड
- OpenThread CLI का रेफ़रंस
- NAT64 के लिए OpenThread API का रेफ़रंस
- अपस्ट्रीम डीएनएस के लिए OpenThread API का रेफ़रंस
- डीएनएस के लिए OpenThread प्लैटफ़ॉर्म ऐब्स्ट्रैक्शन