جهاز توجيه حدود سلسلة المحادثات - توفير إمكانية الاتصال بالإنترنت من خلال Nat64

1- المقدمة

7299534792dd9439.png

ما هي Thread؟

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

ما المقصود بـ OpenThread؟

Open المتوقّف من Google هو سلسلة برامج مفتوحة المصدر من Thread®.

ما هو جهاز توجيه حدود OpenThread؟

جهاز توجيه حدود سلسلة المحادثات (OTBR) الذي أصدرته Google هو تنفيذ مفتوح المصدر لجهاز توجيه سلسلة المحادثات.

معيار N64

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

مترجِم مترجِم إلى ترجمة 64، كجزء من جهاز توجيه الحدود OpenThread، يدعم بروتوكولات TCP وUDP وICMP (ICMPv6).

المنتجات التي ستنشئها

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

ما ستتعرَّف عليه

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

المتطلبات

  • محطة عمل على نظام التشغيل Linux من أجل إنشاء وإبراز ملف Thread NCP وواجهة سطر الأوامر (CLI) في OpenThread، واختبار اتصال IPv4.
  • جهاز Raspberry Pi 4 مزوّد بذاكرة وصول عشوائي (RAM) بسعة 4 غيغابايت لجهاز توجيه الحدود في سلسلة محادثات يمكن الوصول إلى محطة عمل Linux عبر IPv4 من هذا الجهاز.
  • جهازان

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

c3cd2e081bc052fd.png

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

اتّبِع خطوات إعداد OTBR في جهاز توجيه حدود سلسلة المحادثات - إمكانية الاتصال بموجب بروتوكول IPv6 الثنائي الاتجاه وخدمة اكتشاف نظام أسماء النطاقات المستندة إلى نظام أسماء النطاقات لإنشاء جهاز توجيه الحدود OpenThread، مع إجراء التغيير التالي:

في إنشاء وتثبيت بروتوكول OTBR، عليك إخبار النص البرمجي لتفعيل مترجم NAT64 في OpenThread عن طريق ضبط متغير البيئة NAT64 على 1 وNAT64_SERVICE على openthread. شغّل الأمر التالي قبل الخطوة:

$ export NAT64=1 NAT64_SERVICE=openthread

يمكنك المتابعة من خلال الدرس التطبيقي حول ترميز جهاز توجيه سلاسل المحادثات - اتصال IPv6 الثنائي الاتجاه واكتشاف الخدمة المستندة إلى نظام أسماء النطاقات كما هو مكتوب. بعد إنشاء شبكة سلسلة محادثات، يمكنك التحقُّق من نشر جهاز توجيه الحدود لبادئة NAT64 من خلال أوامر OpenLI CLI.

أولاً، عليك التأكّد من أنّ جهاز التوجيه الحدودي قيد التشغيل، وأن (N64) مفعَّل على جهاز توجيه الحدود:

$ sudo ot-ctl state
leader
Done
$ sudo ot-ctl nat64 enable
Done
$ sudo ot-ctl nat64 state
PrefixManager: Active
Translator: Active
Done

من المفترض أن نتمكّن من رؤية أن OTBR يعمل كرائد في سلسلة محادثات، وهناك بادئة NAT64 (fd4c:9574:3720:2:0:0::/96 في هذه الحالة) ضمن بيانات شبكة Thread.

$ 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. إعداد جهاز نهاية سلسلة المحادثات

اتّبِع إعداد خطوة 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_JOINER=ON -DOT_COMMISSIONER=ON -DOT_DNS_CLIENT=ON -DOT_SRP_CLIENT=ON -DOT_ECDSA=ON

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

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

من واجهة سطر الأوامر (CLI) على جهاز نهاية سلسلة المحادثات:

> 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 لمضيف مضيف IPv4 على نظام التشغيل Linux هو 192.168.0.2.

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

$ nc -l 0.0.0.0 12345

من جهاز إنهاء سلسلة المحادثات، أنشِئ اتصال TCP وأرسِل الرسائل إلى مضيف IPv4 على نظام التشغيل 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

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

TCP: Received 6 bytes: world

التواصل عبر UDP

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

لنفترض أنّ عنوان IP لمضيف مضيف IPv4 على نظام التشغيل Linux هو 192.168.0.2.

يمكنك استخدام nc للاستماع إلى اتصالات UDP:

$ nc -u -l 0.0.0.0 12345

من جهاز نهاية سلسلة المحادثات، أنشِئ اتصال UDP وأرسل الرسائل إلى مضيف IPv4 على نظام التشغيل Linux:

> 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

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

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 عبر جهاز توجيه الحدود هذا.

من واجهة سطر الأوامر (CLI) على جهاز نهاية سلسلة المحادثات:

> 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-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 واستخدمته لتوفير الاتصال بالإنترنت على أجهزة نهاية سلاسل المحادثات.

مواصلة القراءة

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