1. ভূমিকা

থ্রেড কি?
থ্রেড হল একটি আইপি-ভিত্তিক লো-পাওয়ার ওয়্যারলেস মেশ নেটওয়ার্কিং প্রোটোকল যা ডিভাইস-টু-ডিভাইস এবং ডিভাইস-টু-ক্লাউড যোগাযোগকে সুরক্ষিত করে। থ্রেড নেটওয়ার্কগুলি একক-পয়েন্ট ব্যর্থতা এড়াতে টপোলজি পরিবর্তনের সাথে খাপ খাইয়ে নিতে পারে।
ওপেনথ্রেড কী?
গুগল কর্তৃক প্রকাশিত ওপেনথ্রেড হল থ্রেড® এর একটি ওপেন-সোর্স বাস্তবায়ন।
ওপেনথ্রেড বর্ডার রাউটার কী?
গুগল কর্তৃক প্রকাশিত ওপেনথ্রেড বর্ডার রাউটার (OTBR) হল থ্রেড বর্ডার রাউটারের একটি ওপেন-সোর্স বাস্তবায়ন।
NAT64 সম্পর্কে
NAT64 হল এমন একটি প্রক্রিয়া যা IPv6-কেবল নেটওয়ার্কের হোস্টদের IPv4 নেটওয়ার্কের রিসোর্স অ্যাক্সেস করতে সক্ষম করে। NAT64 গেটওয়ে হল IPv4 প্রোটোকল এবং IPv6 প্রোটোকলের মধ্যে একটি অনুবাদক।
OpenThread Border Router-এর অংশ হিসেবে NAT64 অনুবাদক TCP, UDP, এবং ICMP (ICMPv6) প্রোটোকল অনুবাদ করতে সহায়তা করে।
তুমি কী তৈরি করবে
এই কোডল্যাবে, আপনি একটি OpenThread Border Router (OTBR) এবং একটি Thread ডিভাইস সেট আপ করতে যাচ্ছেন, তারপর OpenThread Border Router এর মাধ্যমে ইন্টারনেটে Thread ডিভাইস এবং IPv4 হোস্টের মধ্যে যোগাযোগ সক্ষম এবং যাচাই করতে যাচ্ছেন।
তুমি কি শিখবে
- NAT64 বৈশিষ্ট্য সহ একটি OpenThread বর্ডার রাউটার কীভাবে তৈরি করবেন।
- থ্রেড এন্ড ডিভাইস থেকে IPv4 হোস্টের সাথে কীভাবে যোগাযোগ করবেন।
তোমার যা লাগবে
- একটি লিনাক্স ওয়ার্কস্টেশন, যা একটি থ্রেড আরসিপি, ওপেনথ্রেড সিএলআই তৈরি এবং ফ্ল্যাশ করার জন্য এবং আইপিভি৪ সংযোগ পরীক্ষা করার জন্য।
- থ্রেড বর্ডার রাউটারের জন্য একটি রাস্পবেরি পাই। আপনার লিনাক্স ওয়ার্কস্টেশনটি এই ডিভাইস থেকে IPv4 এর মাধ্যমে পৌঁছানো উচিত।
- ২টি নর্ডিক সেমিকন্ডাক্টর nRF52840 USB ডঙ্গেল (একটি RCP এর জন্য এবং একটি থ্রেড এন্ড ডিভাইসের জন্য)।
এই কোডল্যাবের নেটওয়ার্ক টপোলজি:

2. ওপেনথ্রেড বর্ডার রাউটার সেটআপ করুন
OTBR সেটআপ করার দ্রুততম উপায় হল OTBR সেটআপ গাইড অনুসরণ করা।
OTBR সেটআপ সম্পূর্ণ হওয়ার পর, বর্ডার রাউটারে NAT64 পরিষেবা সক্রিয় আছে কিনা তা যাচাই করতে ot-ctl ব্যবহার করুন:
> nat64 state PrefixManager: Active Translator: Active Done
একটি থ্রেড বর্ডার রাউটার থ্রেড নেটওয়ার্ক ডেটাতে 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 প্রিফিক্স।
IPv4 হোস্টের সাথে যোগাযোগ করার সময় থ্রেড ডিভাইসগুলি NAT64 উপসর্গ ব্যবহার করবে।
3. থ্রেড এন্ড ডিভাইস সেটআপ করুন
nRF52840 বোর্ড এবং OpenThread কোডল্যাব দিয়ে Build a Thread network এর Set up the FTDs ধাপটি অনুসরণ করে একটি nRF52840 CLI এন্ড ডিভাইস তৈরি এবং ফ্ল্যাশ করুন, নিম্নলিখিত ধাপে পরিবর্তন করে:
Build এবং flash এ, 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 codelab দিয়ে "Build a Thread network" লেখাটি চালিয়ে যান। শেষ ডিভাইসটি CLI ইমেজ দিয়ে ফ্ল্যাশ করার পরে, "Thread network" এ দ্বিতীয় নোডটি যোগ করে Thread network এ 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-এর ডেটার সাথে মিলে যাচ্ছে।
৪. থ্রেড এন্ড ডিভাইস থেকে IPv4 হোস্টের সাথে যোগাযোগ করুন
আমরা যে ডিভাইসটি সেট আপ করেছি, সেটি থেকে আপনি এখন IPv4 নেটওয়ার্কে হোস্টদের সাথে যোগাযোগ করতে পারবেন।
IPv4 হোস্টে ICMP ইকো অনুরোধ পাঠান
আমাদের থ্রেড এন্ড ডিভাইসের CLI থেকে:
> 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 আপনার থ্রেড ডিভাইসের IPv6 ঠিকানা হওয়া উচিত।
ট্র্যাফিক কীভাবে গণনা করা হয় তা দেখতে যেকোনো সময় বর্ডার রাউটারে এই কমান্ডটি চালান।
IPv4 DNS সার্ভারে DNS কোয়েরি পাঠান
IPv4 নেটওয়ার্কে একটি হোস্টনেম সমাধান করতে dns resolve4 ব্যবহার করুন। DNS সার্ভার ঠিকানাটি একটি 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
TCP এর মাধ্যমে যোগাযোগ করুন
IPv4 নেটওয়ার্কে শেষ ডিভাইস এবং হোস্টের মধ্যে TCP সংযোগ স্থাপন করা সম্ভব।
ধরে নিন আপনার লিনাক্স IPv4 হোস্টের IP ঠিকানা হল 192.168.0.2 ।
আপনার Linux IPv4 হোস্টে, TCP সংযোগ শুনতে nc ব্যবহার করুন:
$ nc -l 0.0.0.0 12345
আপনার থ্রেড এন্ড ডিভাইস থেকে, একটি TCP সংযোগ স্থাপন করুন এবং আপনার 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
আপনি আপনার লিনাক্স IPv4 হোস্ট থেকে থ্রেড এন্ড ডিভাইসে বার্তা পাঠাতে পারেন। "world" টাইপ করুন এবং nc চলমান আপনার লিনাক্স IPv4 হোস্টে এন্টার টিপুন, এবং আপনার থ্রেড এন্ড ডিভাইসের আউটপুট:
TCP: Received 6 bytes: world
UDP এর মাধ্যমে যোগাযোগ করুন
IPv4 নেটওয়ার্কে থ্রেড ডিভাইস এবং হোস্টের মধ্যে UDP ব্যবহার করে যোগাযোগ করা সম্ভব।
ধরে নিন আপনার লিনাক্স IPv4 হোস্টের IP ঠিকানা হল 192.168.0.2 ।
UDP সংযোগ শুনতে nc ব্যবহার করুন:
$ nc -u -l 0.0.0.0 12345
আপনার থ্রেড এন্ড ডিভাইস থেকে, একটি UDP সংযোগ স্থাপন করুন এবং আপনার 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
আপনি আপনার লিনাক্স IPv4 হোস্ট থেকে থ্রেড এন্ড ডিভাইসে বার্তা পাঠাতে পারেন। "world" টাইপ করুন এবং nc চলমান আপনার লিনাক্স IPv4 হোস্টে এন্টার টিপুন, এবং আপনার থ্রেড এন্ড ডিভাইসের আউটপুট:
6 bytes from fd16:a3d:e170:2:0:0:c0a8:2 12345 world
৫. বর্ডার রাউটারে 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
এছাড়াও থ্রেড নেটওয়ার্কের ডিভাইসগুলি আর এই বর্ডার রাউটারের মাধ্যমে IPv4 হোস্ট অ্যাক্সেস করতে পারবে না।
আমাদের থ্রেড এন্ড ডিভাইসের CLI থেকে:
> 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
৬. আপস্ট্রিম DNS সার্ভারে DNS কোয়েরি ফরোয়ার্ড করুন
যখন বর্ডার রাউটারে NAT64 সক্রিয় থাকে, তখন OpenThread ইন্টারনেট ডোমেনের জন্য DNS কোয়েরিগুলি আপস্ট্রিম DNS সার্ভারে ফরোয়ার্ড করার চেষ্টা করবে।
আপনার ডিভাইসে, নিশ্চিত করুন যে ডিফল্ট DNS সার্ভারটি বর্ডার রাউটার:
> 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 কোয়েরি পাঠাতে পারেন:
> 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
৭. অভিনন্দন
অভিনন্দন, আপনি সফলভাবে NAT64 সাপোর্ট সহ একটি বর্ডার রাউটার সেট আপ করেছেন এবং থ্রেড এন্ড ডিভাইসগুলিতে ইন্টারনেট অ্যাক্সেস প্রদানের জন্য এটি ব্যবহার করেছেন!
আরও পড়া
- ওপেনথ্রেড গাইড
- ওপেনথ্রেড সিএলআই রেফারেন্স
- NAT64 এর জন্য OpenThread API রেফারেন্স
- আপস্ট্রিম DNS-এর জন্য OpenThread API রেফারেন্স
- DNS-এর জন্য OpenThread প্ল্যাটফর্ম বিমূর্তকরণ