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

لمحة عن هذا الدرس التطبيقي حول الترميز
schedule23 دقيقة
subjectتاريخ التعديل الأخير: 5 مايو 2025
account_circleتأليف: Song Guo, Jonathan Hui

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 (OTBR) وجهاز Thread، ثم تفعّل الاتصال بين أجهزة Thread ومضيفي IPv4 على الإنترنت وتُجري فحصًا له من خلال جهاز التوجيه الحدودي لبروتوكول OpenThread.

المُعطيات

  • كيفية إنشاء موجه حدودي OpenThread باستخدام ميزات NAT64
  • كيفية التواصل مع مضيفي IPv4 من أجهزة Thread الطرفية

المتطلبات

  • محطة عمل تعمل بنظام التشغيل Linux لإنشاء وفلاش جهاز Thread RCP وواجهة OpenThread CLI واختبار الاتصال بـ IPv4
  • جهاز Raspberry Pi لجهاز توجيه الحدود في Thread يجب أن يكون بالإمكان الوصول إلى محطة عمل Linux عبر IPv4 من هذا الجهاز.
  • جهازان لوصلات USB من طراز nRF52840 من شركة Nordic Semiconductor (أحدهما لوحدة التحكّم في الطاقة والآخر لجهاز Thread الطرفي)

مخطّط شبكة هذا الدرس التطبيقي حول الترميز:

c3cd2e081bc052fd.png

2. إعداد جهاز توجيه حدود OpenThread

إنّ أسرع طريقة لإعداد ميزة "الاستجابة على الإنترنت" هي اتّباع دليل إعداد ميزة "الاستجابة على الإنترنت".

بعد اكتمال عملية إعداد OTBR، استخدِم ot-ctl للتحقّق من تفعيل خدمة NAT64 على جهاز التوجيه الحدودي:

> nat64 state
PrefixManager: Active
Translator: Active
Done

ينشر جهاز توجيه حدودي في Thread بادئة NAT64 في بيانات شبكة Thread:

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

ستستخدم أجهزة Thread بادئة NAT64 عند التواصل مع مضيف IPv4.

3- إعداد جهاز Thread الطرفي

اتّبِع خطوة إعداد FTDs من إنشاء شبكة Thread باستخدام لوحات nRF52840 ومجموعة رموز OpenThread البرمجية لإنشاء جهاز طرفي nRF52840 CLI وفلاشه، مع إجراء تغيير على الخطوة التالية:

في إنشاء الفلاش، عليك إلحاق -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_DNS_CLIENT=ON -DOT_SRP_CLIENT=ON -DOT_ECDSA=ON

تابِع إنشاء شبكة Thread باستخدام لوحات nRF52840 ودرس تطبيقي OpenThread كما هو موضّح. بعد إعادة تحميل جهاز الطرف النهائي باستخدام صورة CLI، اتّبِع خطوات الانضمام إلى العقدة الثانية في شبكة Thread لإضافة جهاز Thread إلى شبكة Thread.

انتظِر بضع ثوانٍ بعد إعداد جهاز Thread الطرفي وتأكَّد من نجاح عملية الانضمام إلى شبكة 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.

4. التواصل مع مضيفي IPv4 من جهاز Thread الطرفي

يمكنك الآن التواصل مع المضيفين على شبكة IPv4 من الجهاز الطرفي الذي تم إعداده للتو.

إرسال طلبات صدى ICMP إلى مضيفي IPv4

من وحدة التحكّم في الحدود (CLI) لجهاز Thread الطرفي:

> 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 لهذا الجهاز باستخدام الأمر nat64 mappings:

> 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 لجهاز Thread.

يمكنك تنفيذ هذا الأمر على جهاز التوجيه الحدودي في أي وقت لمعرفة كيفية احتسابه للزيارات.

إرسال طلبات بحث نظام أسماء النطاقات إلى خوادم نظام أسماء النطاقات لبروتوكول الإنترنت (IPv4)

استخدِم dns resolve4 لتحديد اسم مضيف على شبكة IPv4. يمكن أن يكون عنوان خادم نظام أسماء النطاقات أيضًا عنوان 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

من الممكن إنشاء اتصالات بروتوكول التحكم في الإرسال (TCP) بين الجهاز النهائي والمضيفين في شبكة IPv4.

لنفترض أنّ عنوان IP الخاص بالمضيف Linux IPv4 هو 192.168.0.2.

على مضيف IPv4 في Linux، استخدِم nc للاستماع إلى اتصالات بروتوكول النقل (TCP):

$ nc -l 0.0.0.0 12345

من جهاز Thread الطرفي، يمكنك إنشاء اتصال 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

يعرض مضيف IPv4 في Linux ما يلي:

hello

يمكنك أيضًا إرسال الرسائل من مضيف IPv4 في Linux إلى جهاز Thread الطرفي. اكتب "world" واضغط على مفتاح Enter على مضيف IPv4 لنظام التشغيل Linux الذي يعمل بإصدار nc، وسيعرض جهاز Thread الطرفي ما يلي:

TCP: Received 6 bytes: world

التواصل عبر بروتوكول UDP

من الممكن التواصل باستخدام بروتوكول UDP بين أجهزة Thread والمضيفين في شبكة IPv4.

لنفترض أنّ عنوان IP الخاص بالمضيف Linux IPv4 هو 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: fd16:a3d:e170:2:0:0:c0a8:2
Done
> udp send hello
Done

يعرض مضيف IPv4 في Linux ما يلي:

hello

يمكنك أيضًا إرسال الرسائل من مضيف IPv4 في Linux إلى جهاز Thread الطرفي. اكتب "world" واضغط على مفتاح Enter على مضيف IPv4 لنظام التشغيل Linux الذي يعمل بإصدار nc، وسيعرض جهاز Thread الطرفي ما يلي:

6 bytes from fd16:a3d:e170:2:0:0:c0a8:2 12345 world

5- تفعيل/إيقاف NAT64 على جهاز توجيه الحدود

يمكنك تفعيل بروتوكول NAT64 أو إيقافه في أي وقت. استخدِم nat64 disable لإيقاف NAT64. واستخدِم nat64 state للتحقّق من حالة NAT64.

> 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

بالإضافة إلى ذلك، لم تعُد الأجهزة في شبكة Thread قادرة على الوصول إلى مضيف IPv4 من خلال جهاز التوجيه الحدودي هذا.

من وحدة التحكّم في الحدود (CLI) لجهاز Thread الطرفي:

> ping 8.8.8.8
Error 13: InvalidState

استخدِم nat64 enable لتفعيل NAT64. قد يستغرق الأمر بعض الوقت قبل أن يبدأ مدير البادئة في عرض بادئة 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

6. إعادة توجيه طلبات بحث نظام أسماء النطاقات إلى خوادم نظام أسماء النطاقات العليا

عند تفعيل NAT64 على جهاز التوجيه الحدودي، سيحاول OpenThread إعادة توجيه طلبات بحث نظام أسماء النطاقات لنطاقات الإنترنت إلى خوادم نظام أسماء النطاقات العليا.

على جهازك الطرفي، تأكَّد من أنّ خادم نظام أسماء النطاقات التلقائي هو جهاز التوجيه الحدودي:

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

يمكنك الآن إرسال طلبات بحث نظام أسماء النطاقات لنطاقات الإنترنت من الجهاز الطرفي:

> 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

7. تهانينا

نبارك لك على نجاحك في إعداد جهاز توجيه حدودي متوافق مع NAT64 واستخدامه لتوفير إمكانية الوصول إلى الإنترنت للأجهزة الطرفية التي تعمل بتقنية Thread.

مراجع إضافية

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