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

‫1. مقدمة

7299534792dd9439.png

ما هو بروتوكول Thread؟

‫Thread هو بروتوكول شبكة لاسلكية منخفضة الطاقة مستند إلى بروتوكول الإنترنت (IP) ويتيح إجراء اتصالات آمنة بين الأجهزة وبين الأجهزة والسحابة الإلكترونية. يمكن أن تتكيّف شبكات Thread مع التغييرات في البنية لتجنُّب الأعطال في نقطة واحدة.

ما هي OpenThread؟

‫OpenThread الذي أطلقته Google هو تطبيق مفتوح المصدر لبروتوكول Thread®.

ما هو جهاز توجيه حدود شبكة OpenThread؟

OpenThread Border Router (OTBR) الذي أصدرته Google هو تطبيق مفتوح المصدر لجهاز توجيه حدود شبكة Thread.

NAT64

‫NAT64 هي آلية تتيح للمضيفين في شبكات IPv6 فقط الوصول إلى الموارد في شبكات IPv4. بوابة NAT64 هي أداة ترجمة بين بروتوكولات IPv4 وبروتوكولات IPv6.

يتيح برنامج NAT64 المترجم، كجزء من OpenThread Border Router، ترجمة بروتوكولات TCP وUDP وICMP (ICMPv6).

ما ستنشئه

في هذا الدرس التطبيقي حول الترميز، ستعمل على إعداد جهاز توجيه حدود OpenThread (OTBR) وجهاز Thread، ثم ستفعّل عملية التواصل بين أجهزة Thread ومضيفي الإصدار الرابع من بروتوكول الإنترنت (IPv4) على الإنترنت وتتحقّق منها من خلال جهاز توجيه حدود OpenThread.

أهداف الدورة التعليمية

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

المتطلبات

  • محطة عمل Linux لإنشاء وتثبيت جهاز توجيه حدود Thread، وواجهة سطر الأوامر OpenThread، واختبار اتصال IPv4
  • جهاز Raspberry Pi لجهاز توجيه حدود شبكة Thread يجب أن يكون جهاز Linux المكتبي متاحًا عبر الإصدار الرابع من بروتوكول الإنترنت (IPv4) من هذا الجهاز.
  • جهازان من Nordic Semiconductor nRF52840 USB Dongles (أحدهما لجهاز RCP والآخر لجهاز Thread النهائي)

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

c3cd2e081bc052fd.png

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

أسرع طريقة لإعداد OTBR هي اتّباع دليل إعداد OTBR.

بعد اكتمال عملية إعداد 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.

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

3- إعداد جهاز طرفي لشبكة Thread

اتّبِع خطوة إعداد أجهزة FTD في برنامج Build a Thread network with nRF52840 boards and OpenThread codelab لإنشاء جهاز طرفي nRF52840 CLI وتثبيت ذاكرة ROM عليه، مع إجراء تغيير على الخطوة التالية:

في إنشاء وتثبيت ذاكرة ROM، عليك إضافة -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 التطبيقي كما هو مكتوب. بعد أن يتم تثبيت صورة واجهة سطر الأوامر على الجهاز النهائي، اتّبِع الخطوات الواردة في ربط العُقدة الثانية بشبكة Thread لإضافة جهاز Thread إلى شبكة Thread.

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

تأكَّد من أنّ بيانات الشبكة تطابق البيانات الواردة من OTBR.

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

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

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

من واجهة سطر الأوامر لجهاز 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 لحل اسم مضيف على شبكة الإصدار 4 من بروتوكول الإنترنت. يمكن أن يكون عنوان خادم نظام أسماء النطاقات أيضًا عنوان 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.

على مضيف Linux IPv4، استخدِم 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

يُنتج مضيف Linux IPv4 ما يلي:

hello

يمكنك أيضًا إرسال رسائل من مضيف Linux IPv4 إلى جهاز طرفي Thread. اكتب "world" واضغط على Enter على مضيف Linux IPv4 الذي يشغّل 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

يُنتج مضيف Linux IPv4 ما يلي:

hello

يمكنك أيضًا إرسال رسائل من مضيف Linux IPv4 إلى جهاز طرفي Thread. اكتب "world" واضغط على Enter على مضيف Linux IPv4 الذي يشغّل 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، لن ينشر الجهاز بادئة 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 عبر جهاز توجيه الحدود هذا.

من واجهة سطر الأوامر لجهاز 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.

يمكنك الآن إرسال طلبات بحث لنظام أسماء النطاقات (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

7. تهانينا

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

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

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