Thread बॉर्डर राऊटर - दोनों तरफ़ ले जाने वाली आईपीवी6 कनेक्टिविटी और डीएनएस पर आधारित सेवा की खोज

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

1. परिचय

699d673d05a55535.png

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

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

OpenThread क्या है?

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

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

Thread बॉर्डर राऊटर, Thread नेटवर्क को वाई-फ़ाई या ईथरनेट जैसे अन्य आईपी-आधारित नेटवर्क से कनेक्ट करता है. Thread नेटवर्क को दूसरे नेटवर्क से कनेक्ट करने के लिए, बॉर्डर राऊटर की ज़रूरत होती है. थ्रेड बॉर्डर राउटर, कम से कम इन फ़ंक्शन के साथ काम करता है:

  • Thread और वाई-फ़ाई/ईथरनेट नेटवर्क के बीच, दोनों तरफ़ से आईपी कनेक्टिविटी.
  • mDNS (वाई-फ़ाई/इथरनेट लिंक पर) और SRP (थ्रेड नेटवर्क पर) के ज़रिए, सेवा की जानकारी को दोनों तरफ़ से खोजना.
  • Thread-over-infrastructure, जो आईपी-आधारित लिंक पर Thread के अलग-अलग सेक्शन को मर्ज करता है.
  • Thread डिवाइस की पुष्टि करने और उसे Thread नेटवर्क से जोड़ने के लिए, बाहरी Thread कमिशनिंग (उदाहरण के लिए, मोबाइल फ़ोन).

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

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

इस कोडलैब में, आपको Thread बॉर्डर राऊटर सेट अप करना है. साथ ही, बॉर्डर राऊटर की मदद से अपने मोबाइल फ़ोन को Thread एंड डिवाइस से कनेक्ट करना है.

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

  • ओटीबीआर सेट अप करने का तरीका
  • OTBR की मदद से Thread नेटवर्क बनाने का तरीका
  • एसआरपी सुविधा के साथ OpenThread सीएलआई डिवाइस बनाने का तरीका
  • SRP के साथ किसी सेवा को रजिस्टर करने का तरीका
  • Thread एंड डिवाइस को ढूंढने और उससे कनेक्ट करने का तरीका

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

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

2. ओटीबीआर सेट अप करना

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

OTBR सेटअप होने के बाद, ot-ctl का इस्तेमाल करके पुष्टि करें कि OTBR, थ्रेड leader के तौर पर काम कर रहा है.

$ sudo ot-ctl state
leader
Done

यह भी पुष्टि करें कि OTBR ने थ्रेड नेटवर्क डेटा में, off-mesh-routable (OMR) प्रीफ़िक्स को अपने-आप कॉन्फ़िगर किया है.

$ sudo ot-ctl netdata show
Prefixes:
Prefixes:
fd76:a5d1:fcb0:1707::/64 paos med 4000
Routes:
fd49:7770:7fc5:0::/64 s med 4000
Services:
44970 5d c000 s 4000
44970 01 9a04b000000e10 s 4000
Done
$ sudo ot-ctl ipaddr      
fda8:5ce9:df1e:6620:0:ff:fe00:fc11
fda8:5ce9:df1e:6620:0:0:0:fc38
fda8:5ce9:df1e:6620:0:ff:fe00:fc10
fd76:a5d1:fcb0:1707:f3c7:d88c:efd1:24a9
fda8:5ce9:df1e:6620:0:ff:fe00:fc00
fda8:5ce9:df1e:6620:0:ff:fe00:4000
fda8:5ce9:df1e:6620:3593:acfc:10db:1a8d
fe80:0:0:0:a6:301c:3e9f:2f5b
Done

3. एसआरपी क्लाइंट के आखिरी डिवाइस को सेट अप करना

OT CLI को बिल्ड और फ़्लैश करना

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

हालांकि, सीएलआई नोड के लिए OT_COMMISSIONER और OT_JOINER की जगह OT_SRP_CLIENT और OT_ECDSA सुविधाओं की ज़रूरत होती है.

इसलिए, पूरा बिल्ड इनवोकेशन कुछ ऐसा दिखेगा:

$ script/build nrf52840 USB_trans -DOT_SRP_CLIENT=ON -DOT_ECDSA=ON

Thread नेटवर्क से जुड़ना

Thread नेटवर्क में शामिल होने के लिए, हमें OTBR डिवाइस से चालू ऑपरेशनल डेटासेट चाहिए. आइए, ot-ctl पर वापस जाएं और चालू डेटासेट पाएं:

$ sudo ot-ctl dataset active -x
0e080000000000010000000300001235060004001fffe002083d3818dc1c8db63f0708fda85ce9df1e662005101d81689e4c0a32f3b4aa112994d29692030f4f70656e5468726561642d35326532010252e204103f23f6b8875d4b05541eeb4f9718d2f40c0302a0ff
Done

SRP क्लाइंट नोड स्क्रीन सेशन पर वापस जाएं और चालू डेटासेट सेट करें:

> dataset set active 0e080000000000010000000300001235060004001fffe002083d3818dc1c8db63f0708fda85ce9df1e662005101d81689e4c0a32f3b4aa112994d29692030f4f70656e5468726561642d35326532010252e204103f23f6b8875d4b05541eeb4f9718d2f40c0302a0ff
Done

इसके बाद, Thread इंटरफ़ेस शुरू करें:

> ifconfig up
Done
> thread start
Done

कुछ सेकंड इंतज़ार करें और पुष्टि करें कि Thread नेटवर्क में शामिल होने की प्रोसेस पूरी हो गई है या नहीं:

> state
child
Done
> netdata show
Prefixes:
fd76:a5d1:fcb0:1707::/64 paos med 4000
Routes:
fd49:7770:7fc5:0::/64 s med 4000
Services:
44970 5d c000 s 4000
44970 01 9a04b000000e10 s 4000
Done
> ipaddr
fd76:a5d1:fcb0:1707:d3dc:26d3:f70b:b927
fda8:5ce9:df1e:6620:0:ff:fe00:4001
fda8:5ce9:df1e:6620:ed74:123:cc5d:74ba
fe80:0:0:0:d4a9:39a0:abce:b02e
Done

पक्का करें कि नेटवर्क डेटा, ओटीबीआर पर प्रिंट किए गए डेटा से मेल खाता हो. अब हम OTBR के ओएमआर पते को पिंग कर सकते हैं:

> ping fd76:a5d1:fcb0:1707:f3c7:d88c:efd1:24a9
Done
> 16 bytes from fd76:a5d1:fcb0:1707:f3c7:d88c:efd1:24a9: icmp_seq=1 hlim=64 time=49ms

4. आखिरी डिवाइस पर सेवा पब्लिश करना

mDNS का इस्तेमाल, लिंक-लोकल पर DNS-SD सेवा को पब्लिश करने के लिए बड़े पैमाने पर किया गया है. हालांकि, मल्टीकास्ट मैसेज बहुत ज़्यादा बैंडविड्थ का इस्तेमाल करते हैं. साथ ही, कम बैटरी वाले डिवाइसों की बैटरी तेज़ी से खत्म हो जाती है. थ्रेड, बॉर्डर राउटर के साथ अपनी सेवाओं को रजिस्टर करने के लिए, यूनीकास्ट SRP प्रोटोकॉल का इस्तेमाल करता है. साथ ही, वाई-फ़ाई या ईथरनेट लिंक पर सेवाओं का विज्ञापन दिखाने के लिए, बॉर्डर राउटर पर निर्भर करता है.

हम srp client कमांड की मदद से, किसी सेवा को रजिस्टर कर सकते हैं.

SRP क्लाइंट नोड स्क्रीन सेशन पर जाएं और SRP क्लाइंट को अपने-आप शुरू करें:

> srp client autostart enable
Done

वह होस्टनेम सेट करें जिसका विज्ञापन वाई-फ़ाई/ईथरनेट लिंक पर दिखाया जाएगा:

> srp client host name ot-host
Done

वाई-फ़ाई/इथरनेट लिंक पर मौजूद किसी डिवाइस को Thread एंड डिवाइस से कनेक्ट करने के लिए, एंड डिवाइस के ओएमआर पते का विज्ञापन करना ज़रूरी है:

> srp client host address fd76:a5d1:fcb0:1707:d3dc:26d3:f70b:b927
Done

आखिर में, _ipps._tcp की एक नकली सेवा रजिस्टर करें:

> srp client service add ot-service _ipps._tcp 12345
Done

कुछ सेकंड इंतज़ार करें. इसके बाद, आपको रजिस्टर की गई सेवा दिखेगी:

> srp client service
instance:"ot-service", name:"_ipps._tcp", state:Registered, port:12345, priority:0, weight:0
Done

हमने सेटअप का सारा काम पूरा कर लिया है. _ipps._tcp सेवा का विज्ञापन, वाई-फ़ाई/इथरनेट लिंक पर दिखना चाहिए. अब टारगेट डिवाइस को ढूंढने और उससे कनेक्ट करने का समय आ गया है!

5. सेवा के बारे में जानकारी

मोबाइल फ़ोन से सेवा के बारे में जानकारी

54a136a8940897cc.png

हम Android फ़ोन पर mDNS सेवाओं को ढूंढने के लिए, Service Browser ऐप्लिकेशन का इस्तेमाल करते हैं. iOS मोबाइल डिवाइसों के लिए भी इस तरह का ऐप्लिकेशन उपलब्ध है. ऐप्लिकेशन खोलें और सेवा _ipps._tcp दिखने लगेगी.

Linux होस्ट की मदद से सेवा का इस्तेमाल करना

अगर आपको किसी दूसरे Linux होस्ट से सेवा खोजनी है, तो avahi-browse कमांड का इस्तेमाल करें.

avahi-daemon और avahi-utils इंस्टॉल करें:

$ sudo apt-get install -y avahi-daemon avahi-utils

सेवा को ठीक करें:

$ sudo service avahi-daemon start # Ensure the avahi daemon is started.
$ avahi-browse -r _ipps._tcp
+ wlan0 IPv6 ot-service                                    Secure Internet Printer local
= wlan0 IPv6 ot-service                                    Secure Internet Printer local
   hostname = [ot-host.local]
   address = [fd76:a5d1:fcb0:1707:d3dc:26d3:f70b:b927]
   port = [12345]
   txt = []
...

macOS होस्ट की मदद से सेवा का इस्तेमाल करना

macOS पर dns-sd का इस्तेमाल करके, इस समस्या को हल किया जा सकता है:

$ dns-sd -Z _ipps._tcp local.
Browsing for _ipps._tcp.local.
DATE: ---Sun 14 Mar 2021---
21:31:42.125  ...STARTING...

; To direct clients to browse a different domain, substitute that domain in place of '@'
lb._dns-sd._udp                                 PTR     @

; In the list of services below, the SRV records will typically reference dot-local Multicast DNS names.
; When transferring this zone file data to your unicast DNS server, you'll need to replace those dot-local
; names with the correct fully-qualified (unicast) domain name of the target host offering the service.

_ipps._tcp                                      PTR     ot-service._ipps._tcp
ot-service._ipps._tcp                           SRV     0 0 12345 ot-host.local. ; Replace with unicast FQDN of target host
ot-service._ipps._tcp                           TXT     ""
...

6. आखिरी डिवाइस को पिंग करना

मोबाइल फ़ोन से पिंग करना

Pixel फ़ोन को उदाहरण के तौर पर लें. हम Service Browser ऐप्लिकेशन में, सेवा के इंस्टेंस की जानकारी वाले पेज पर जाकर, पहले से रजिस्टर की गई सेवा "ot-service" का ओएमआर पता देख सकते हैं.

bb992962e68d250b.png 888daa1df1e1a9bf.png

अब हम किसी दूसरे नेटवर्क ऐनालाइज़र ऐप्लिकेशन की मदद से, ओएमआर पते को पिंग कर सकते हैं.

माफ़ करें, Network Analyzer ऐप्लिकेशन का Android वर्शन, पिंग की सुविधा के लिए mDNS क्वेरी के साथ काम नहीं करता. साथ ही, हम होस्टनेम ot-host.local को सीधे तौर पर पिंग नहीं कर सकते. हालांकि, ऐप्लिकेशन के iOS वर्शन से होस्टनेम को पिंग किया जा सकता है.

Linux/macOS होस्ट से पिंग करना

Thread बॉर्डर राउटर, ICMPv6 राउटर विज्ञापन (RA) भेजता है. इससे, Wi-Fi/इथरनेट लिंक पर प्रीफ़िक्स (प्रीफ़िक्स की जानकारी वाले विकल्प की मदद से) और रास्तों (रास्ते की जानकारी वाले विकल्प की मदद से) का विज्ञापन किया जाता है.

Linux होस्ट तैयार करना

यह पक्का करना ज़रूरी है कि आपके होस्ट पर आरए और आरआईओ चालू हों:

  1. अगर आईपी फ़ॉरवर्डिंग की सुविधा चालू नहीं है, तो net.ipv6.conf.wlan0.accept_ra कम से कम 1 होना चाहिए. अगर यह सुविधा चालू है, तो net.ipv6.conf.wlan0.accept_ra 2 होना चाहिए.
  2. net.ipv6.conf.wlan0.accept_ra_rt_info_max_plen की वैल्यू, 64 से कम नहीं होनी चाहिए.

ज़्यादातर डिस्ट्रिब्यूशन के लिए, accept_ra डिफ़ॉल्ट रूप से 1 पर सेट होता है. हालांकि, ऐसे अन्य नेटवर्क डेमन हो सकते हैं जो इस विकल्प को बदल देंगे. उदाहरण के लिए, Raspberry Pi पर dhcpcd, accept_ra को 0 पर बदल देगा. accept_ra वैल्यू की जांच करने के लिए:

$ sudo sysctl -n net.ipv6.conf.wlan0.accept_ra
0

इसके बाद, वैल्यू को 1 (या आईपी फ़ॉरवर्डिंग चालू होने पर 2) पर सेट करें:

$ sudo sysctl -w net.ipv6.conf.wlan0.accept_ra=1
Net.ipv6.conf.wlan0.accept_ra = 1

ज़्यादातर Linux डिस्ट्रिब्यूशन में, accept_ra_rt_info_max_plen विकल्प डिफ़ॉल्ट रूप से 0 पर सेट होता है. इसे 64 पर सेट करने के लिए:

$ sudo sysctl -w net.ipv6.conf.wlan0.accept_ra_rt_info_max_plen=64
net.ipv6.conf.wlan0.accept_ra_rt_info_max_plen = 64

होस्ट को रीबूट करने के बाद, यह बदलाव मिट जाएगा. उदाहरण के लिए, आरआईओ को हमेशा के लिए चालू करने के लिए, /etc/sysctl.conf में नीचे दिए गए निर्देश जोड़ें:

$ net.ipv6.conf.wlan0.accept_ra_rt_info_max_plen = 64

हो सकता है कि उन कॉन्फ़िगरेशन में बदलाव करने के लिए बहुत देर हो चुकी हो, क्योंकि ओटीबीआर पहले से ही आरए मैसेज भेज रहा है. साथ ही, दो अनचाहे आरए मैसेज के बीच का अंतर कई सौ सेकंड हो सकता है. राऊटर से अनुरोध करने वाले मैसेज भेजने के लिए, वाई-फ़ाई एपी से डिसकनेक्ट करके फिर से कनेक्ट करें. इससे OTBR, अनुरोध किए गए आरए के साथ जवाब देगा. दूसरा विकल्प यह है कि बॉर्डर राऊटर पर बॉर्डर रूटिंग की सुविधा को रीस्टार्ट करें:

$ sudo ot-ctl br disable
Done
$ sudo ot-ctl br enable
Done

अगर आपको वाई-फ़ाई से फिर से कनेक्ट करना है या ईथरनेट इंटरफ़ेस को रीस्टार्ट करना है, तो पक्का करें कि आपके वाई-फ़ाई/ईथरनेट IPv6 नेटवर्क को मैनेज करने के लिए, dhcpcd का इस्तेमाल न किया गया हो. ऐसा इसलिए, क्योंकि इंटरफ़ेस को रीस्टार्ट करने पर dhcpcd हमेशा accept_ra विकल्प को बदल देता है. साथ ही, आपका accept_ra कॉन्फ़िगरेशन भी मिट जाएगा. dhcpcd में IPv6 को साफ़ तौर पर बंद करने के लिए, dhcpcd कॉन्फ़िगरेशन फ़ाइल (उदाहरण के लिए, /etc/dhcpcd.conf) में नीचे दी गई लाइनें जोड़ें:

noipv6
noipv6rs

बदलाव लागू करने के लिए, आपको डिवाइस को रीबूट करना होगा.

macOS होस्ट तैयार करना

accept_ra* के दोनों विकल्प डिफ़ॉल्ट रूप से चालू होते हैं. हालांकि, आपको अपने सिस्टम को कम से कम macOS Big Sur पर अपग्रेड करना होगा.

होस्टनेम या IPv6 पते को पिंग करना

अब हम ping -6 (macOS के लिए ping6) कमांड की मदद से, होस्टनेम ot-host.local को पिंग कर सकते हैं:

$ ping -6 ot-host.local.
PING ot-host.local.(fd76:a5d1:fcb0:1707:d3dc:26d3:f70b:b927 (fd76:a5d1:fcb0:1707:d3dc:26d3:f70b:b927)) 56 data bytes
64 bytes from fd76:a5d1:fcb0:1707:d3dc:26d3:f70b:b927 (fd76:a5d1:fcb0:1707:d3dc:26d3:f70b:b927): icmp_seq=1 ttl=63 time=170 ms
64 bytes from fd76:a5d1:fcb0:1707:d3dc:26d3:f70b:b927 (fd76:a5d1:fcb0:1707:d3dc:26d3:f70b:b927): icmp_seq=2 ttl=63 time=64.2 ms
64 bytes from fd76:a5d1:fcb0:1707:d3dc:26d3:f70b:b927 (fd76:a5d1:fcb0:1707:d3dc:26d3:f70b:b927): icmp_seq=3 ttl=63 time=22.8 ms
64 bytes from fd76:a5d1:fcb0:1707:d3dc:26d3:f70b:b927 (fd76:a5d1:fcb0:1707:d3dc:26d3:f70b:b927): icmp_seq=4 ttl=63 time=37.7 ms
64 bytes from fd76:a5d1:fcb0:1707:d3dc:26d3:f70b:b927 (fd76:a5d1:fcb0:1707:d3dc:26d3:f70b:b927): icmp_seq=5 ttl=63 time=28.7 ms
...

यह हो सकता है कि यह कमांड, Linux होस्ट पर "Name or service not known" गड़बड़ी के साथ काम न करे. ऐसा इसलिए है, क्योंकि ping कमांड, mDNS क्वेरी की मदद से ot-host.local. नेम को रिज़ॉल्व नहीं कर रहा है. /etc/nsswitch.conf खोलें और hosts से शुरू होने वाली लाइन में mdns6_minimal जोड़ें:

hosts:          files mdns4_minimal mdns6_minimal dns

हालांकि, सीधे IPv6 पते को पिंग किया जा सकता है:

$ ping -6 fd76:a5d1:fcb0:1707:d3dc:26d3:f70b:b927
PING fd76:a5d1:fcb0:1707:d3dc:26d3:f70b:b927(fd76:a5d1:fcb0:1707:d3dc:26d3:f70b:b927) 56 data bytes
64 bytes from fd76:a5d1:fcb0:1707:d3dc:26d3:f70b:b927: icmp_seq=1 ttl=63 time=32.9 ms
64 bytes from fd76:a5d1:fcb0:1707:d3dc:26d3:f70b:b927: icmp_seq=2 ttl=63 time=27.8 ms
64 bytes from fd76:a5d1:fcb0:1707:d3dc:26d3:f70b:b927: icmp_seq=3 ttl=63 time=29.9 ms
64 bytes from fd76:a5d1:fcb0:1707:d3dc:26d3:f70b:b927: icmp_seq=4 ttl=63 time=73.5 ms
64 bytes from fd76:a5d1:fcb0:1707:d3dc:26d3:f70b:b927: icmp_seq=5 ttl=63 time=26.4 ms
...

7. डिवाइस से सेवा को अनपब्लिश करना

SRP क्लाइंट नोड से रजिस्टर किए गए पते और सेवा को हटाने के लिए:

> srp client host remove
Done

अब आपको _ipps._tcp सेवा नहीं दिखेगी.

8. बधाई हो

बधाई हो, आपने OTBR को Thread बॉर्डर राऊटर के तौर पर सेट अप कर लिया है. इससे, Thread वाले आखिरी डिवाइसों के लिए, दोतरफ़ा आईपी कनेक्टिविटी और सेवा की जानकारी मिल पाएगी.

आगे क्या करना है?

इनमें से कुछ कोडलैब देखें...

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