Thread बॉर्डर राऊटर - NAT64 के ज़रिए इंटरनेट ऐक्सेस दें

1. परिचय

7299534792dd9439.png

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 बोर्ड.

इस कोडलैब के लिए नेटवर्क टोपोलॉजी:

c3cd2e081bc052fd.png

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 के एंड डिवाइसों को इंटरनेट ऐक्सेस करने के लिए इसका इस्तेमाल कर लिया है!

इसके बारे में और पढ़ें

रेफ़रंस के लिए दस्तावेज़