1. مقدمة
ما هي شبكة Thread؟
Thread هو بروتوكول للشبكات اللاسلكية المتداخلة يستند إلى بروتوكول الإنترنت (IP) ويتيح إجراء الاتصالات الآمنة من جهاز إلى آخر ومن جهاز إلى آخر في السحابة الإلكترونية. يمكن أن تتكيّف شبكات سلاسل المحادثات مع التغييرات في الطوبولوجيا لتجنُّب حدوث أخطاء في نقطة واحدة.
ما هو OpenThread؟
OpenThread الذي طرحته Google هو نظام مفتوح المصدر لـ Thread®.
ما هو جهاز توجيه الحدود OpenThread؟
OpenThread Border Router (OTBR) الذي طرحته Google هو تطبيق مفتوح المصدر لجهاز Thread Border Router.
NAT64
NAT64 هي آلية تمكّن المضيفين في الشبكات التي تعتمد على بروتوكول IPv6 فقط من الوصول إلى الموارد في شبكات IPv4. بوابة NAT64 هي أداة ترجمة بين بروتوكولات IPv4 وبروتوكولات IPv6.
يتوافق مترجم NAT64، كجزء من جهاز توجيه الحدود OpenThread، مع ترجمة بروتوكولات TCP وUDP وICMP (ICMPv6).
ما الذي ستقوم ببنائه
في هذا الدرس التطبيقي حول الترميز، ستُعِدّ جهاز توجيه الحدود OpenThread وجهاز Thread، ثم تتيح الاتصال بين أجهزة Thread ومضيفي IPv4 على الإنترنت باستخدام جهاز توجيه حدود OpenThread.
ما ستتعرَّف عليه
- طريقة تصميم جهاز توجيه الحدود OpenThread باستخدام ميزات NAT64
- كيفية الاتصال بمضيفي IPv4 من الأجهزة التابعة لـ Thread
المتطلبات
- يشير ذلك المصطلح إلى محطة عمل في Linux، لإنشاء وتثبيت برنامج NCP Thread وOpenThread CLI، واختبار اتصال IPv4.
- جهاز Raspberry Pi 4 مع ذاكرة وصول عشوائي (RAM) بسعة 4 غيغابايت لجهاز توجيه الحدود Thread يجب أن تتوفّر إمكانية الوصول إلى محطة عمل Linux عبر IPv4 من هذا الجهاز.
- لوحتان Nordic تعليقconductor nRF52840 DK
طوبولوجيا الشبكة الخاصة بالدرس التطبيقي حول الترميز:
2. إعداد جهاز توجيه حدود OpenThread
يُرجى اتّباع خطوة إعداد OTBR في جهاز توجيه حدود Thread - الاتصال الثنائي الاتجاه عبر IPv6 وخدمة اكتشاف الخدمة المستند إلى نظام أسماء النطاقات لتصميم جهاز توجيه حدود OpenThread، مع التغيير التالي:
في قسم إنشاء وتثبيت OTBR، يجب ضبط النص البرمجي لتفعيل مترجم NAT64 في OpenThread من خلال ضبط متغيّر البيئة NAT64
على 1
وNAT64_SERVICE
على openthread
. شغِّل الأمر التالي قبل الخطوة:
$ export NAT64=1 NAT64_SERVICE=openthread
يمكنك المتابعة من خلال الدرس التطبيقي حول ترميز جهاز توجيه حدود سلسلة التعليمات - اتصال IPv6 الثنائي الاتجاه وخدمة اكتشاف الخدمة المستندة إلى نظام أسماء النطاقات كما هو مكتوب. بعد إنشاء شبكة Thread، يمكنك التأكّد من أنّ جهاز توجيه الحدود ينشر بادئة NAT64 من خلال أوامر OpenThread CLI.
أولاً، تأكَّد من أنّ جهاز توجيه الحدود يعمل بشكل سليم، ومن تفعيل NAT64 على جهاز توجيه الحدود:
$ sudo ot-ctl state leader Done $ sudo ot-ctl nat64 enable Done $ sudo ot-ctl nat64 state PrefixManager: Active Translator: Active Done
يُفترض أن نتمكن من معرفة أن OTBR تعمل كقائد Thread وأن هناك بادئة NAT64 (fd4c:9574:3720:2:0:0::/96
في حالتنا) في بيانات Thread Network:
$ 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
ستستخدم أجهزة Thread بادئة NAT64 عند الاتصال بمضيف IPv4.
3- إعداد جهاز نهاية Thread
اتّبِع الخطوات ضمن Set up the FTDs (إعداد FTDs) في عملية إنشاء شبكة Thread باستخدام لوحات nRF52840 والدرس التطبيقي حول ترميز OpenThread لإنشاء جهاز نهائي nRF52840 CLI وإطلاقه، مع إجراء تغيير في الخطوة التالية:
في Build and flash، عليك إلحاق -DOT_DNS_CLIENT=ON
و-DOT_SRP_CLIENT=ON
و-DOT_ECDSA=ON
بسطر الأوامر عند استدعاء script/build
:
$ 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
تابِع قراءة المقالة إنشاء شبكة Thread باستخدام لوحات nRF52840 والدرس التطبيقي حول ترميز OpenThread كما هو مكتوب. بعد أن يتم وميض الجهاز النهائي بصورة واجهة سطر الأوامر، اتّبِع خطوات جهاز توجيه حدود Thread - الاتصال الثنائي الاتجاه عبر IPv6 وخدمة استكشاف الخدمة المستندة إلى نظام أسماء النطاقات لإعداد جهاز نهاية Thread.
انتظِر بضع ثوانٍ بعد إعداد جهاز نهاية Thread وتحقَّق مما إذا تم الانضمام إلى شبكة 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. التواصل مع مضيفي IPv4 من جهاز Thread النهائي
يمكنك الآن التواصل مع المضيفين على شبكة IPv4 من الجهاز النهائي الذي أعددته للتو.
إرسال طلبات ارتداد ICMP إلى مضيفي IPv4
من واجهة سطر الأوامر لجهاز 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 لهذا الجهاز من خلال الأمر nat64 mappings
:
$ 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 لجهاز Thread.
يمكنك تشغيل هذا الأمر على موجه الحدود في أي وقت لمعرفة طريقة احتساب حركة المرور.
إرسال طلبات بحث نظام أسماء النطاقات إلى خوادم نظام أسماء النطاقات IPv4
استخدِم dns resolve4
لحل اسم المضيف على شبكة IPv4. يمكن أن يكون عنوان خادم نظام أسماء النطاقات أيضًا عنوان 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
الاتصال عبر TCP
يمكن إنشاء اتصالات TCP بين الجهاز النهائي والمضيفين في شبكة IPv4.
لنفترض أنّ عنوان IP لمضيف الإصدار 4 من نظام التشغيل Linux هو 192.168.0.2
.
في مضيف Linux IPv4، استخدِم nc
للاستماع إلى اتصالات TCP:
$ nc -l 0.0.0.0 12345
من جهاز Thread النهائي، أنشئ اتصال بروتوكول التحكم بالنقل وأرسِل الرسائل إلى مضيف الإصدار 4 من نظام التشغيل Linux:
> 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
مخرجات مضيف IPv4 في Linux:
hello
يمكنك أيضًا إرسال رسائل من مضيف الإصدار 4 من نظام التشغيل Linux إلى الجهاز النهائي لسلسلة المحادثات. اكتب "العالم" واضغط على Enter في مضيف الإصدار 4 من نظام التشغيل Linux الذي يعمل بنظام التشغيل nc
، وسيعرض الجهاز النهائي Thread ما يلي:
TCP: Received 6 bytes: world
التواصل عبر بروتوكول UDP
يمكن الاتصال باستخدام بروتوكول UDP بين أجهزة Thread والمضيفين في شبكة IPv4.
لنفترض أنّ عنوان IP لمضيف الإصدار 4 من نظام التشغيل Linux هو 192.168.0.2
.
يمكنك استخدام nc
للاستماع إلى اتصالات UDP:
$ nc -u -l 0.0.0.0 12345
من جهاز Thread النهائي، أنشئ اتصال UDP وأرسِل الرسائل إلى مضيف 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
مخرجات مضيف IPv4 في Linux:
hello
يمكنك أيضًا إرسال رسائل من مضيف الإصدار 4 من نظام التشغيل Linux إلى الجهاز النهائي لسلسلة المحادثات. اكتب "العالم" واضغط على Enter في مضيف الإصدار 4 من نظام التشغيل Linux الذي يعمل بنظام التشغيل nc
، وسيعرض الجهاز النهائي Thread ما يلي:
6 bytes from fd4c:9574:3720:2:0:0:c0a8:2 12345 world
5- تبديل NAT64 على جهاز توجيه الحدود
يمكنك تفعيل NAT64 أو إيقافها في أي وقت. استخدِم nat64 disable
لإيقاف NAT64. واستخدِم nat64 state
للتحقق من حالة NAT64.
$ 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
كذلك، لم يعُد بإمكان الأجهزة في شبكة Thread الوصول إلى مضيف IPv4 عبر جهاز توجيه الحدود هذا.
من واجهة سطر الأوامر لجهاز Thread:
> ping 8.8.8.8 Error 13: InvalidState
استخدِم nat64 enable
لتفعيل NAT64. قد يستغرق الأمر بعض الوقت قبل أن يبدأ مدير البادئة في الإعلان عن بادئة 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 إعادة توجيه استعلامات نظام أسماء النطاقات لنطاقات الإنترنت إلى خوادم DNS الرئيسية.
يتوافق خادم DNS-SD الداخلي مع هذه الوظيفة، لذا عليك التأكّد من تفعيل خادم DNS-SD.
$ 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 حتى يرسل طلبات بحث نظام أسماء النطاقات إلى جهاز توجيه الحدود:
> 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 النهائية.
محتوى إضافي للقراءة
- أدلة OpenThread
- مرجع واجهة سطر الأوامر OpenThread
- مرجع واجهة برمجة التطبيقات OpenThread API لبروتوكول NAT64
- مرجع واجهة برمجة التطبيقات OpenThread API لنظام أسماء النطاقات الرئيسي
- تجريد منصة OpenThread لنظام أسماء النطاقات