1. הקדמה
שמח הוא כלי שנוצר על ידי מעבדות קן עבור תזמור קל של טופולוגיות רשת מדומה. Happy שימושי לפיתוח ובדיקה של רשתות IoT ביתיות.
עם Happy, אתה יכול:
- בדוק פרוטוקולי רשת ותוכניות הפעלה מבוזרות אחרות על מכונת פיתוח לינוקס אחת ללא שימוש בחומרת מכשירי IoT
- בצע בדיקות פונקציונליות אוטומטיות ברשת
- הפעל מספר רשתות מקבילות במקביל על אותה מערכת כדי לשפר את תפוקת הבדיקות
בשנת Codelab זה, תלמד איך להתחיל עם שמח, כמו גם את היסודות של Weave למכשירי IOT. יישום Weave תשתמש הוא OpenWeave , גרסת קוד פתוח שוחררה מבית Nest.
מה תלמד
- איך לבנות Happy ו-OpenWeave
- כיצד ליצור באופן ידני רשת IoT מדומה
- כיצד לנהל טופולוגיות מותאמות אישית
- כיצד לחבר רשת Happy מדומה לאינטרנט
- היסודות של Weave
מה אתה צריך
- מכונת לינוקס, פיזית או וירטואלית
- Git client או 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, התקן את 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
פקודות Weave הדרושות ב- 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 זה, שני צמתים מחוברים יחד ברשת Thread, ואחד מאותם צמתים מתחבר לשלישי באמצעות 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
הטופולוגיה שלנו נראית כעת כך:
השלב האחרון בהעלאת רשת ה-Happy שלנו הוא הקצאת כתובות IP לכל ממשק בכל צומת. ציין את קידומת ה-IP עבור רשת, ו-Happy מקצה עבורך באופן אוטומטי כתובות IP.
מכיוון שפרוטוקול Thread משתמש ב-IPv6, הוסף קידומת IPv6 לרשת Thread:
$ happy-network-address ThreadNetwork 2001:db8:1:2::
בדוק את מצב האושר. לממשקי ה-Thread בכל צומת Thread יש כתובות 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. בדוק את הקישוריות
עכשיו רשת Happy שלנו היא ולהפעלתו, בואו לבדוק את הקישוריות שלה על ידי ביצוע פינג צומת האחרים מן 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, הוסף את המסלולים המתאימים לכל צומת בכל רשת, בשני הכיוונים (כדי שהפינג ידע לחזור לצומת המקור).
עבור כל צומת, תצטרך לדעת:
- הרשת הקרובה שער-במקרה זה,
02BorderRouter
עבור שניהם - רשת היעד - לאן ללכת אחרי השער
עבור רשת שלושת הצמתים שלנו, זה נותן לנו את הדברים הבאים:
מ-Source Network | ל-Target Network | דרך שער |
| | |
| | |
ניתן לעשות זאת בנפרד עבור כל צומת עם 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).
מכיוון שהוספנו נתיבי רשת לשני הצדדים, בואו נבצע פינג בין רשתות:
$ 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 עובד כצפוי. כעת יש לך HAN IPv6 מדומה, מתפקד במלואו.
כדי לאפשר דרך בטוחה ואמינה יותר לחבר הכל ביחד, בואו נוסיף את Weave על גבי ה-HAN.
5. הוסף Weave
Weave היא שכבת יישומי רשת המספקת את עמוד השדרה המאובטח והאמין לתקשורת עבור מוצרי Nest. אנו יכולים להוסיף פונקציונליות של Weave עם OpenWeave, גרסת הקוד הפתוח של Weave.
יישום של Weave נקרא "בד". מארג Weave הוא רשת הכוללת את כל צמתי ה-HAN, שירות Nest וכל המכשירים הניידים המשתתפים ב-HAN. הוא יושב על גבי ה-HAN ומאפשר ניתוב קל יותר על פני טכנולוגיות קישור הרשת השונות (לדוגמה, Thread או Wi-Fi).
צור במרקם Weave לה.א.נ. שלך, באמצעות fab1
כמזהה בד, ואז להגדיר את כל הצמתים עבור Weave:
$ 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
כל צומת נוספה במרקם Weave, וכל ממשק יש כתובת IPv6 החדש החל fd00
. כדי לקבל מידע נוסף על בד Weave, להשתמש 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 ו-Happy. התחילה בואו עם הבד מן weave-state
:
FABRIC Fabric Id Global Prefix fab1 fd00:0000:fab1::/48
שימושים Weave קידומת IPv6 של fd00::/48
עבור כל צומת. כתובות בבלוק זה נקראות Unique Local Addresses והן מיועדות לשימוש בתוך רשתות פרטיות כגון HAN. שילוב זה עם מזהה הבד יוצר את הקידומת העולמית של Weave המוצגת למעלה.
ארוג צמתים
לכל צומת בבד Weave מוקצה מזהה צומת ייחודי, יחד עם קוד זיווג:
NODES Name Weave Node Id Pairing Code 01ThreadNode 69ca9502eb6911e7 8ZJB5Q 02BorderRouter 686af236eb6911e7 B5YV3P 03WiFiNode 69826e60eb6911e7 L3VT3A
מזהה הצומת מזהה באופן גלובלי צומת במארג ה-Weave. קוד ההתאמה משמש כ"אישור מצרף" במהלך תהליך ההתאמה, ובדרך כלל מודפס לצד קוד QR של מוצר.
לדוגמה, אם תסתכל על קוד ה-QR של Nest Protect או Nest Cam, תבחין במחרוזת בת 6 תווים, המכונה לעתים קרובות מפתח הכניסה. זהו קוד ה-Weave Pairing.
Weave משתמשת בשילוב של הקידומת הגלובלית, מזהה הבד ומזהה הצומת כדי ליצור כתובות IPv6 ספציפיות ל-Weave עבור כל צומת וממשק במארג.
שזור כתובות
שים לב כי ישנם ארבעה כתובות IPv6 חדש הטופולוגיה שמח, כל מתחיל עם קידומת גלובל Weave שלנו 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 שער רשת
צמתים לארוג ברשת Thread צריכים לדעת היכן לצאת מרשת זו. שער רשת Weave - בדרך כלל בנתב גבול חוטים - מספק פונקציונליות זו.
בטופולוגיה לדוגמה שלנו, הבה נועד את הצומת BorderRouter כשער הרשת של Weave:
$ weave-network-gateway ThreadNetwork 02BorderRouter
פקודה זו מוסיפה נתיב מכל הצמתים אשכול לרשת המשנה בד Weave ( fd:0:fab1::/48
) באמצעות BorderRouter
ממשק אשכול של הצומת ( wpan0
), המאפשרת כל צומת אשכול להגיע לכל צומת Weave מעבר לרשת אשכול. זה משול happy-network-route
פקוד השתמשנו קודם לכן, אך הם ייחודיים מסלולי בד Weave.
6. תחזוקת טופולוגיה
מה שהופך את Happy לעוצמתי כל כך הוא כיצד היא מנהלת בקלות את כל ההגדרות והפירוק של טופולוגיה מדומה.
שמור את הטופולוגיה של Happy לשימוש מאוחר יותר:
$ happy-state -s codelab.json
מקומות זה קובץ JSON עם הטופולוגיה מוחלטת השורש שלך ~/
תיקייה. קובץ JSON הוא העתק של המדינה Happy הנוכחי שלך, אשר נמצא ב ~/.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 -
weave-state-load
- תומך תוסף Weave
אז אם הטופולוגיה שלך כולל Weave, תמיד להשתמש weave-state-load
פקוד כך בד Weave והתצורה הקשורים מוחלת.
טען מחדש את הטופולוגיה השמורה של 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
מספר טופולוגיות מוגדרות מראש סופקו במאגר ה-Happy, הן בפורמט shell-script והן בפורמט JSON. מצא אותם ~/happy/topologies
.
OpenWeave מגיע גם עם טופולוגיות Happy המוגדרות מראש למטרות בדיקה. מצא אותם ~/openweave-core/src/test-apps/happy/topologies/standalone
.
7. איך זה עובד
Happy משתמש במרחבי שמות של רשת לינוקס כדי לדמות טופולוגיות מורכבות. בדרך כלל, תצורת רשת חלה על כל מערכת ההפעלה לינוקס. מרחבי שמות ברשת מאפשרים לך לחלק תצורות רשת כך שלכל מרחב שמות יש סט ממשקים וטבלאות ניתוב משלו.
כל צומת ורשת ב-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.
בדוק את תצורת הממשק עבור הצומת. זה יהיה שונה מהתצורה של מערכת ההפעלה שלך וצריך לשקף את מה שרשום במצב 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 משתמש במרחבי שמות של רשת לינוקס, כעת אתה עשוי להבין שאפשר לחבר רשת Happy מדומה לאינטרנט ולגשת לכתובות ציבוריות מתוך צמתים מדומה. זה שימושי לחיבור המכשירים המדומים שלך לשירות אמיתי (כמו Nest Service over Weave).
השירות ב-Weave הוא תשתית מבוססת ענן המחברת צמתי HAN למודל נתונים, מספקת גישה מרחוק ומטמיעה בקרים חכמים ליצירת מערכת אקולוגית מקיפה.
ניתן לייצג את השירות בשתי דרכים עיקריות עם Happy:
- כשירות מדומה במרחב שמות הרשת שלו (צומת שמח)
- כשירות ענן אמיתי באינטרנט
מוגדר מראש טופולוגיות ניתנו ב ~/happy/topologies
כדוגמא מתרחיש שירות.
שירות מדומה על צומת Happy
הסר כל טופולוגיות Happy קיימות:
$ happy-state-delete
אשר מדינה ריקה עם happy-state
ואת weave-state
פקודות.
טען טופולוגיה מוגדרת מראש עם נקודת גישה (AP) וצמתי שירות:
$ weave-state-load ~/happy/topologies/thread_wifi_ap_service.json
בדוק את המצבים Happy ו-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
הצומת הוא השער לרשת Weave, המתפקד כנקודת הסיום מנהרה על האן.
צור את מנהרת Weave:
$ weave-tunnel-start BorderRouter cloud
בדוק שוב את המצב המאושר. אתה צריך לראות ממשק מנהרה חדשה עם כתובת IPv6 Weave על 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
כעת תוכל לבצע פינג בהצלחה בין צמתים במארג ה-Weave לבין הקידומת העולמית 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 קיימות:
$ 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
מכיוון שכל צומת Happy הוא מרחב שמות של רשת, הם מחולקים מהאינטרנט הציבורי כברירת מחדל. בדוק זאת על ידי הזנת צומת Happy ופינג כתובת אינטרנט ציבורית. נשתמש 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
המסלול. זהו חיבור האינטרנט עבור מכונת הלינוקס שלך. 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 מובנות. אם תנסה לעשות פינג ל-google.com, זה נכשל:
root@onhub:# ping -c2 google.com ping: unknown host google.com
למרבה המזל, Happy מספקת תמיכה ב-DNS. צא מהצומת ומצא את שרתי ה-DNS עבור מחשב הלינוקס שלך. הקפד להשתמש בממשק ברירת המחדל המתאים:
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
מנהרה לארוג
כמו השירות המדומה, יש להקים מנהרת Weave בין ה-HAN המדומה ב-Happy לבין השירות. עם שירות ענן אמיתי, השתמש בכתובת ה-IP או בכתובת האתר של השירות בהגדרת המנהרה. לדוגמה:
$ weave-tunnel-start BorderRouter mycloud.service.com
9. ניקיון
חשוב לנקות תמיד טופולוגיות שמחות כשתסיים איתם, כדי למנוע בעיות בתצורת רשת הלינוקס שלך.
אם תאפשר תמיכה DNS בטופולוגיה שלך, להסיר אותו על ידי והרצה מחדש הפקודה שעם -d
דגל (מחק) הראשון. יש להפעיל את זה לפני הסרת צומת Happy, כדי להבטיח שתצורת הרשת מעודכנת כהלכה.
$ happy-dns -d 172.16.255.1 172.16.255.153 172.16.255.53
לאחר מכן, מחק את המצב שמח:
$ happy-state-delete
לפעמים, קבצי מצב מסוימים עשויים להישאר לאחר מחיקת מצב. אם אתה נתקלת בבעיות ו Happy אינו פועל כצפוי, למחוק את המדינה עם happy-state-delete
ולאחר מכן להשתמש בפקודות הבאות כדי לכפות שום דבר נקי נותר:
$ ip netns | xargs -I {} sudo ip netns delete {} $ rm -rf ~/.*state.json $ rm -rf ~/.*state.json.lock
המחשב שלך אמור לחזור לתצורת הרשת הרגילה שלו.
10. מזל טוב!
עכשיו אתה יודע:
- כיצד להשתמש ב-Happy כדי לדמות את רשתות ה-IoT הביתיות שלך
- כיצד לחבר טופולוגיות Happy לאינטרנט
- היסודות של Weave באמצעות OpenWeave, גרסת הקוד הפתוח של Nest של Weave
הצעדים הבאים
בהתבסס על Codelab זה, נסה את התרגילים הבאים:
- צור טופולוגיה גדולה יותר עם מספר צמתים בכל רשת Thread ו-Wi-Fi, וצור קישוריות בין כל הצמתים
- צור סקריפט bash כדי לטעון את הטופולוגיה באמצעות
happy-state-load
אוweave-state-load
- חקור פקודות Happy אחרים, כגון
happy-traceroute
וhappy-process-*
לקריאה נוספת
בדוק openweave.io עבור מגוון רחב של אזכור, כולל: