থ্রেড বর্ডার রাউটার - দ্বিমুখী IPv6 সংযোগ এবং DNS-ভিত্তিক পরিষেবা আবিষ্কার

1. ভূমিকা

699d673d05a55535.png সম্পর্কে

থ্রেড কি?

থ্রেড হল একটি আইপি-ভিত্তিক লো-পাওয়ার ওয়্যারলেস মেশ নেটওয়ার্কিং প্রোটোকল যা ডিভাইস-টু-ডিভাইস এবং ডিভাইস-টু-ক্লাউড যোগাযোগকে সুরক্ষিত করে। থ্রেড নেটওয়ার্কগুলি একক-পয়েন্ট ব্যর্থতা এড়াতে টপোলজি পরিবর্তনের সাথে খাপ খাইয়ে নিতে পারে।

ওপেনথ্রেড কী?

গুগল কর্তৃক প্রকাশিত ওপেনথ্রেড হল থ্রেড® এর একটি ওপেন-সোর্স বাস্তবায়ন।

থ্রেড বর্ডার রাউটার কী?

একটি থ্রেড বর্ডার রাউটার একটি থ্রেড নেটওয়ার্ককে অন্যান্য আইপি-ভিত্তিক নেটওয়ার্কের সাথে সংযুক্ত করে, যেমন ওয়াই-ফাই বা ইথারনেট। একটি থ্রেড নেটওয়ার্কের অন্যান্য নেটওয়ার্কের সাথে সংযোগ স্থাপনের জন্য একটি বর্ডার রাউটারের প্রয়োজন। একটি থ্রেড বর্ডার রাউটার ন্যূনতমভাবে নিম্নলিখিত ফাংশনগুলিকে সমর্থন করে:

  • থ্রেড এবং ওয়াই-ফাই/ইথারনেট নেটওয়ার্কের মধ্যে দ্বিমুখী আইপি সংযোগ।
  • mDNS (Wi-Fi/ইথারনেট লিঙ্কে) এবং SRP (থ্রেড নেটওয়ার্কে) এর মাধ্যমে দ্বিমুখী পরিষেবা আবিষ্কার।
  • থ্রেড-ওভার-অবকাঠামো যা আইপি-ভিত্তিক লিঙ্কগুলির মাধ্যমে থ্রেড পার্টিশনগুলিকে একত্রিত করে।
  • একটি থ্রেড ডিভাইসকে একটি থ্রেড নেটওয়ার্কের সাথে প্রমাণীকরণ এবং সংযুক্ত করার জন্য বহিরাগত থ্রেড কমিশনিং (উদাহরণস্বরূপ, একটি মোবাইল ফোন)।

গুগল কর্তৃক প্রকাশিত ওপেনথ্রেড বর্ডার রাউটার (OTBR) হল থ্রেড বর্ডার রাউটারের একটি ওপেন-সোর্স বাস্তবায়ন।

তুমি কী তৈরি করবে

এই কোডল্যাবে, আপনি একটি থ্রেড বর্ডার রাউটার সেট আপ করতে যাচ্ছেন এবং বর্ডার রাউটারের মাধ্যমে আপনার মোবাইল ফোনটিকে একটি থ্রেড এন্ড ডিভাইসের সাথে সংযুক্ত করবেন।

তুমি কি শিখবে

  • কিভাবে OTBR সেট আপ করবেন
  • OTBR দিয়ে কিভাবে একটি থ্রেড নেটওয়ার্ক তৈরি করবেন
  • SRP বৈশিষ্ট্য সহ একটি OpenThread CLI ডিভাইস কীভাবে তৈরি করবেন
  • SRP-তে কীভাবে একটি পরিষেবা নিবন্ধন করবেন
  • থ্রেড এন্ড ডিভাইসটি কীভাবে আবিষ্কার করবেন এবং পৌঁছাবেন

তোমার যা লাগবে

  • একটি লিনাক্স ওয়ার্কস্টেশন, যা একটি থ্রেড আরসিপি, ওপেনথ্রেড সিএলআই তৈরি এবং ফ্ল্যাশ করার জন্য এবং আইপিভি৬ মাল্টিকাস্ট পরীক্ষা করার জন্য।
  • থ্রেড বর্ডার রাউটারের জন্য একটি রাস্পবেরি পাই।
  • ২টি নর্ডিক সেমিকন্ডাক্টর nRF52840 USB ডঙ্গেল (একটি RCP এর জন্য এবং একটি থ্রেড এন্ড ডিভাইসের জন্য)।
  • কমপক্ষে iOS 14 সহ একটি iOS ফোন বা কমপক্ষে Android 8.1 সহ Android ফোন।

2. OTBR সেট আপ করুন

OTBR সেটআপ করার দ্রুততম উপায় হল OTBR সেটআপ গাইড অনুসরণ করা।

OTBR সেটআপ সম্পূর্ণ হওয়ার পর, OTBR থ্রেড leader হিসেবে কাজ করছে কিনা তা যাচাই করতে ot-ctl ব্যবহার করুন।

$ 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

৩. SRP ক্লায়েন্ট এন্ড ডিভাইস সেট আপ করুন

OT CLI তৈরি এবং ফ্ল্যাশ করুন

একটি nRF52840 CLI এন্ড ডিভাইস তৈরি এবং ফ্ল্যাশ করতে nRF52840 বোর্ড এবং OpenThread কোডল্যাব দিয়ে Build a Thread নেটওয়ার্কের ৫ম ধাপ অনুসরণ করুন।

কিন্তু OT_COMMISSIONER এবং OT_JOINER সক্রিয় করার পরিবর্তে, CLI নোডের জন্য OT_SRP_CLIENT এবং OT_ECDSA বৈশিষ্ট্য প্রয়োজন।

তাহলে সম্পূর্ণ বিল্ড ইনভোকেশনটি এইরকম দেখাবে:

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

থ্রেড নেটওয়ার্কে যোগদান করুন

থ্রেড নেটওয়ার্কে যোগদানের জন্য, আমাদের OTBR ডিভাইস থেকে Active Operational Dataset পেতে হবে। আসুন ot-ctl এ ফিরে যাই এবং সক্রিয় ডেটাসেটটি পাই:

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

SRP ক্লায়েন্ট নোড স্ক্রিন সেশনে ফিরে যান এবং সক্রিয় ডেটাসেট সেট করুন:

> dataset set active 0e080000000000010000000300001235060004001fffe002083d3818dc1c8db63f0708fda85ce9df1e662005101d81689e4c0a32f3b4aa112994d29692030f4f70656e5468726561642d35326532010252e204103f23f6b8875d4b05541eeb4f9718d2f40c0302a0ff
Done

তারপর, থ্রেড ইন্টারফেস শুরু করুন:

> ifconfig up
Done
> thread start
Done

কয়েক সেকেন্ড অপেক্ষা করুন এবং থ্রেড নেটওয়ার্কে যোগদান সফল হয়েছে কিনা তা যাচাই করুন:

> 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-এ মুদ্রিত ডেটার সাথে মিলে যাচ্ছে। আমরা এখন OTBR-এর OMR ঠিকানা পিং করতে পারি:

> 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

৪. শেষ ডিভাইসে পরিষেবাটি প্রকাশ করুন

লিঙ্ক-লোকাল-এ DNS-SD পরিষেবা প্রকাশের জন্য mDNS ব্যাপকভাবে ব্যবহৃত হয়ে আসছে। কিন্তু মাল্টিকাস্ট বার্তাগুলি অত্যধিক ব্যান্ডউইথ খরচ করে এবং কম শক্তির ডিভাইসের জন্য ব্যাটারি দ্রুত শেষ করে দেয়। থ্রেড বর্ডার রাউটারের সাথে তাদের পরিষেবাগুলি নিবন্ধন করার জন্য ইউনিকাস্ট SRP প্রোটোকল ব্যবহার করে এবং Wi-Fi বা ইথারনেট লিঙ্কে পরিষেবাগুলির বিজ্ঞাপন দেওয়ার জন্য বর্ডার রাউটারের উপর নির্ভর করে।

আমরা srp client কমান্ড দিয়ে একটি পরিষেবা নিবন্ধন করতে পারি।

SRP ক্লায়েন্ট নোড স্ক্রিন সেশনে যান এবং SRP ক্লায়েন্টটি স্বয়ংক্রিয়ভাবে শুরু করুন:

> srp client autostart enable
Done

ওয়াই-ফাই/ইথারনেট লিঙ্কে যে হোস্টনামটি বিজ্ঞাপন দেওয়া হবে তা সেট করুন:

> srp client host name ot-host
Done

Wi-Fi/Ethernet লিঙ্কে থাকা কোনও ডিভাইসকে থ্রেড এন্ড ডিভাইসে পৌঁছানোর জন্য, শেষ ডিভাইসের OMR ঠিকানাটি বিজ্ঞাপন দিতে হবে:

> 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 পরিষেবাটি Wi-Fi/Ethernet লিঙ্কে বিজ্ঞাপন দেওয়া উচিত ছিল। এখনই শেষ ডিভাইসটি আবিষ্কার করার এবং পৌঁছানোর সময়!

৫. পরিষেবাটি আবিষ্কার করুন

মোবাইল ফোনের মাধ্যমে পরিষেবাটি আবিষ্কার করুন

54a136a8940897cc.png সম্পর্কে

আমরা অ্যান্ড্রয়েড ফোনের মাধ্যমে mDNS পরিষেবাগুলি আবিষ্কার করার জন্য সার্ভিস ব্রাউজার অ্যাপ ব্যবহার করি, iOS মোবাইল ডিভাইসের জন্যও সমতুল্য অ্যাপ পাওয়া যেতে পারে। অ্যাপটি খুলুন এবং _ipps._tcp পরিষেবাটি দেখা যাবে।

লিনাক্স হোস্টের মাধ্যমে পরিষেবাটি আবিষ্কার করুন

আপনি যদি অন্য লিনাক্স হোস্ট থেকে পরিষেবাটি আবিষ্কার করতে চান, তাহলে আপনি 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     ""
...

৬. শেষ ডিভাইসটি পিং করুন

মোবাইল ফোন থেকে পিং করা

উদাহরণস্বরূপ, Pixel ফোনের কথাই ধরুন, আমরা Service Browser App-এ পরিষেবার উদাহরণের বিস্তারিত পৃষ্ঠায় পূর্বে নিবন্ধিত পরিষেবা "ot-service"-এর OMR ঠিকানা খুঁজে পেতে পারি।

bb992962e68d250b.png সম্পর্কে888daa1df1e1a9bf.png সম্পর্কে

আমরা এখন অন্য একটি নেটওয়ার্ক অ্যানালাইজার অ্যাপ দিয়ে OMR ঠিকানাটি পিং করতে পারি।

দুর্ভাগ্যবশত, নেটওয়ার্ক অ্যানালাইজার অ্যাপের অ্যান্ড্রয়েড সংস্করণ পিং ইউটিলিটির জন্য mDNS কোয়েরি সমর্থন করে না এবং আমরা সরাসরি ot-host.local হোস্টনেম পিং করতে পারি না (আমরা অ্যাপের iOS সংস্করণ দিয়ে হোস্টনেম পিং করতে পারি)।

একটি Linux/macOS হোস্ট থেকে পিং করা

থ্রেড বর্ডার রাউটার ওয়াই-ফাই/ইথারনেট লিঙ্কে প্রিফিক্স (প্রিফিক্স ইনফরমেশন অপশনের মাধ্যমে) এবং রুট (রুট ইনফরমেশন অপশনের মাধ্যমে) বিজ্ঞাপন দেওয়ার জন্য ICMPv6 রাউটার বিজ্ঞাপন (RA) পাঠায়।

লিনাক্স হোস্ট প্রস্তুত করুন

আপনার হোস্টে RA এবং RIO সক্রিয় আছে কিনা তা নিশ্চিত করা গুরুত্বপূর্ণ:

  1. আইপি ফরওয়ার্ডিং সক্ষম না থাকলে net.ipv6.conf.wlan0.accept_ra কমপক্ষে 1 এবং অন্যথায় 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 (অথবা IP ফরওয়ার্ডিং সক্রিয় থাকলে 2 ) এ সেট করুন:

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

বেশিরভাগ লিনাক্স ডিস্ট্রিবিউশনে 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

হোস্ট রিবুট করার পরে পরিবর্তনটি হারিয়ে যাবে। উদাহরণস্বরূপ, RIO স্থায়ীভাবে সক্ষম করতে /etc/sysctl.conf এ নীচের কমান্ডগুলি যুক্ত করুন:

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

OTBR ইতিমধ্যেই RA বার্তা পাঠাচ্ছে এবং দুটি অযাচিত RA বার্তার মধ্যে ব্যবধান কয়েকশ সেকেন্ড হতে পারে বলে এই কনফিগারেশনগুলি পরিবর্তন করতে অনেক দেরি হতে পারে। একটি উপায় হল রাউটার সলিসিটেশন বার্তা পাঠানোর জন্য Wi-Fi AP সংযোগ বিচ্ছিন্ন করে পুনরায় সংযোগ করা যাতে OTBR অনুরোধকৃত RA-এর সাথে প্রতিক্রিয়া জানাতে পারে। আরেকটি বিকল্প হল বর্ডার রাউটারে বর্ডার রাউটিং ফাংশন পুনরায় চালু করা:

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

যদি আপনি Wi-Fi পুনরায় সংযোগ করার চেষ্টা করেন অথবা ইথারনেট ইন্টারফেস পুনরায় চালু করার চেষ্টা করেন, তাহলে নিশ্চিত করুন যে dhcpcd আপনার WiFi-/Ethernet IPv6 নেটওয়ার্ক পরিচালনার জন্য ব্যবহার করা হচ্ছে না। কারণ dhcpcd সর্বদা ইন্টারফেস পুনরায় চালু করার সময় accept_ra বিকল্পটি ওভাররাইড করে এবং আপনার accept_ra কনফিগারেশনটি হারিয়ে যাবে। dhcpcd-এ IPv6 স্পষ্টভাবে অক্ষম করতে dhcpcd কনফিগারেশন ফাইলে (যেমন /etc/dhcpcd.conf ) নীচের লাইনগুলি যুক্ত করুন:

noipv6
noipv6rs

পরিবর্তনটি কার্যকর করার জন্য আপনাকে পুনরায় বুট করতে হবে।

ম্যাকোস হোস্ট প্রস্তুত করুন

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
...

এই কমান্ডটি লিনাক্স হোস্টে "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
...

৭. ডিভাইসটি বন্ধ করুন পরিষেবাটি প্রকাশ না করুন

SRP ক্লায়েন্ট নোড থেকে নিবন্ধিত ঠিকানা এবং পরিষেবা অপসারণ করতে:

> srp client host remove
Done

আপনি এখন _ipps._tcp পরিষেবাটি আবিষ্কার করতে পারবেন না

৮. অভিনন্দন

অভিনন্দন, আপনি থ্রেড এন্ড ডিভাইসগুলির জন্য দ্বিমুখী আইপি সংযোগ এবং পরিষেবা আবিষ্কার প্রদানের জন্য থ্রেড বর্ডার রাউটার হিসাবে OTBR সফলভাবে সেট আপ করেছেন।

এরপর কী?

এই কোডল্যাবগুলির কিছু দেখুন...

রেফারেন্স ডক্স