1 المقدمة
سعيد هو أداة التي تم إنشاؤها من قبل مختبرات عش لتزامن خفيفة الوزن من بنى الشبكات المحاكاة. برنامج Happy مفيد لتطوير واختبار شبكات المنطقة المنزلية لإنترنت الأشياء.
مع Happy ، يمكنك:
- اختبر بروتوكولات الشبكة وبرامج التنفيذ الموزعة الأخرى على جهاز تطوير Linux واحد دون استخدام أجهزة جهاز إنترنت الأشياء
- قم بإجراء اختبار وظيفي آلي عبر الشبكة
- قم بتشغيل عدة شبكات متوازية ومتزامنة على نفس النظام لتحسين إنتاجية الاختبار
في هذا Codelab، سوف تتعلم كيفية البدء مع سعيد، فضلا عن أساسيات نسج لأجهزة تقنيات عمليات. تنفيذ نسج عليك هو استخدام OpenWeave ، وهو نسخة مفتوحة المصدر الصادرة عن عش.
ماذا ستتعلم
- كيف نبني Happy و OpenWeave
- كيفية إنشاء شبكة محاكاة إنترنت الأشياء يدويًا
- كيفية إدارة طبولوجيا مخصصة
- كيفية توصيل شبكة Happy محاكاة بالإنترنت
- أساسيات النسج
ماذا ستحتاج
- جهاز Linux ، مادي أو افتراضي
- عميل Git أو cli
- بايثون 2.7
- فهم أساسي لمفاهيم الشبكات والتوجيه
2. ابدأ
قم بتثبيت سلسلة الأدوات والتبعيات
لإنشاء Happy and Weave ، تأكد من أن لديك سلسلة أدوات مدعومة وأن جميع التبعيات مثبتة.
$ sudo apt-get update $ sudo apt-get install -y autotools-dev build-essential git lcov \ libdbus-1-dev libglib2.0-dev libssl-dev \ libudev-dev make python2.7 software-properties-common \ python-setuptools bridge-utils python-lockfile \ python-psutil $ sudo apt-get install -y --force-yes gcc-arm-none-eabi $ sudo apt-get update -qq
احصل على الكود المصدري
استنساخ مستودعات Happy و OpenWeave Git من سطر الأوامر:
$ cd ~ $ git clone https://github.com/openweave/happy.git $ git clone https://github.com/openweave/openweave-core.git
تثبيت Happy
من الدليل الجذر السعيد ، قم بتثبيت Happy:
$ cd ~/happy $ make
تحقق سعيد التثبيت
يجب الآن الوصول إلى الأوامر السعيدة من سطر الأوامر:
$ happy-state State Name: happy NETWORKS Name Type State Prefixes NODES Name Interface Type IPs
قم بتثبيت OpenWeave
من الدليل الجذر OpenWeave ، قم بتثبيت OpenWeave:
$ cd ~/openweave-core $ make -f Makefile-Standalone
تكوين Happy مع OpenWeave
لاستخدام OpenWeave مع Happy ، تحتاج إلى إعلام Happy بمكان العثور على تثبيت Weave. تحديث التكوين سعيد مع المسار ل /src/test-apps
ضمن بناء OpenWeave الخاص بك:
$ happy-configuration weave_path ~/openweave-core/build/x86_64-unknown-linux-gnu/src/test-apps
قم بتأكيد التكوين:
$ happy-configuration User Happy Configuration weave_path ~/openweave-core/build/x86_64-unknown-linux-gnu/src/test-apps
تحقق من تثبيت OpenWeave
يمكن الوصول إلى أوامر النسج المطلوبة في Codelab هذا من سطر الأوامر:
$ weave-fabric-add -h weave-fabric-add creates a weave fabric. weave-fabric-add [-h --help] [-q --quiet] [-i --id <FABRIC_ID>] Example: $ weave-fabric-add 123456 Creates a Weave Fabric with id 123456 return: 0 success 1 fail
إذا كنت تحصل على خطأ weave-fabric-add: command not found
، تحديث برنامج PATH
متغير البيئة مع المسار تستخدم لثنائيات سعيد:
$ export PATH=$PATH:~/openweave-core/src/test-apps/happy/bin
3. طوبولوجيا الخاص بك الأولى
لنقم بإنشاء طبولوجيا ثلاثية العقد التالية باستخدام Happy.
هذا الهيكل هو مثال لشبكة منزلية بسيطة (HAN). في HAN هذا ، يتم توصيل عقدتين معًا في شبكة خيط ، وتتصل إحدى هذه العقد بثالثة عبر Wi-Fi. يمكن أيضًا توصيل هذه العقدة بجهاز توجيه لاسلكي في المنزل لتوفير اتصال بالإنترنت لشبكة HAN بأكملها. المزيد عن هذا لاحقًا.
أولاً ، قم بإنشاء العقد الثلاثة:
$ happy-node-add 01ThreadNode $ happy-node-add 02BorderRouter $ happy-node-add 03WiFiNode
دعنا نتأكد من وجودها:
$ happy-node-list 01ThreadNode 02BorderRouter 03WiFiNode
لنقم الآن بإنشاء بعض الشبكات:
$ happy-network-add ThreadNetwork thread $ happy-network-add WiFiNetwork wifi
تحقق من وجود الشبكات:
$ happy-network-list ThreadNetwork WiFiNetwork
تحقق من الحالة السعيدة:
$ happy-state State Name: happy NETWORKS Name Type State Prefixes ThreadNetwork thread UP WiFiNetwork wifi UP NODES Name Interface Type IPs 01ThreadNode 02BorderRouter 03WiFiNode
لا يكفي مجرد إحضار شبكة - علينا إضافة عقد إلى الشبكات. باتباع مخطط الهيكل الخاص بنا ، أضف كل عقدة إلى الشبكة (الشبكات) المناسبة:
$ happy-node-join 01ThreadNode ThreadNetwork $ happy-node-join 02BorderRouter ThreadNetwork $ happy-node-join 02BorderRouter WiFiNetwork $ happy-node-join 03WiFiNode WiFiNetwork
علما بأن 02BorderRouter
تم إضافتها إلى كل من ThreadNetwork
و WiFiNetwork
. هذا لأنه كموجه حدودي داخل HAN الخاص بنا ، فإن هذه العقدة تربط الشبكتين الفرديتين معًا.
تحقق من الحالة السعيدة. واجهات كل عقدة في الأعلى:
$ happy-state State Name: happy NETWORKS Name Type State Prefixes ThreadNetwork thread UP WiFiNetwork wifi UP NODES Name Interface Type IPs 01ThreadNode wpan0 thread 02BorderRouter wpan0 thread wlan0 wifi 03WiFiNode wlan0 wifi
تبدو طوبولوجيا لدينا الآن كما يلي:
الخطوة الأخيرة في إنشاء شبكتنا السعيدة هي تعيين عناوين IP لكل واجهة على كل عقدة. حدد بادئة IP للشبكة ، وسيقوم Happy تلقائيًا بتعيين عناوين IP لك.
نظرًا لأن بروتوكول Thread يستخدم IPv6 ، أضف بادئة IPv6 إلى شبكة مؤشر الترابط:
$ happy-network-address ThreadNetwork 2001:db8:1:2::
تحقق من الحالة السعيدة. تحتوي واجهات مؤشر الترابط في كل عقدة مؤشر ترابط على عناوين IP:
$ happy-state State Name: happy NETWORKS Name Type State Prefixes ThreadNetwork thread UP 2001:0db8:0001:0002/64 WiFiNetwork wifi UP NODES Name Interface Type IPs 01ThreadNode wpan0 thread 2001:0db8:0001:0002:3e36:13ff:fe33:732e/64 02BorderRouter wpan0 thread 2001:0db8:0001:0002:a651:3eff:fe92:6dbc/64 wlan0 wifi 03WiFiNode wlan0 wifi
بالنسبة لشبكة WiFi ، أضف بادئات IPv4 و IPv6:
$ happy-network-address WiFiNetwork 2001:db8:a:b:: $ happy-network-address WiFiNetwork 10.0.1.0
تحقق من الحالة السعيدة مرة أخرى. جميع الواجهات لديها عناوين IP ، مع اثنين لكل واجهة Wi-Fi:
$ happy-state State Name: happy NETWORKS Name Type State Prefixes ThreadNetwork thread UP 2001:0db8:0001:0002/64 WiFiNetwork wifi UP 2001:0db8:000a:000b/64 10.0.1/24 NODES Name Interface Type IPs 01ThreadNode wpan0 thread 2001:0db8:0001:0002:3e36:13ff:fe33:732e/64 02BorderRouter wpan0 thread 2001:0db8:0001:0002:a651:3eff:fe92:6dbc/64 wlan0 wifi 10.0.1.2/24 2001:0db8:000a:000b:426c:38ff:fe90:01e6/64 03WiFiNode wlan0 wifi 2001:0db8:000a:000b:9aae:2bff:fe71:62fa/64 10.0.1.3/24
هنا طوبولوجيا لدينا المحدثة:
4. اختبر الاتصال
والآن بعد أن شبكة سعيدة لدينا وتشغيلها، دعونا اختبار الاتصال به من الأزيز العقد الأخرى من 01ThreadNode
:
$ happy-ping 01ThreadNode 02BorderRouter [Ping] ping from 01ThreadNode to 02BorderRouter on address 10.0.1.2 -> 100% packet loss [Ping] ping from 01ThreadNode to 02BorderRouter on address 2001:0db8:0001:0002:a651:3eff:fe92:6dbc -> 0% packet loss [Ping] ping from 01ThreadNode to 02BorderRouter on address 2001:0db8:000a:000b:426c:38ff:fe90:01e6 -> 100% packet loss $ happy-ping 01ThreadNode 03WiFiNode [Ping] ping from 01ThreadNode to 03WiFiNode on address 2001:0db8:000a:000b:9aae:2bff:fe71:62fa -> 100% packet loss [Ping] ping from 01ThreadNode to 03WiFiNode on address 10.0.1.3 -> 100% packet loss
و happy-ping
يحاول الأمر بينغ كل عنوان IP لكل واجهة على العقدة الهدف. يمكننا تجاهل عناوين IPv4 لأن Thread يستخدم IPv6 فقط.
علما بأن واحد فقط ب IPv6 بينغ كانت ناجحة: واحد على 02BorderRouter
الصورة wpan0
واجهة، والذي هو العنوان الوحيد 01ThreadNode
يمكن أن تصل مباشرة:
فشلت عناوين IPv6 أخرى لأنه لم يتم تمكين إعادة توجيه بين wpan0
و wlan0
على 02BorderRouter
. وهكذا، 01ThreadNode
ليس لديه فكرة 03WiFiNode
موجودا، أو كيفية الوصول إليها. قام Happy بإحضار الشبكة التي تمت محاكاتها ، ولكنه لم يمكّن جميع عمليات التوجيه وإعادة التوجيه بين العقد.
أضف المسارات
لتوجيه حركة مرور IPv6 عبر HAN ، أضف المسارات المناسبة لكل عقدة في كل شبكة ، في كلا الاتجاهين (حتى يعرف ping كيفية العودة إلى العقدة المصدر).
لكل عقدة ، ستحتاج إلى معرفة:
- أقرب شبكة بوابة في هذه الحالة،
02BorderRouter
على حد سواء - الشبكة المستهدفة - أين تذهب بعد البوابة
بالنسبة لشبكة العقد الثلاث الخاصة بنا ، فإن ذلك يعطينا ما يلي:
من شبكة المصدر | إلى الشبكة المستهدفة | عبر البوابة |
| | |
| | |
ويمكن القيام بذلك بشكل فردي لكل عقدة مع happy-node-route
، ولكن من الأسهل أن نفعل ذلك لجميع العقد في كل شبكة مع happy-network-route
.
$ happy-network-route -a -i ThreadNetwork -t default -v 02BorderRouter -p 2001:db8:1:2::/64 $ happy-network-route -a -i WiFiNetwork -t default -v 02BorderRouter -p 2001:db8:a:b::/64
للحصول على تفسير من أعلام سطر الأوامر، استخدم happy-network-route -h
.
و happy-network-route
يتحول الأمر أيضا على IPv4 و IPv6 الشحن لكل عقدة، حسب الحاجة. يسمح هذا لحركة المرور بالتوجيه من واجهة إلى أخرى داخل العقدة.
الآن أعد محاولة اختبار الاتصال:
$ happy-ping 01ThreadNode 02BorderRouter [Ping] ping from 01ThreadNode to 02BorderRouter on address 10.0.1.2 -> 100% packet loss [Ping] ping from 01ThreadNode to 02BorderRouter on address 2001:0db8:0001:0002:a651:3eff:fe92:6dbc -> 0% packet loss [Ping] ping from 01ThreadNode to 02BorderRouter on address 2001:0db8:000a:000b:426c:38ff:fe90:01e6 -> 0% packet loss
تعمل كلتا أصوات IPv6! مع إعادة توجيه، فإنه يعرف كيفية الوصول إلى wlan0
واجهة. لا يزال اختبار اتصال IPv4 يفشل ، لأننا قمنا فقط بتكوين مسارات IPv6 وإعادة التوجيه (أيضًا لأن Thread لا يعمل عبر IPv4).
نظرًا لأننا أضفنا مسارات الشبكة إلى كلا الجانبين ، فلنعمل ping عبر الشبكات:
$ happy-ping 01ThreadNode 03WiFiNode [Ping] ping from 01ThreadNode to 03WiFiNode on address 2001:0db8:000a:000b:9aae:2bff:fe71:62fa -> 0% packet loss [Ping] ping from 01ThreadNode to 03WiFiNode on address 10.0.1.3 -> 100% packet loss
يعمل اختبار اتصال IPv6 بالشكل المتوقع. لديك الآن IPv6 HAN كامل الوظائف ومحاكاة.
لتمكين طريقة أكثر أمانًا وموثوقية لربط كل شيء معًا ، دعنا نضيف Weave أعلى HAN.
5. إضافة نسج
Weave عبارة عن طبقة تطبيق للشبكة توفر العمود الفقري للاتصالات الآمنة والموثوقة لمنتجات Nest. يمكننا إضافة وظائف Weave مع OpenWeave ، الإصدار المفتوح المصدر من Weave.
تطبيق نسج يسمى "النسيج". نسيج Weave عبارة عن شبكة تضم جميع عُقد HAN وخدمة Nest وأي أجهزة محمولة مشاركة في HAN. إنه يقع أعلى HAN ويسمح بتوجيه أسهل عبر تقنيات ارتباط الشبكة الأساسية المختلفة (على سبيل المثال ، Thread أو Wi-Fi).
إنشاء النسيج نسج لHAN، وذلك باستخدام fab1
باسم ID النسيج، ثم تكوين كافة العقد لنسج:
$ weave-fabric-add fab1 $ weave-node-configure
الآن بعد أن تم تكوين Weave ، تحقق من الحالة السعيدة:
$ happy-state State Name: happy NETWORKS Name Type State Prefixes ThreadNetwork thread UP 2001:0db8:0001:0002/64 WiFiNetwork wifi UP 2001:0db8:000a:000b/64 10.0.1/24 NODES Name Interface Type IPs 01ThreadNode wpan0 thread 2001:0db8:0001:0002:3e36:13ff:fe33:732e/64 fd00:0000:fab1:0006:6bca:9502:eb69:11e7/64 02BorderRouter wpan0 thread fd00:0000:fab1:0006:6a6a:f236:eb69:11e7/64 2001:0db8:0001:0002:a651:3eff:fe92:6dbc/64 wlan0 wifi fd00:0000:fab1:0001:6a6a:f236:eb69:11e7/64 10.0.1.2/24 2001:0db8:000a:000b:426c:38ff:fe90:01e6/64 03WiFiNode wlan0 wifi 2001:0db8:000a:000b:9aae:2bff:fe71:62fa/64 10.0.1.3/24 fd00:0000:fab1:0001:6b82:6e60:eb69:11e7/64
تمت إضافة كل عقدة في النسيج نسج، ولكل واجهة لديه عنوان IPv6 الجديد بدءا fd00
. للحصول على مزيد من المعلومات على النسيج نسج، استخدم weave-state
الأوامر:
$ weave-state State Name: weave NODES Name Weave Node Id Pairing Code 01ThreadNode 69ca9502eb6911e7 8ZJB5Q 02BorderRouter 686af236eb6911e7 B5YV3P 03WiFiNode 69826e60eb6911e7 L3VT3A FABRIC Fabric Id Global Prefix fab1 fd00:0000:fab1::/48
إليك الهيكل المحدث لدينا ، مع قيم Weave باللون الأزرق:
نسج القماش
هناك الكثير من المعلومات الجديدة في Weave and Happy States. بداية دعونا مع النسيج من weave-state
:
FABRIC Fabric Id Global Prefix fab1 fd00:0000:fab1::/48
استخدامات نسج بادئة ب IPv6 من fd00::/48
لكل عقدة. تسمى العناوين الموجودة في هذه المجموعة بالعناوين المحلية الفريدة وهي مخصصة للاستخدام داخل الشبكات الخاصة مثل HAN. يؤدي دمج ذلك مع معرف النسيج إلى إنشاء بادئة Weave Global الموضحة أعلاه.
نسج العقد
يتم تعيين معرف عقدة فريد لكل عقدة في نسيج Weave ، إلى جانب رمز الاقتران:
NODES Name Weave Node Id Pairing Code 01ThreadNode 69ca9502eb6911e7 8ZJB5Q 02BorderRouter 686af236eb6911e7 B5YV3P 03WiFiNode 69826e60eb6911e7 L3VT3A
يحدد معرف العقدة بشكل عام عقدة في نسيج النسج. يتم استخدام رمز الاقتران كـ "بيانات اعتماد نجار" أثناء عملية الاقتران ، وعادةً ما تتم طباعته جنبًا إلى جنب مع رمز الاستجابة السريعة للمنتج.
على سبيل المثال ، إذا نظرت إلى رمز الاستجابة السريعة الموجود على Nest Protect أو Nest Cam ، فستلاحظ سلسلة مكونة من 6 أحرف ، وغالبًا ما يشار إليها باسم Entry Key. هذا هو رمز الاقتران النسج.
يستخدم Weave مجموعة من البادئة العالمية ومعرف النسيج ومعرف العقدة لإنشاء عناوين IPv6 خاصة بالنسج لكل عقدة وواجهة في النسيج.
نسج العناوين
علما بأن هناك أربعة عناوين IPv6 جديدة في طوبولوجيا سعيد، عن البدء مع شركائنا في نسج العالمية البادئة من fd00:0000:fab1::/48
.
NODES Name Interface Type IPs 01ThreadNode wpan0 thread 2001:0db8:0001:0002:3e36:13ff:fe33:732e/64 fd00:0000:fab1:0006:6bca:9502:eb69:11e7/64 02BorderRouter wpan0 thread fd00:0000:fab1:0006:6a6a:f236:eb69:11e7/64 2001:0db8:0001:0002:a651:3eff:fe92:6dbc/64 wlan0 wifi fd00:0000:fab1:0001:6a6a:f236:eb69:11e7/64 10.0.1.2/24 2001:0db8:000a:000b:426c:38ff:fe90:01e6/64 03WiFiNode wlan0 wifi 2001:0db8:000a:000b:9aae:2bff:fe71:62fa/64 10.0.1.3/24 fd00:0000:fab1:0001:6b82:6e60:eb69:11e7/64
تستخدم بروتوكولات Weave هذه العناوين للتواصل عبر نسيج Weave ، بدلاً من عناوين IPv6 القياسية المخصصة لكل عقدة.
نسج بوابة الشبكة
تحتاج عقد النسج على شبكة خيط إلى معرفة مكان الخروج من تلك الشبكة. توفر بوابة Weave network gateway ـ الموجودة عادةً على جهاز توجيه Thread Border ـ هذه الوظيفة.
في نموذج الهيكل الخاص بنا ، لنقم بتعيين عقدة BorderRouter كبوابة شبكة Weave:
$ weave-network-gateway ThreadNetwork 02BorderRouter
يضيف هذا الأمر طريقا من كافة العقد الموضوع إلى الشبكة الفرعية النسيج نسج ( fd:0:fab1::/48
) عن طريق BorderRouter
العقدة واجهة الموضوع ( wpan0
)، التي تمكن كل عقدة الموضوع للوصول إلى أي عقدة نسج خارج شبكة الموضوع. هذا هو مماثل ل happy-network-route
القيادة كنا في وقت سابق، ولكن محددة إلى طرق النسيج نسج.
6. صيانة الطوبولوجيا
ما يجعل Happy قويًا هو كيفية إدارته بسهولة لكل عمليات الإعداد والتفكيك لطوبولوجيا محاكاة.
احفظ الهيكل السعيد لاستخدامه لاحقًا:
$ happy-state -s codelab.json
هذه الأماكن ملف JSON مع طوبولوجيا الكامل في الجذر ~/
المجلد. ملف JSON هو نسخة من دولة سعيدة الحالية، التي وجدت في ~/.happy_state.json
.
بمجرد الحفظ ، احذف الهيكل الحالي:
$ happy-state-delete
هذا حذف كافة النطاقات الشبكة والتكوينات ذات الصلة وجدت في ~/.happy-state.json
الملف. تحقق happy-state
و weave-state
لتأكيد تكوين فارغة:
$ happy-state State Name: happy NETWORKS Name Type State Prefixes NODES Name Interface Type IPs $ weave-state State Name: weave NODES Name Weave Node Id Pairing Code FABRIC Fabric Id Global Prefix
لإعادة تحميل تكوين محفوظ ، استخدم أحد الأمرين:
-
happy-state-load
- لا يدعم المساعد نسج -
weave-state-load
- دعامات المساعد نسج
حتى إذا تضمن الهيكل الخاص نسج، دائما استخدام weave-state-load
الأوامر بحيث يتم تطبيق النسيج نسج والتكوين المرتبطة بها.
إعادة تحميل طبولوجيا Happy المحفوظة:
$ weave-state-load codelab.json
تحقق من جميع الحالات لتأكيد التحميل الناجح:
$ happy-state State Name: happy NETWORKS Name Type State Prefixes ThreadNetwork thread UP 2001:0db8:0001:0002/64 WiFiNetwork wifi UP 2001:0db8:000a:000b/64 10.0.1/24 NODES Name Interface Type IPs 01ThreadNode wpan0 thread 2001:0db8:0001:0002:eef6:a0ff:feca:6697/64 fd00:0000:fab1:0006:6bca:9502:eb69:11e7/64 02BorderRouter wpan0 thread fd00:0000:fab1:0006:6a6a:f236:eb69:11e7/64 2001:0db8:0001:0002:5e53:bbff:fe05:484b/64 wlan0 wifi 2001:0db8:000a:000b:2e61:fdff:fed9:4fbc/64 fd00:0000:fab1:0001:6a6a:f236:eb69:11e7/64 10.0.1.2/24 03WiFiNode wlan0 wifi fd00:0000:fab1:0001:6b82:6e60:eb69:11e7/64 10.0.1.3/24 2001:0db8:000a:000b:5e8e:c9ff:fed2:bdd1/64 $ weave-state State Name: weave NODES Name Weave Node Id Pairing Code 01ThreadNode 69ca9502eb6911e7 8ZJB5Q 02BorderRouter 686af236eb6911e7 B5YV3P 03WiFiNode 69826e60eb6911e7 L3VT3A FABRIC Fabric Id Global Prefix fab1 fd00:0000:fab1::/48
تم توفير عدد من الهياكل المحددة مسبقًا في المستودع السعيد ، بتنسيق shell-script و JSON. العثور عليها في ~/happy/topologies
.
يأتي OpenWeave أيضًا مع طبولوجيا Happy محددة مسبقًا لأغراض الاختبار. العثور عليها في ~/openweave-core/src/test-apps/happy/topologies/standalone
.
7. كيف يعمل
يستخدم Happy مساحات أسماء شبكات Linux لمحاكاة الطبولوجيا المعقدة. عادةً ما يتم تطبيق تكوين الشبكة عبر نظام التشغيل Linux بالكامل. تسمح لك مساحات أسماء الشبكات بتقسيم تكوينات الشبكة بحيث يكون لكل مساحة اسم مجموعتها الخاصة من الواجهات وجداول التوجيه.
كل عقدة وشبكة في Happy عبارة عن مساحة اسم شبكة ، بينما الروابط بينها عبارة عن واجهات شبكة.
على سبيل المثال ، باستخدام طوبولوجيا لدينا:
دعونا نرى ما هي مساحات الأسماء التي أنشأتها Happy لهذا:
$ ip netns list happy004 happy003 happy002 happy001 happy000
إذا قمت بالتدقيق في netns
المقطع من الملف JSON الدولة سعيد، يمكنك ان ترى ما عقد وشبكات كل مساحة اسم يتوافق مع:
$ happy-state -j | grep "netns" -A 5 "netns": { "01ThreadNode": "000", "02BorderRouter": "001", "03WiFiNode": "002", "ThreadNetwork": "003", "WiFiNetwork": "004",
سجلات وقت التشغيل
الأوامر الصادرة إلى العقد هي أوامر طرفية أساسية يتم تنفيذها من داخل مساحة اسم كل عقدة. طريقة سهلة لمعرفة ذلك هي تمكين سجلات وقت التشغيل السعيدة.
افتح نافذة طرفية ثانية وقم بتشغيل السجلات ، وستعمل باستمرار في هذه النافذة:
$ happy-state -l
ارجع إلى النافذة الأولى وقم بتشغيل أداة اتصال سعيدة:
$ happy-ping 01ThreadNode 02BorderRouter
تحقق من أحدث إدخالات السجل في نافذة المحطة الثانية. من المفترض أن ترى سطرًا مثل هذا في السجلات:
DEBUG [Driver:CallCmd():416] Happy [happy]: > sudo ip netns exec happy000 ping6 -c 1 2001:0db8:0001:0002:5e53:bbff:fe05:484b
و happy-ping
الأمر ليس أكثر من سعيد تشغيل ping6
الأمر في happy000
مساحة ( 01ThreadNode
).
أدخل عقدة
استخدام happy-shell
لتشغيل الأوامر غير سعيدة كما لو بتسجيل الدخول إلى واحدة من العقد (النطاقات الشبكة):
$ happy-shell 01ThreadNode root@01ThreadNode:#
يتم تشغيل الأجهزة التي تمت محاكاتها داخل كل مساحة اسم ، ولديهم فقط حق الوصول إلى تكوين الشبكة المحدد من خلال Happy.
تحقق من تكوين الواجهة للعقدة. سيكون هذا مختلفًا عن التكوين على مستوى نظام التشغيل الخاص بك ويجب أن يعكس ما هو مدرج في الحالة السعيدة:
root@01ThreadNode:# ifconfig lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:65536 Metric:1 RX packets:1 errors:0 dropped:0 overruns:0 frame:0 TX packets:1 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1 RX bytes:152 (152.0 B) TX bytes:152 (152.0 B) wpan0 Link encap:Ethernet HWaddr ec:f6:a0:ca:66:97 inet6 addr: fd00:0:fab1:6:6bca:9502:eb69:11e7/64 Scope:Global inet6 addr: 2001:db8:1:2:eef6:a0ff:feca:6697/64 Scope:Global inet6 addr: fe80::eef6:a0ff:feca:6697/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:32 errors:0 dropped:0 overruns:0 frame:0 TX packets:26 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:2832 (2.8 KB) TX bytes:2348 (2.3 KB)
استخدام exit
لمغادرة مساحة العقدة:
root@01ThreadNode:# exit
8. الاتصال بخدمة
من خلال فهم كيفية استخدام Happy لمساحات شبكة Linux ، قد تدرك الآن أنه من الممكن توصيل شبكة Happy محاكاة بالإنترنت والوصول إلى العناوين العامة من داخل عقد محاكاة. هذا مفيد لتوصيل أجهزتك المحاكاة بخدمة حقيقية (مثل Nest Service over Weave).
الخدمة في Weave عبارة عن بنية تحتية قائمة على السحابة تربط عقد HAN بنموذج بيانات ، وتوفر الوصول عن بُعد ، وتنفذ وحدات تحكم ذكية لإنشاء نظام بيئي شامل.
يمكن تمثيل الخدمة بطريقتين أساسيتين مع Happy:
- كخدمة محاكاة في مساحة اسم الشبكة الخاصة بها (العقدة السعيدة)
- كخدمة سحابية حقيقية على الإنترنت
قدمت طبولوجيا محددة مسبقا في ~/happy/topologies
كمثال على كل سيناريو الخدمة.
خدمة محاكاة على عقدة سعيدة
قم بإزالة أي طبولوجيا سعيدة موجودة:
$ happy-state-delete
تؤكد دولة فارغة مع happy-state
و weave-state
الأوامر.
قم بتحميل طبولوجيا محددة مسبقًا بنقطة الوصول (AP) وعقد الخدمة:
$ weave-state-load ~/happy/topologies/thread_wifi_ap_service.json
تحقق من حالات Happy and Weave لتأكيد الهيكل. في هذا الهيكل، onhub
هو AP، بينما cloud
هي خدمة محاكاة. ملاحظة كلاهما متصلة Internet
شبكة من نوع wan
:
$ happy-state State Name: happy NETWORKS Name Type State Prefixes HomeThread thread UP 2001:0db8:0111:0001/64 HomeWiFi wifi UP 2001:0db8:0222:0002/64 10.0.1/24 Internet wan UP 192.168.100/24 NODES Name Interface Type IPs BorderRouter wpan0 thread 2001:0db8:0111:0001:f624:13ff:fe4a:6def/64 fd00:0000:fab1:0006:1ab4:3000:0000:0005/64 wlan0 wifi 10.0.1.2/24 fd00:0000:fab1:0001:1ab4:3000:0000:0005/64 2001:0db8:0222:0002:9e31:97ff:fe73:29f0/64 ThreadNode wpan0 thread 2001:0db8:0111:0001:c237:fbff:fecc:b082/64 fd00:0000:fab1:0006:1ab4:3000:0000:0009/64 cloud eth0 wan 192.168.100.3/24 onhub wlan0 wifi 10.0.1.3/24 2001:0db8:0222:0002:3266:20ff:fe98:6ee2/64 eth0 wan 192.168.100.2/24 $ weave-state State Name: weave NODES Name Weave Node Id Pairing Code BorderRouter 18B4300000000005 AAA123 ThreadNode 18B4300000000009 AAA123 FABRIC Fabric Id Global Prefix fab1 fd00:0000:fab1::/48
نفق نسج
يربط نفق Weave قماش Weave بخدمة ما. هذا مسار آمن ينقل رسائل IPv6 UDP بين HAN والخدمة. في هذا الهيكل، و BorderRouter
العقدة هي بوابة شبكة نسج، الذي يعمل بمثابة نقطة نهاية النفق على HAN.
إنشاء نفق النسج:
$ weave-tunnel-start BorderRouter cloud
أعد فحص الحالة السعيدة. يجب أن تشاهد واجهة نفق جديدة مع عنوان IPv6 على نسج على cloud
العقدة:
NODES Name Interface Type IPs cloud service-tun0 tun fd00:0000:fab1:0005:1ab4:3002:0000:0011/64 eth0 wan 192.168.100.3/24
يمكنك الآن تنفيذ الأمر ping بنجاح بين العقد على Weave fabric والبادئة العامة Weave الخاصة بالخدمة:
$ happy-ping ThreadNode cloud [Ping] ping from ThreadNode to cloud on address fd00:0000:fab1:0005:1ab4:3002:0000:0011 -> 0% packet loss
خدمة سحابية حقيقية على الإنترنت
قم بإزالة أي طبولوجيا سعيدة موجودة:
$ happy-state-delete
تؤكد دولة فارغة مع happy-state
و weave-state
الأوامر.
قم بتحميل طبولوجيا محددة مسبقًا باستخدام عقدة نقطة وصول (AP):
$ weave-state-load ~/happy/topologies/thread_wifi_ap_internet.json
في هذا الهيكل، onhub
هو AP. تحقق من الحالة السعيدة. انها مماثلة لطوبولوجيا السابق، من دون Internet
شبكة و cloud
العقدة:
$ happy-state State Name: happy NETWORKS Name Type State Prefixes HomeThread thread UP 2001:0db8:0111:0001/64 HomeWiFi wifi UP 2001:0db8:0222:0002/64 10.0.1/24 NODES Name Interface Type IPs BorderRouter wpan0 thread 2001:0db8:0111:0001:ca3f:71ff:fe53:1559/64 fd00:0000:fab1:0006:1ab4:3000:0000:0006/64 wlan0 wifi 2001:0db8:0222:0002:32e7:dfff:fee2:107a/64 fd00:0000:fab1:0001:1ab4:3000:0000:0006/64 10.0.1.2/24 ThreadNode wpan0 thread 2001:0db8:0111:0001:c2fb:97ff:fe04:64bd/64 fd00:0000:fab1:0006:1ab4:3000:0000:000a/64 onhub wlan0 wifi 10.0.1.3/24 2001:0db8:0222:0002:3a3c:8dff:fe38:999b/64 $ weave-state State Name: weave NODES Name Weave Node Id Pairing Code BorderRouter 18B4300000000006 AAA123 ThreadNode 18B430000000000A AAA123 FABRIC Fabric Id Global Prefix fab1 fd00:0000:fab1::/48
نظرًا لأن كل عقدة سعيدة عبارة عن مساحة اسم شبكة ، يتم تقسيمها افتراضيًا من الإنترنت العام. اختبر ذلك عن طريق إدخال عقدة سعيدة وأخذ اختبار الاتصال على عنوان إنترنت عام. سنستخدم 8.8.8.8
، واحدة من google.com في عناوين IPv4.
$ happy-shell onhub root@onhub:# ping -c2 8.8.8.8 connect: Network is unreachable
لربط onhub
العقدة إلى شبكة الإنترنت، فإنه يجب سدها إلى أن واجهة على مستوى التكوين نظام لينكس.
اخرج من العقدة:
root@onhub:# exit
تحديد واجهة للاتصال الإنترنت الخاص بك مع route
الأوامر:
$ route Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface default 192.168.1.0 0.0.0.0 UG 0 0 0 em1
العثور على default
الطريق. هذا هو اتصال الإنترنت لجهاز Linux الخاص بك. و Iface
يشير العمود الذي واجهة يتم استخدامه لهذا الاتصال. في المثال أعلاه، فإنه من em1
.
استخدام happy-internet
لانشاء الجسر، وذلك باستخدام واجهة لطريق الافتراضي. ل --isp
العلم، استخدم اسم واجهة دون زائدة أرقام. في هذا المثال، انها em
. إذا الواجهة الافتراضية الخاصة بك eth1
، و --isp
أن العلم يكون eth
.
$ happy-internet --node onhub --interface em1 --isp em --seed 249
لن يكون هناك تغيير ملحوظ في happy-state
الانتاج، ولكن onhub
يجب أن يكون عقدة الاتصال بشبكة الإنترنت. دعنا نعود إلى العقدة ونتحقق مما يلي:
$ happy-shell onhub root@onhub:# ping -c2 8.8.8.8 PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data. 64 bytes from 8.8.8.8: icmp_seq=1 ttl=56 time=1.81 ms 64 bytes from 8.8.8.8: icmp_seq=2 ttl=56 time=1.81 ms --- 8.8.8.8 ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 1001ms rtt min/avg/max/mdev = 1.814/1.816/1.819/0.042 ms
النجاح!
DNS
العقد السعيدة لا تحتوي على إمكانيات DNS مضمنة. إذا حاولت تنفيذ الأمر ping google.com ، فسوف يفشل:
root@onhub:# ping -c2 google.com ping: unknown host google.com
لحسن الحظ ، يوفر Happy دعمًا لـ DNS. اخرج من العقدة وابحث عن خوادم DNS لجهاز Linux الخاص بك. تأكد من استخدام الواجهة الافتراضية المناسبة:
root@onhub:# exit $ nmcli dev list iface em1 | grep domain_name_servers DHCP4.OPTION[13]: domain_name_servers = 172.16.255.1 172.16.255.153 172.16.255.53
استخدام هذه العناوين DNS مع happy-dns
:
$ happy-dns 172.16.255.1 172.16.255.153 172.16.255.53
الآن محاولة الأزيز google.com من داخل onhub
العقدة:
$ happy-shell onhub root@onhub:# ping -c2 google.com PING google.com (64.233.191.113) 56(84) bytes of data. 64 bytes from ja-in-f113.1e100.net (64.233.191.113): icmp_seq=1 ttl=46 time=36.9 ms 64 bytes from ja-in-f113.1e100.net (64.233.191.113): icmp_seq=2 ttl=46 time=37.0 ms --- google.com ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 1001ms rtt min/avg/max/mdev = 36.978/36.995/37.013/0.193 ms
الخروج من onhub
عقدة عند الانتهاء من ذلك:
root@onhub:# exit
نفق نسج
مثل الخدمة المحاكاة ، يجب إنشاء نفق نسج بين HAN المحاكى في Happy والخدمة. باستخدام خدمة سحابية حقيقية ، استخدم عنوان IP أو عنوان URL للخدمة في إعداد النفق. على سبيل المثال:
$ weave-tunnel-start BorderRouter mycloud.service.com
9. التنظيف
من المهم دائمًا تنظيف الهياكل السعيدة عند الانتهاء منها ، لتجنب المشكلات المتعلقة بتكوين شبكة Linux.
إذا قمت بتمكين دعم DNS في طوبولوجيا الخاص بك، إزالته من قبل rerunning هذا الأمر مع -d
(حذف) العلم لأول مرة. يجب تشغيل هذا قبل إزالة أي عقد سعيدة ، لضمان تحديث تكوين الشبكة بشكل صحيح.
$ happy-dns -d 172.16.255.1 172.16.255.153 172.16.255.53
بعد ذلك ، احذف الحالة السعيدة:
$ happy-state-delete
من حين لآخر ، قد تبقى بعض ملفات الحالة بعد حذف الحالة. إذا واجهت مشاكل ولا يعمل المتوقع كما سعيد، وحذف الدولة مع happy-state-delete
ومن ثم استخدم الأوامر التالية لفرض أي تنظيف المتبقية:
$ ip netns | xargs -I {} sudo ip netns delete {} $ rm -rf ~/.*state.json $ rm -rf ~/.*state.json.lock
يجب أن يعود جهازك إلى تكوين الشبكة الطبيعي.
10. مبروك!
أنت تعرف الآن:
- كيفية استخدام تطبيق Happy لمحاكاة شبكات منطقة منزلك الخاصة بإنترنت الأشياء
- كيفية توصيل طبولوجيا Happy بشبكة الإنترنت
- أساسيات Weave via OpenWeave ، نسخة نيست مفتوحة المصدر من Weave
الخطوات التالية
بناء على Codelab هذا ، جرب التمارين التالية:
- قم بإنشاء هيكل أكبر مع عقد متعددة في كل شبكة خيط وشبكة Wi-Fi ، وقم بإنشاء اتصال بين جميع العقد
- إنشاء برنامج نصي باش تحميل طوبولوجيا عبر
happy-state-load
أوweave-state-load
- استكشاف الأوامر السعيدة الأخرى، مثل
happy-traceroute
وhappy-process-*
قراءة متعمقة
تحقق openweave.io لمجموعة متنوعة من المراجع، بما في ذلك: