جهاز توجيه حدود Thread - توفير الاتصال بالإنترنت من خلال NAT64

1. مقدمة

7299534792dd9439.png

ما هي شبكة 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

طوبولوجيا الشبكة الخاصة بالدرس التطبيقي حول الترميز:

c3cd2e081bc052fd.png

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 النهائية.

محتوى إضافي للقراءة

المستندات المرجعية