थ्रेड बॉर्डर राऊटर - NAT64 की मदद से इंटरनेट ऐक्सेस दें

1. शुरुआती जानकारी

7299534792dd9439.png

थ्रेड क्या है?

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

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

c3cd2e081bc052fd.png

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

आगे पढ़ना

रेफ़रंस दस्तावेज़