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

इस कोडलैब (कोड बनाना सीखने के लिए ट्यूटोरियल) के बारे में जानकारी
schedule23 मिनट
subjectपिछली बार 5 मई 2025 को अपडेट किया गया
account_circleSong Guo, Jonathan Hui ने लिखा

1. परिचय

7299534792dd9439.png

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

Thread, आईपी पर आधारित कम-पावर वाला वायरलेस मेश नेटवर्किंग प्रोटोकॉल है. इससे डिवाइस-टू-डिवाइस और डिवाइस-टू-क्लाउड कम्यूनिकेशन को सुरक्षित तरीके से किया जा सकता है. थ्रेड नेटवर्क, टोपोलॉजी में होने वाले बदलावों के हिसाब से ढल सकते हैं, ताकि किसी एक बिंदु पर होने वाली गड़बड़ी से बचा जा सके.

OpenThread क्या है?

Google की ओर से रिलीज़ किया गया OpenThread, Thread® का ओपन-सोर्स वर्शन है.

OpenThread बॉर्डर राऊटर क्या है?

Google ने OpenThread Border Router (OTBR) रिलीज़ किया है. यह Thread Border Router का ओपन-सोर्स वर्शन है.

NAT64

NAT64 एक ऐसा तरीका है जिसकी मदद से, सिर्फ़ IPv6 नेटवर्क में मौजूद होस्ट, IPv4 नेटवर्क में मौजूद संसाधनों को ऐक्सेस कर सकते हैं. NAT64 गेटवे, IPv4 प्रोटोकॉल और IPv6 प्रोटोकॉल के बीच अनुवाद करता है.

OpenThread बॉर्डर राउटर के हिस्से के तौर पर, NAT64 ट्रांसलेटर, टीसीपी, यूडीपी, और आईसीएमपी (ICMPv6) प्रोटोकॉल को ट्रांसलेट करने की सुविधा देता है.

आपको क्या बनाना है

इस कोडलैब में, आपको OpenThread बॉर्डर राऊटर (OTBR) और Thread डिवाइस सेट अप करना होगा. इसके बाद, OpenThread बॉर्डर राऊटर की मदद से, इंटरनेट पर Thread डिवाइसों और IPv4 होस्ट के बीच कम्यूनिकेशन की सुविधा चालू करनी होगी और उसकी पुष्टि करनी होगी.

आपको क्या सीखने को मिलेगा

  • NAT64 सुविधाओं के साथ OpenThread बॉर्डर राउटर बनाने का तरीका.
  • Thread एंड डिवाइसों से IPv4 होस्ट के साथ कम्यूनिकेट करने का तरीका.

आपको किन चीज़ों की ज़रूरत होगी

  • Thread आरसीपी, OpenThread सीएलआई को बनाने और फ़्लैश करने के लिए, Linux वर्कस्टेशन. साथ ही, आईपीवी4 कनेक्टिविटी की जांच करने के लिए भी.
  • Thread बॉर्डर राऊटर के लिए Raspberry Pi. इस डिवाइस से आपके Linux वर्कस्टेशन को आईपीवी4 से ऐक्सेस किया जा सकता हो.
  • दो Nordic Semiconductor nRF52840 यूएसबी डोंगल (आरसीपी के लिए एक और Thread एंड डिवाइस के लिए एक).

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

c3cd2e081bc052fd.png

2. OpenThread बॉर्डर राऊटर सेट अप करना

OTBR सेटअप करने की गाइड में दिया गया तरीका अपनाकर, OTBR को सबसे तेज़ी से सेट अप किया जा सकता है.

ओटीबीआर सेटअप पूरा होने के बाद, बॉर्डर राउटर पर NAT64 सेवा चालू होने की पुष्टि करने के लिए, ot-ctl का इस्तेमाल करें:

> 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 प्रीफ़िक्स है.

Thread डिवाइसों के लिए, NAT64 प्रीफ़िक्स का इस्तेमाल तब किया जाएगा, जब वे किसी IPv4 होस्ट से कम्यूनिकेट करेंगे.

3. Thread एंड डिवाइस सेटअप करना

nRF52840 सीएलआई एंड डिवाइस बनाने और फ़्लैश करने के लिए, nRF52840 बोर्ड और OpenThread कोडलैब की मदद से Thread नेटवर्क बनाने के लिए, एफ़टीडी सेट अप करने का तरीका अपनाएं. हालांकि, नीचे दिए गए चरण में बदलाव करें:

बिल्ड और फ़्लैश में, 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 नेटवर्क में जोड़ने के लिए, 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 होस्ट के साथ कम्यूनिकेट करना

अब आपके पास, अभी सेट अप किए गए एंड डिवाइस से, आईपीवी4 नेटवर्क पर होस्ट के साथ कम्यूनिकेट करने का विकल्प है.

IPv4 होस्ट को ICMP इको अनुरोध भेजना

Thread के आखिरी डिवाइस के सीएलआई से:

> 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

टीसीपी के ज़रिए कम्यूनिकेट करना

आईपीवी4 नेटवर्क में, एंड डिवाइस और होस्ट के बीच टीसीपी कनेक्शन बनाए जा सकते हैं.

मान लें कि आपके 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 होस्ट से, Thread एंड डिवाइस पर भी मैसेज भेजे जा सकते हैं. nc चला रहे अपने Linux IPv4 होस्ट पर "world" टाइप करें और 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 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 होस्ट से, Thread एंड डिवाइस पर भी मैसेज भेजे जा सकते हैं. nc चला रहे अपने Linux IPv4 होस्ट पर "world" टाइप करें और Enter दबाएं. इसके बाद, आपके Thread एंड डिवाइस पर यह दिखेगा:

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 प्रीफ़िक्स पब्लिश नहीं कर रहा है:

> 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 होस्ट को ऐक्सेस नहीं कर सकते.

Thread के आखिरी डिवाइस के सीएलआई से:

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

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

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