מבנה כוכב
הקדמה:
מעבדה זו יכולה לעמוד בפני עצמה למי שכבר יש לו היכרות עם סביבת הענן של GCP. מי שנתקל במושגים שאינו מכיר או בהוראות שלא ברור לו כיצד לבצע, יכול להתחיל מהמעבדה הראשונה בסדרה. כל המעבדות התפרסמו כמאמרים בלינקדאין שלי, והן בנויות בשלבים. אין במעבדה זו נושא שאינו מוסבר, שלא עלה והוסבר קודם. במעבדה הראשונה בסדרה נוצרו 4 רשתות בשני פרויקטים שונים, כאשר הוסבר כיצד ליצור מבנה רשת בין שלושת הרשתות שהוקמו בפרוייקט הראשון. המטרה הראשית של מעבדה זו, היא לאחד את כל ארבעת הרשתות הללו למבנה רשת אחד בתצורת כוכב.
שאר הנושאים שנלמדים במעבדה זו, נרכשים כחלק מהתחנות בדרך להשגת מטרה זו.
במעבדה זו ניתן לרכוש את הידע ולהתאמן בנושאים הבאים:
1. יבוא מערכות הפעלה מותאמות ויחודיות אל סביבת GCP.
2. התקנת PfSense Firewall
3. ניתוב ברשתות GCP.
4. יצירת רשת במבנה כוכב – Star Topology (או Hub & Spoke).
על הפרק:
במעבדות קודמות למדנו כיצד ליצור מכונות וירטואליות בסביבת GCP. אנחנו יכולים להשתמש בלוח הניהול דרך הדפדפן או בממשק הפקודה כדי ליצור מכונות מתוך המאגר ש-GCP מציעה. אבל לפעמים נרצה לבנות מכונה מתוך מערכת הפעלה שאיננה ברשימה.
כאן נלמד שתי שיטות לייבא מערכת הפעלה שאיננה ברשימה.
לצורך ביצועה של אחת המשימות בהמשך, נצטרך להשתמש בדפדפן מתוך מכונה שנמצאת בתוך הרשת שלנו בענן. היות ולא ניתן להתקין מכונות ווינדוס בחשבון שבתקופת התנסות ולא נפתחה בו אפשרות תשלומים, נשתמש במערכת הפעלה של לינוקס שיש בה GUI.
ברשימה הקיימת ב-GCP אין לינוקס עם GUI. כמובן, ניתן להתקין סביבת GUI על שרת לינוקס שהוקם מתוך הרשימה, אבל אחת המטרות במעבדה זו היא לייבא מערכת הפעלה שאיננה ברשימה.
השיטה הראשונה שנלמד – היא דרך יצירת קובץ OVA.
יצירת OVA של מכונה ב-Oracle VirtualBox:
נלך לאתר של Ubuntu כדי להוריד Ubuntu Desktop.
יצירת מכונה:
לחיצה על לחצן ההורדה תשמור ISO בתיקיית ההורדה במחשב.
כעת ניצור קובץ OVA של המכונה מתוך Oracle VirtualBox, שזו סביבת וירטואליזציה שאפשר להתקין בחינם על המחשב.
פותחים את VirtualBox (להתקין אם לא מותקן), ואז בתפריט – Machine >> New.
בחלון שנפתח נבחר שם – ubuntu-desktop, מיקום לאחסן בו את הקבצים של המכונה הוירטואלית, ונבחר את קובץ ה-ISO שהורדנו. התוכנה תדע לבד שזו הפצה מסוג לינוקס. אם לא, לסמן. Next.
כעת נבחר משתמש וסיסמה שאיתם נתחבר למערכת לאחר ההתקנה.
צריך להקצות משאבים למכונה הוירטואלית. כדי לתת התקנה זריזה, להקצות כמה שיותר משאבים (להשאיר כמה שצריך כדי שהמחשב הפיזי ימשיך לעבוד). Next.
20GB דיסק, Next, Finnish.
המכונה תתחיל לעלות, ואז יעלו מסכי ההתקנה. לסיים את ההתקנה עד שהמערכת עולה.
יצוא מכונה:
בתחתית החלון, קליק ימני על הסמל של הדיסק, ובתפריט שקופץ לבחור להסיר את הדיסק מהמכונה (את ה-ISO).
בתפריט Machin לבחור Shutdown.
כאשר המכונה כבויה, לחזור שוב לתפריט: Machine >> Export to OCI.
לוודא שהפורמט בגרסה 1.0 – Open Virtualization Format.
לבחור מיקום שאליו מייצאים את הקובץ OVA, לוותר על כתובות ה-MAC, לסמן כתיבת קובץ Manifast. Next.
כעת יש חלון של Appliance settings. אפשר לוותר על כרטיס הקול ובקר USB. ללחוץ Finish.
יש לנו קובץ OVA.
יצירת דלי אחסון עבור קבצי מערכות הפעלה:
כדי ליבא את מערכת ההפעלה, נצטרך שקובץ ה-OVA ישב בתוך סביבת GCP. נשתמש בדלי אחסון.
בתפריט הניהול של GCP (שלושת הפסים) ללכת ל-Cloud Storage, Buckets. בדף שנפתח ללחוץ למעלה על CREATE.
לתת שם יחודי – נגיד, yos-pfsense. Continue.
לבחור Region – נבחר את אזור תל אביב: me-west1.
אז נלחץ CREATE.
תקפוץ חלונית אישור, לאשר בלי לשנות. הדלי נוצר ונפתח הדף שלו.
כעת נרצה להעלות לשם את ה-OVA. יש לחצן Upload Files, להעלות ולחכות שיסתיים.
כשהקובץ מסיים לעלות, לוחצים עליו כדי להכנס למאפיינים שלו. שם יש קישור עבור gsutil. להעתיק ולהדביק בצד בפנקס רשימות.
חשבון שירות עבור בניית מכונה מתוך OVA:
בתפריט הראשי ללכת אל APIs & Services >> Enable APIs & services.
ללחוץ למעלה ENABLE APIS AND SERVICES, ובדף שנפתח לשים בחיפוש cloud build api. לבחור כשעולה בתוצאה, בדף שנפתח ללחוץ ENABLE.
– Cloud Build משמש בחלק גדול מהמקרים עבור בניה של חבילות תוכנה, וכן Images עבור קונטיינרים. במקרה שלנו, הוא משמש כדי לבנות Image מתוך ה-OVA.
חשבון השירות שמבצע את ההמרות, בונה את ה-Image ומוציא ממנו מכונה פועלת. חשבון זה צריך כל מיני הרשאות. כאן נגדיר חשבון שירות יעודי עבור פעולה זו, כדי לא לתת את כל ההרשאות האלה לחשבון ברירת המחדל שמפעיל מכונות בפרוייקט.
כעת ניצור חשבון שירות ליצירת מכונות מתוך OVA:
1. בתפריט הראשי ללכת אל IAM & Admin >> Service Accounts.
2. ללחוץ למעלה CREATE SERVICE ACCOUNT.
3. לתת לו שם ova-builder, וללחוץ CREATE AND CONTINUE.
4. עכשיו צריך לתת לחשבון הרשאות. ללחוץ על התפריט איפה שכתוב Select a role.
5. כעת נצטרך לתת לו הרשאות כדי שיוכל לגשת לדלי שבו מאוחסן ה-OVA, כדי לבנות ממנו מכונה וירטואלית וליצור עבורה Token לאימות המכונה מול GCP. בחלון שנפתח, יש למעלה שורת חיפוש. נכניס כל שם של Role מהרשימה הבאה, וכשהוא יעלה בסינון, לבחור אותו. נצטרך לתת לו את ההרשאות הבאות:
– Compute Admin
– Service Account Token Creator
– Service Account user
– Compute Storage Admin
– Storage Object Viewer
6. ללחוץ DONE.
יצירת מכונה מתוך ה-OVA:
על מנת ליצור VM Instance מתוך ה-OVA שהעלינו לדלי, נשתמש ב-CLI. נכניס ב-PowerShell ISE את הפקודה הבאה:
gcloud compute instances import "ubuntu-desktop" `
--source-uri="gs://yos-pfsense/ubuntu-desktop.ova" `
--no-address `
--network="vpc-1" `
--private-network-ip="10.0.10.50" `
--subnet="subnet-1" `
--zone="me-west1-a" `
--project="yostest-1" `
--log-location="gs://yos-pfsense/" `
--service-account="ova-builder@yostest-1.iam.gserviceaccount.com" `
--compute-service-account="ova-builder@yostest-1.iam.gserviceaccount.com" `
--os="ubuntu-2204" `
--no-guest-environment
– לשים לב שיש כאן את ה-Flag של no-address, שאומר שהמכונה לא תקבל כתובת חיצונית. המכונה כן תצטרך בהמשך כתובת חיצונית, אבל רציתי להציג את ה-Flag הזה. תוכלו להשמיט אותו, או להוסיף כתובת חיצונית אחר כך.
– חשוב לראות שיש כאן Flag של no guest environment שאומר למערכת להקים את המכונה כ-BlackBox. שזה אומר Appliance סגור ש-GCP לא מנהל אותו מבפנים ולא מרים אותו עם ה-Ops Agent שלו כברירת מחדל. ניתן מאוחר יותר לנסות להתקין את ה-Ops Agent, אבל אנחנו לא נתעכב על זה.
יקח בערך שעה עד שהמכונה תעלה, ואז להכנס לדף של המכונה ולפתוח את הטרמינל שלה בלחצן CONNECT TO SERIAL CONSOLE.
הגדרת המכונה:
כשהטרמינל יעלה (במסך שחור, לוחצים אנטר להציג תוכן), נצטרך להתחבר. נכניס את המשתמש והסיסמה שהגדרנו כשיצרנו את המכונה ב-VirtualBox.
אבל המשתמש הזה חסר הרשאות Root, אז דבר ראשון נצטרך לתת לו אותן.
דבר ראשון נתחבר כ-root. בשביל זה נזין את הפקודה su, וכשתעלה דרישה לסיסמה, נכניס את הסיסמה של המשתמש שלנו.
לאחר מכן נוסיף את המשתמש לקבוצת sudo באמצעות הפקודה הבאה:
usermod -aG sudo yosi
כמובן שבמקום yosi, כל אחד מכניס את המשתמש שהוא בחר.
ברגע שהפקודה נקלטה, מזינים פעמיים את הפקודה exit. פעם אחת כדי לצאת מהמשתמש root, ופעם שניה כדי לצאת מהמשתמש שלנו.
אז מתחברים שוב עם המשתמש שלנו, והפעם יש לו הרשאות root. ככה שאם הוא יבצע פקודת sudo או ילחץ sudo -i, הסיסמה שלו תעביר את הפקודה בהצלחה.
נתחבר למשתמש root עם הפקודה sudo -i.
כעת נשבית את חומת האש הפנימית של המכונה באמצעות הפקודות:
systemctl disable ufw.service
systemctl stop ufw.service
במצב רגיל לא כדאי להשבית לגמרי את חומת האש, אבל אנחנו בסביבת מעבדה ורוצים שילך לנו קל יותר.
התחברות באמצעות כתובת חיצונית:
להכנס לדף של המכונה ב-GCP, לערוך את הגדרות המכונה ולתת לה כתובת רשת חיצונית. אין צורך בכיבוי.
לאחר מכן נתקין כלי שבאמצעותו נוכל להתחבר מרחוק לשולחן העבודה של המכונה.
ב-CLI של המכונה נזין את הפקודות הבאות:
wget https://dl.google.com/linux/direct/chrome-remote-desktop_current_amd64.deb
sudo apt-get install --assume-yes ./chrome-remote-desktop_current_amd64.deb
אם עולה השגיאה הבאה:
N: Download is performed unsandboxed as root as file '/root/chrome-remote-desktop_current_amd64.deb' couldn't be accessed by user '_apt'. - pkgAcquire::Run (13: Permission denied)
להזין את הפקודות הבאות ולבצע שוב את ההתקנה:
sudo chown -Rv _apt:root /var/cache/apt/archives/partial/
sudo chmod -Rv 700 /var/cache/apt/archives/partial/
לאחר ההתקנה, נאתחל את המכונה ונתחבר שוב עם המשתמש שלנו, בלי לעלות למשתמש root.
ממזערים את חלון הטרמינל, חוזרים לדפדפן ושם פותחים את הקישור הבא.
ומפה מגדירים התחברות למכונה:
1. יהיה כתוב לנו "הגדר מחשב אחר". נלחץ "להתקנה".
2. נתבקש להתקין את התוכנה במחשב היעד, אבל כבר התקנו. נלחץ "הבא".
3. נקבל הודעה שצריך להגדיר הרשאה, נלחץ "מתן הרשאה".
4. נקבל קוד שאותו נדביק בטרמינל.
5. נתבקש להזין קוד PIN לאמת את הזהות שלנו כאשר נתחבר למכונה שהגדרנו לנו בכרום.
6. בדפדפן, נעבור למעלה בצד ימין ל"גישה מרוחקת", ושם נראה את המכונה שהגדרנו.
7. נזין קוד PIN להתחברות.
8. אם יעלה חלון בצד שמאל שיבדוק לאיזו צורת Session נרצה להתחבר, נבחר Default.
9. להשאיר את החיבור למכונה פתוח, נחזור אליו בהמשך.
עיבוד התקנת pfsense ל-Image של GCP:
ללכת לדף ההורדות של pfsense.
לבחור בהתקנה כמו בתמונה, קליק ימני על DOWNLOAD ולבחור "העתקת כתובת קישור:
להדביק בצד בפנקס רשימות, זה יראה בערך ככה:
https://frafiles.netgate.com/mirror/downloads/pfSense-CE-memstick-serial-2.7.0-RELEASE-amd64.img.gz
לחזור ללוח הניהול של GCP, ושם למעלה מימין ללחוץ על Activate Cloud Shell:
אותו Cloud Shell זו מכונת לינוקס שרצה מאחורי הקלעים, וניתן בה למשתמש נפח אחסון של 5GB כדי לאפשר לבצע פעולות, כמו זו שנבצע עכשיו.
מיד נראה שפעולה שכזו מתוך CloudShell הרבה יותר מהירה מאשר להוריד את הקובץ למחשב שלנו, ומשם להעלות אותו לענן.
נוריד את ההתקנה של pfsense למכונה, ומיד נחלץ אותה לקובץ:
curl https://frafiles.netgate.com/mirror/downloads/pfSense-CE-memstick-serial-2.7.0-RELEASE-amd64.img.gz | gunzip > disk.raw
חשוב לזכור:
- לתת לדיסק בפנים את השם disk.raw! GCP מצפה לכזה שם דיסק בדיוק, אחרת זה לא יעבוד כשננסה להפוך את זה ל-Image.
ואז נארכב שוב את הקובץ בפורמט ש-GCP מכיר ומאפשר ליצור ממנו Images:
tar -Sczf pfSense-CE-memstick-serial-2.7.0-RELEASE-amd64.img.tar.gz disk.raw
ועכשיו נוכל להעלות את הקובץ לדלי האחסון שיצרנו קודם עבור קבצים של מערכות הפעלה:
gsutil cp pfSense-CE-memstick-serial-2.7.0-RELEASE-amd64.img.tar.gz gs://yos-pfsense
מיד תקפוץ הודעה שתשאל אם אנחנו מסמיכים את ה-Cloud Shell לבצע את הפעולה על הדלי, ללחוץ Authorize ולחכות שהפעולה תסתיים.
יצירת ה-Image:
1. Compute Engine >> Images
2. ללחוץ CREATE IMAGE למעלה
3. לתת לו את השם pfsense
4. מקור (Source) – Cloud Storage file
5. בשדה למטה ללחוץ על BROWS, לבחור את הדלי שבו אחסנו את הקובץ – במקרה שלנו yos-pfsense, ושם לבחוץ את הקובץ שהעלינו.
6. במיקום, לבחור Regional במחוז תל אביב.
7. ללחוץ CREATE
יצירת מכונה מתוך ה-Image:
1. Compute Engine >> VM Instances
2. CREATE INSTANCE
3. לתת את השם – pfsense
4. לוודא שהמכונה נוצרת במחוז תל אביב.
5. סוג מכונה – e2-micro.
6. לשנות את ה-Image של המכונה מברירת המחדל לזה שיצרנו כרגע – באזור של Boot disk ללחוץ על -Change, לעבור ללשונית CUSTOM IMAGES, לבחור pfsense, לבחור גודל דיסק של 10GB וללחוץ למטה על SELECT.
7. תחת Firewall לסמן Allow HTTPS traffic וגם Allow HTTP traffic.
8. תחת Networking, לתת למכונה את תגית הרשת pfsense.
9. לסמן את תיבת הסימון ב-Enable IP forwarding.
10. לתת למכונה שני כרטיסי רשת, את הראשון להציב ב-VPC-2 עם הכתובת 10.0.20.150, את השני להציב ב-vpc-1 עם הכתובת 10.0.10.150. ללא כתובות חיצוניות.
11. להוסיף דיסק ריק בן 10 GB ולקרוא לו pfsens-boot.
12. ליצור את המכונה.
התקנת pfsense על המכונה:
1. כניסה לדף המכונה
2. לחיצה על CONNECT TO SERIAL CONSOLE
3. ברגע שמתחבר, יהיה חלון שחור. לחיצה בודדת על אנטר תעלה את המסך הראשוני. משם לסמן את האפשרויות הבאות:
4. Accept
5. Install – Install pfSense
6. Auto (UFS) Guided UFS Disk Setiup
7. Entire Disk
8. MBR
9. Finnish
10. Commit
11. כשמבקש Reboot, לכבות את המכונה ולהכנס למצב עריכה.
מה שקרה עכשיו, זה שה-Image שיבאנו ל-GCP ואיתו עלתה המכונה, זה לא באמת דיסק עם מערכת הפעלה, אלא יותר דיסק התקנה. כשהמערכת עלתה באמצעותו, הוא ביצע את ההתקנה על הדיסק הנוסף.
כעת נצטרך להסיר את הדיסק שמכיל את ה-Image – שכאמור, זה בעצם דיסק התקנה, ולהעלות את המכונה עם הדיסק השני בלבד כדיסק מערכת, כי עליו מותקנת מערכת ההפעלה.
העלאת המכונה:
1. ללחוץ על Edit לעריכת המכונה.
2. בדף העריכה לרדת עד ל-Storage, וללחוץ על האיקס שליד הדיסק השני (pfsense-boot). זה יסיר אותו מהמכונה.
3. ללחוץ DETACH BOOT DISK כדי להסיר גם את הדיסק עם ה-Image מהמכונה.
4. כעת ללחוץ SAVE.
5. ללחוץ שוב EDIT.
6. לרדת עד ל-Storage ושם ATTACH BOOT DISK
7. בחלון שיפתח, לבחור בלשונית הימנית – Existing disk
8. לבחור בדיסק pfsense-boot
9. לשמור את השינויים ולהפעיל את המכונה.
הגדרת כרטיס רשת:
1. כשהמכונה תעלה, לפתוח שוב את ה-Serial Console.
2. ללחוץ על אנטר כדי לקבל Prompt
3. נתבקש לבחור Interface עבור רשת חיצונית. היות ויצרנו רק כרטיס רשת 1, נכתוב לו vtnet0. אנטר.
4. אז נתבקש לבחור Inteface עבור רשת פנימית, או ללחוץ פשוט אנטר כדי לדלג. לוחצים אנטר.
5. נלחץ y לאישור, אנטר.
6. עכשיו הוא יגיד לנו שהוא מגדיר את הרשת החיצונית, וישאר ככה בלי לזוז. לא להתרגש. לתת לו 5-10 דקות, ואז ללכת לדף של המכונה וללחוץ RESET כדי לאתחל את המכונה.
7. הוא יבקש להזין שם של כרטיס רשת חיצוני, נכתוב לו vtnet1.
8. הוא יבקש להזין שם של כרטיס רשת פנימי, נכתוב לו vtnet0.
9. לוחצים y לאישור
10. יופיע תפריט אפשרויות. נקיש 2 עבור עריכת כרטיס רשת.
11. נקיש 2 עבור עריכת כרטיס הרשת של LAN.
12. נקיש y כדי לאשר כתובת LAN באמצעות DHCP – מה שאומר שההגדרה הפנימית של המכונה תקבל את הכתובת שנתנו לה ב-GCP.
13. לוחצים n כדי לסרב להגדיר IPv6 עם DHCP.
14. נקיש אנטר כדי לדלג על הגדרות IPv6.
15. נקיש n כדי לא לחזור ל-http בתור הפרוטוקול של ההגדרות דרך ממש Web.
16. לוחצים אנטר כדי להמשיך.
17. יעלה סיכום קצר של הפעולות המתבצעות, ואז נלחץ אנטר לאישור.
התחברות ללוח הניהול של pfsense:
חוזרים לחלון בדפדפן שדרכו פתוח לנו שולחן העבודה של המכונה ubuntu-desktop. מכאן נתחבר לניהול של ה-pfsense ונגדיר אותו.
1. לוחצים למעלה בצד שמאל על Activities, יפתח לנו בתחתית המסך סרגל ובו כמה אייקונים. לוחצים על האייקון של דפדפן Firefox.
2. בשורת הכתובת נכניס את הכתובת של הרגל הפנימית של pfsense – 10.0.10.150. אמורה להופיע האזהרה על כך שהאתר אינו מאובטח. יש ללחוץ על Advanced כדי להציג את הלחצן של Accept the risk and proceed ולפתוח את הדף.
3. יעלה דף ההתחברות לממשק הניהול. המשתמש והסיסמה הראשוניים הם: משתמש – admin סיסמה – pfsense
4. אם לא מופיע דף ההתחברות והדפדפן מחפש ומחפש ולא מצליח להגיע לכתובת, לכבות את המכונה, לערוך את ההגדרות שלה, ולהוסיף את תגיות הרשת "http-server" וגם "https-server". להפעיל מחדש את המכונה ולנסות שוב.
5. יופיע דף Welcom שפותח את אשף ההגדרה של pfsense. אנחנו לא ממש צריכים אותו והתפריטים כבר זמינים למעלה, אז ניגש לעבודה.
הפעלת תצורת כוכב:
כעת נוכל לארגן את הרשתות שלנו בענן בתצורת כוכב, התעבורה מנותבת כדלהלן:
1. יש לנו ארבע רשתות.
2. במרכז יש את pfsense שבו יש ניתוב סטאטי שמנתב את כל טווח הרשת הפנימית 10.0.0.0/8 ל-Gateway של vpc-1.
3. ב-vpc-1 יש ניתוב של כל טווח הרשת הפנימית 10.0.0.0/8 ל-pfsense.
4. כל אחת מהרשתות יוצרת Peering עם vpc-1 בלבד.
5. ה-Peering כולל יצוא של ניתוב מ-vpc-1 לרשת שמתחברת אליו.
6. הרשת שמתחברת – נגיד vpc-3, מקבלת את הניתוב של 10.0.0.0/8 ל-pfsense.
7. מכונה ב-vpc-3 שפונה למכונה ב-vpc-3 או vpc-1, יש לה ניתוב מדוייק יותר לטווח רשת של 24, ולכן הניתוב מתנהל ברמה המקומית או דרך ה-Peer בלי להזדקק לטווח הרחב יותר של 8.
8. מכונה ב-vpc-3 שפונה לכתובת ב-vpc-4, לא מוצאת ניתוב בטווחים של 24, ולכן פונה לניתוב הכללי יותר של 10.0.0.0/8, שהטווח של vpc-4 (10.0.40.0/24) כלול בתוכו.
9. מ-vpc-3 הניתוב פונה דרך ה-Peer ל-pfsense.
10. Pfsense מפנה בניתוב סטאטי את כל התעבורה של 10.0.0.0/8 ל-Gateway של vpc-1.
11. ה-Gateway של vpc-1 יודע דרך Peering כי הטווח של 10.0.40.0/24 שייך ל-vpc-4, ולשם הוא מפנה את התקשורת.
12. היעד נמצא ב-10.0.40.0/24 ומקבל את התקשורת.
התרשים הבא מפרט את מבנה הרשת, טבלאות הניתוב ותצורת התעבורה:
וכעת ניישם את ההגדרות האלה, כדי שנגיע לאותו מצב כמו בתרשים.
הגדרת Gateway לרשת הפנימית:
1. בניהול של pfsense בתפריט System נלחץ על Routing. בדף שיפתח יהיו שלוש לשוניות. כעת אנחנו בלשונית Gateways. כרגע יש לנו רק את זה של הרשת החיצונית.
2. נלחץ Add כדי להוסיף נקודת מוצא לרשת הפנימית.
3. בדף שיפתח, נזין את הנתונים הבאים: Interface – LAN Name – vpc1 Gateway – 10.0.10.1 אז נרד עד הסוף, נלחץ Advanced ושוב נרד עד הסוף, ונסמן את Use non-local gateway.
– זה בגלל שבהגדרת ה-DHCP הפנימית של המכונה, הכרטיס שלה מוגדר ב-Prefix 32, מה שאומר שמבחינתו ה-Gateway של ה-VPC כביכול יושב ב-Subnet אחר. נלחץ Save.
הגדרת ניתובים:
1. נעבור ללשונית באמצעית – Static Routes.
2. הרשימה ריקה. אנחנו נוסיף ניתוב אחד בלבד. נלחץ Add.
3. נמלא את הנתונים הבאים: Destination network – 10.0.0.0. בצד ימין יהיה ה-Prefix, נבחר 8. Gateway – נבחר בזה שיצרנו עכשיו, vpc1. נלחץ Save.
4. נלחץ Apply Changes.
פתיחת תעבורה בכל הטווח הפנימי:
1. Firewall >> Rules >> Add.
2. לשנות את השדות הבאים: Interface – LAN Protocol – Any Source – Network 10.0.0.0 /8 Destination – Network 10.0.0.0 /8.
3. לרדת למטה וללחוץ Save.
4. ללחוץ Apply Changes.
מבנה כוכב:
במעבדה הראשונה קישרנו 3 רשתות באמצעות מבנה רשת (Mesh).
על מנת שתהיה נגישות מכל VPC לכל VPC, היינו צריכים שכל VPC ישלח Peering לכל אחת מהרשתות האחרות. כאשר מדובר ב-3 VPC, זה לא כזה נורא. אבל אם מדובר ביותר?
במצב כזה מסדרים את הרשתות במבנה כוכב. בגלל תצורת הניתוב של GCP, לא נוכל להעביר ישירות תנועה בין שתי רשתות, דרך מרכז הכוכב. Peering עובד רק לרשת שמחוברת ישירות (צד שני), ולא לרשת שמחוברת אליה (צד שלישי). בשביל זה צריך פרוקסי שנמצא ברשת המרכזית, והוא מנתב את התעבורה לכל שאר הנקודות. אם אותו פרוקסי הוא גם פיירוואל, ניתנת לנו שליטה נוספת בתעבורה בין הרשתות, בזמן שהיא מאופשרת מבחינה טכנית אבל מסוננת בהתאם לצורך.
אנו נהפוך את vpc-1 למרכז הכוכב, וכל הרשתות האחרות תתחברנה לאותה הרשת. כך כל רשת צריכה ליצור Peering רק לרשת אחת בלבד, כדי להתחבר לכל שאר הרשתות.
חיבור רשת לכוכב:
1. VPC network >> VPC networks >> vpc-2 >> VPC NETWORK PEERING.
2. לסמן את החיבור vpc2-to-vpc3 ולמחוק אותו. כעת vpc-2 מחובר רק ל-1, וכן 3 מחובר רק ל-1.
3. לעבור ל-VM instances ולהפעיל את instance-4 ואת instance-5. כעת שניהם יושבים ברשתות שאינן מחוברות, נשתמש בהם כדי לבחון את הקישוריות.
4. נתחבר לשניהם ב-SSH במקביל.
5. מכל אחד מהם לבצע פינג ל-instance-1. עובד. הרי גם vpc-2 וגם vpc-3 מקושרות ל-vpc-1.
6. מכל אחד מהם לבצע פינג לשני. לא עובד. ברגע שבוטל ה-Peering, אין קישוריות.
7. כעת לעבור ל-Routes, ושם נראה שיש לנו ניתוב אחד ב-vpc-1 שמפנה את כל התעבורה ל-0.0.0.0 ל-default internet Gateway של אותו vpc.
8. לעבור ללשונית של ROUTE MANAGEMENT.
9. ללחוץ CREATE ROUTE.
10. למלא את הפרטים הבאים: Name – to-pfsense Network – vpc-1 Destination IPv4 range – 10.0.0.0/8 Next hop – Specify an IP address of an instance Next hop IP address – 10.0.10.150.
11. ללחוץ CREATE.
12. לחזור לנתיב הבא: VPC network >> VPC networks >> vpc-1 >> VPC NETWORK PEERING.
13. להכנס ל-Peering של כל אחת מהרשתות האחרות, ולודא שמסומנת התיבה שמייצאת ניתוב של כתובות פנימיות לרשת השותפה.
14. לנסות פינגים בין instance-4 ל-instance-5. עובד לשני הכיוונים.
15. אם לא עובד, להכנס להגדרת של vpc-2 ואחרי זה של vpc-3, ושם בהגדרות של ה-peering מול vpc-1, לוודא שמוגדר לייבא ניתובים של כתובות פנימית מהרשת השותפה – שבמקרה שלנו זה vpc-1. עכשיו יעבוד.
הוספה זריזה של VPC למבנה הכוכב:
אם נרצה להוסיף לכוכב רשת נוספת – גם מפרויקט אחר, נוכל לעשות את זה באמצעות סקריפט.
הערכים אותם נצטרך להזין בסקריפט בפעם הראשונה יהיו ארבעה:
– מזהה הפרויקט (Project ID) של הפרויקט שמהווה את מרכז הכוכב.
– מזהה הפרויקט של הפרויקט שרוצה להצטרף למבנה הכוכב.
– שם הרשת המהווה את מרכז הכוכב – לדוגמה אצלנו זה vpc-1. כי ברשת הזו יושבת הכתובת של הנתב, שדרכה עוברת כל התעבורה.
– שם ה-VPC שרוצה להתחבר לכוכב.
בכל רשת נוספת שנרצה לצרף לכוכב, נצטרך לשנות רק את שם הרשת ומזהה הפרויקט שמצטרפים למבנה.
כך שאם נרצה להוסיף את הרשת vpc-4 שנמצאת בפרויקט yostest-2, נוכל להשתמש בסקריפט הבא:
$starproject = 'yostest-1'
$joineproject = 'yostest-2'
$joinenet = 'vpc-1'
$starnet = 'vpc-4'
gcloud compute networks peerings create to-star `
--network $joinenet `
--project=$joineproject `
--peer-network $starnet `
--peer-project=$starproject `
--import-custom-routes
gcloud compute networks peerings create $joinenet.Split("/")[-1] `
--network $starnet `
--project=$starproject `
--peer-network $joinenet `
--peer-project=$joineproject `
--export-custom-routes
ותמיד אפשר להשתמש בלולאות.
אם נרצה להוסיף לכוכב את כל הרשתות מתוך פרויקט מסוים, נשתמש בתצורה הבאה:
$starproject = 'yostest-1'
$joineproject = 'yostest-2'
$starnet = 'vpc-1'
$joinenet = gcloud compute networks list --project $joineproject --format json | ConvertFrom-Json | %{$_.name}
foreach ($x in $joinenet) {
gcloud compute networks peerings create to-star `
--network $x `
--project=$joineproject `
--peer-network $starnet `
--peer-project=$starproject `
--import-custom-routes
gcloud compute networks peerings create $joinenet `
--network $starnet `
--project=$starproject `
--peer-network $x `
--peer-project=$joineproject `
--export-custom-routes
}
– לא להשתמש בסקריפט של הלולאה אם יש בפרויקט רק רשת אחת.
– לשים לב שבפקודה יש שני חלקים. באחד הרשת החדשה יוצרת חיבור עם הרשת המרכזית ויש Flag שמציין ליבא משם ניתובים, ובשני הרשת המרכזית עונה לרשת החדשה ושם יש Flag שמציין לייצא לשם ניתובים.
– כל הניתובים מוגדרים ברשת המרכזית. אם יש טווחים נוספים שרוצים לנתב אליהם כמו 192.168.0.0 או 172.16.0.0, מוסיפים את הניתוב ב-vpc-1 לכיוון ה-pfsense, ואז ב-pfsense לכיוון ה-Gateway. הרשת המצטרפת תייבא את הניתוב של vpc-1 ל-pfsense ומשם הכל יזרום.
חומת אש ובדיקות:
כעת נחזור לפרויקט yostest-2 וניצור מכונת e2-micro במחוז תל אביב ברשת vpc-4 שעכשיו צירפנו לכוכב.
עד שהמכונה תיווצר ותעלה, נלך לפיירוואל של הפרויקט ונוסיף שני חוקים כפי שהקמנו אותם בפרויקט הראשון. האחד מאפשר חיבור SSH מהטווח 35.235.240.0/20 לכל המכונות ברשת, השני מאפשר תעבורה בתוך הטווח של 10.0.0.0/8.
עכשיו נחזור לדף של VM Instances ונתחבר ב-SSH למכונה החדשה.
בדיקות:
פינג ל-instance-1, עובד.
הרצת הפקודה curl http://10.0.10.11 כדי למשוך את תוכן דף הבית משרת ה-nginx שמותקן על instance-1, עובד.
עכשיו לרשת צד שלישית:
פינג ל-instance-5, עובד.
כך יצרנו טופולוגיית כוכב.