לדלג לתוכן

3.1 בעיית הכתובות הרצאה

האינטרנט

  • האינטרנט הוא שם כללי לרשת עולמית שמחברת את כל המחשבים בעולם, בשיעור הבא נכיר את האינטרנט, בעיות בו, פתרונות לבעיות, ואיך הוא עובד על רגל אחת.

בעיית הכתובות

  • הכתובת ip שאנחנו מכירים מורכבת מ4 בתים, לשם כך היא נקראת IPv4.
  • בגלל שכתובת ip מצוייגת רק על ידי 4 בתים במחשב, אנחנו יכולים לייצג עד 2^(4*\8) כתובות שונות, שזה יוצא בערך 4 מיליארד. והבעיה היא שיש יותר מ4 במיליארד ישויות שרוצות להתחבר לאינטרנט, ואחד הכללים לפי פרוטקול IP שלכל מחשב אמור להיות כתובת ip שונה כדי שהתקשורת תעבוד.
  • וזה שם אותנו בבעיה, העולם ממשיך לגדול ו4 בתים כדי לייצג כתובת ip היא לא מספיקה.

כתובות ipv6

  • כתובת IPv6 היא כתובת שמורכבת מ16 בתים, כך שכמות הכתובות האפשרית היא: 340,282,366,920,938,463,463,374,607,431,768,211,456
    מספר ענק, הבעיה היא שעד שipv6 יצא, העולם והאינטרנט כבר התפתח ושקע עמוק בipv4. עד היום עובדים מאוד קשה כדי להכניס לעולם שלנו את ipv6, אבל זה משימה שהיא על סף הלא אפשרית- כמות התוכנות שצריך להתאים, כמות הרכיבי רשת, וכמות הספקיות אינטרנט שצריכות להחליף תשתיות שלמות.
  • אז פתרון הIPv6 שנשמע פשוט, לא כל כך פשוט ליישום.

רכיב NAT

  • הדרך המקובלת בעולם לפתור את בעיית הכתובות היא באמצעות רכיבי NAT. הראשי תיבות של NAT הוא network address translation.
  • במקום לתת לכל מחשב בעולם כתובת IP יחודית לגלישה באינטרנט, אנחנו מחלקים את הרשתות בעולם לרשתות מקומיות- LAN, ולרשת עולמית WAN. כאשר למחשבים ברשת המקומית, אין כתובת IP יחודית, אלה כתובות במרחב מיוחד שנועד לרשתות מקומיות כמו: 192.168.0.0/16, 10.0.0.0/8 או 172.16.0.0/12. (אלה נקראים כתובות IP פנימיות) וברשתות המקומיות יהיה רכיב שנקרא רכיב NAT שמטרתו לנתב את המחשבים ברשת המקומית לאינטרנט. לרכיב הזה ורק לו תהיה כתובת IP ציבורית בWAN.
  • בגלל שקיימים הרבה פחות רשתות מקומיות שונות בעולם לעומת כמות המחשבים בעולם, אז כך אנחנו יכולים להביא כתובת ציבורית בדרך כלל רק לרכיב אחד ברשת המקומית ובכך אנחנו מצמצמים משמעותית את כמות הרכיבים שצריכים לקבל כתובת חיצונית.
  • חשבו על כך שלכל רשת מקומית יש המון מחשבים, חשבו על רשת של משרד, במשרד יש המון מחשבים- בזכות הרכיב NAT במשרד אנחנו יכולים להוציא את כל המחשבים לאינטרנט מבלי שיקבלו כתובת IP יחודית להן.
    דמיינו ויש 200 מחשבים במשרד, כולם משתמשים בסאבנט של 192.168.0.1/24- חשבו על כך שקיימים עשרות אלפי רשתות כאלה בעולם, וקיימים מיליוני מחשבים שיש להם את אותו אייפי פנימי, אבל זה לא משנה- כי בזכות הnat כל המחשבים האלה שיש להם את אותו ip למשל: 192.168.1.1 יוצאים מip חיצונית שונה.

איך הכל מתחבר? switch layer 3 או בשמו השני ראוטר מטרתו בעולם היא לנתב אותנו בין רשתות שונות, יכול להיות שבמשרד שתיארנו קודם יש מספר רשתות שונות, ויש כמה נתבים (ראוטרים) שמחברים את כל הרשתות האלו.
כדי לחבר את רשת המשרד שלנו לאינטרנט, אנחנו צריכים שיהיה רכיב NAT שיהיה מחובר לאחד הראוטרים כדי שהראוטרים ידעו לנתב אותנו אילו כשאנחנו מנסים לגשת למחשבים אחרים בעולם.
Pasted image 20240814170151.png
אז מה בתכלס רכיב NAT עושה? רכיב NAT אמור לקבל תעבורה מהרשת הפנימית, ולהוציא אותה לרשת העולמית עם הIP החיצוני שלו. בעצם כל מה שרכיב NAT עושה הוא לשנות את הכתובת מקור של הפאקטה, כאשר הוא שולח פאקטה ושומר את הכתובת מקור בצד בטבלה. ואז כאשר הרכיב NAT מקבל תשובה, פאקטה בחזרה מהיעד, הוא מחליף את הכתובת יעד של הפקטה עם הכתובת מקור שהוא שמר. ובכך פאקטה שנשלחה ממחשב אחד ברשת הפנימית הגיעה ליעד עם הכתובת של הNAT וכשהגיעה תשובה לNAT בחזרה הוא ידע להעביר אותה למחשב ברשת הפנימית ששלח שביצע את התקשורת.
- אם יש לי כמה מחשבים ברשת הפנימית שמדברים במקביל מעל הרכיב NAT, כיצד הNAT יודע איזה פאקטה לאיזה מחשב ברשת הפנימית להעביר? באמצעות טבלה.
- רכיב הNAT שומר טבלה של כל התקשורות שהוא מוציא, כאשר הוא מציין בכל תקשורת את הIP הפנימי ששלח את הפקטה, המחשב יעד אילו הוא רוצה להעביר את הפקטה. וכך שהפאקטה חוזרת מהיעד, הרכיב NAT יודע להשתמש בטבלה כדי להעביר את התשובה למחשב הנכון.

רכיב PAT (חידוש לNAT)

יש בעיה בNAT (גם אותה לקח זמן לגלות... ). מה אם שני מחשבים ברשת הפנימית רוצים לגשת לאותו IP, למשל שני מחשבים רוצים לגלוש לגוגל באותו הזמן? רכיב הNAT לא ידע להתמודד עם זה, בגלל שבטבלת הNAT שציינו למעלה שמורה רק כתובות IP. ואם שני מחשבים ינסו ליצור קשר עם אותו IP אז כשתגיע הפאקטה מגוגל לצורך העניין הNAT שלנו לא ידע למי להעביר את הפאקטה.
- ניסו לתפור גם לזה פתרון- שהוא להוסיף לטבלת NAT עוד שני טורים של פורט חיצוני ופורט פנימי בטבלה. ובכך אם שני מחשבים מנסים לגשת לאותו IP עם פורט יעד שונה, אז לא יהיה שום בילבול כי הרכיב NAT ידע להבדיל בין איזה פאקטה אמורה להגיע למי. וגם אם יש שני מחשבים ששניהם מנסים לגלוש למשל לגוגל, והפורט יעד יהיה זהה בין הפאקטות, אז בגלל שהפורט מקור נשמר גם בטבלה, זה אמור להיות עוד מזהה שיעזור לNAT להבין לאן לשלוח את הפאקטה אבל גם אז עדיין קיימת בעיה.
- מה עם שני מחשבים ברשת מנסים לגלוש לגוגל, לאותו IP לאותו פורט 80 (פורט של HTTP) ובמקרה שני הדפדפנים שלהם יצאו מאותו פורט מקור? תהיה עוד התנגשות וזה לא טוב.
בשביל זה המציאו את PAT שדרוג של הרכיב NAT הישן- ראשי תיבות של port address translation, רכיב זה פותר את הבעיה באמצעות שינוי של הפורט מקור כשהוא מוציא את הפאקטה לאיזה פורט שהוא בוחר.
- עכשיו כל פעם שמחשבים מוציאים פאקטה דרך הPAT, אז הרכיב שומר את הIP הפנימי שממנו יצאה הפאקטה, הIP יעד אילו צריך להעביר את הפאקטה, הפורט מקור, הפורט יעד, והפורט ראנדומלי שהPAT בוחר להוציא את הפאקטה- ואז הרכיב מעביר את הפאקטה ליעד, אבל משנה את הכתובת מקור של הפאקטה והפורט מקור. ואז כשמגיעה הפאקטה מהיעד בחזרה לPAT אז הPAT יודע לפי הטבלה החדשה לאן להעביר את הפאקטה.
בתכלס אם נמשיך לחשוב בכיוון הזה, יש גם הגבלה למספר הפורט של 65 אלף פורטים שונים, בגלל שהוא רק 2 בתים. אז אם תיאורתית נוציא 65 אלף תקשורות שונות מרכיב PAT אז הטבלה שלו תתמלא והוא לא יוכל יותר לבצע תקשורות, בגלל זה יש גם timeout לכל עמודה בטבלה, וגם לא אמורה להיות ברשת מקומית וקטנה כל כך הרבה תקשורות, ואם כן אז כנראה שיהיו כמה רכיבי PAT ברשת.
- אלה אם כן אתם רוצים מסיבה כלשהי לחרב את הרשת ולהקריס את הרכיב PAT?
למעשה PAT זה חידוש לNAT, ובשפה מדוברת אנחנו עדיין קוראים לזה NAT, אז כשאתם שומעים אנשים מדברים על NAT תדעו שמדובר בPAT. כי רכיבי הNAT הישנים שדיברנו עליהם למעלה כבר לא בשימוש עשרות שנים.
- גם בהמשך השיעור בקורס בכלל כשאגיד NAT תזכרו שהכוונה היא לPAT.

דאבל NAT

  • בגלל בעיית הכתובות, ולמורות שיש לנו רכיבי NAT בחיינו, עדיין אין הרבה כתובות IP לכולם, וכתובות IP הן מאוד יקרות. ובשביל זה ספקיות אינטרנט כמו בזק או הוט שאנחנו מכירים מצאו פתרון בשם דאבל NAT.
  • דאבל NAT יוצר אבסטרקציה נוספת, במקום שלכל בית בישראל יהיה רכיב NAT עם כתובת IP מיוחדת משלו, קיים רכיב NAT בבתים של רובנו שאין לו באמת כתובת IP משלו, והוא פשוט מנתב אותנו לרכיב NAT גדול יותר שכמה בתים מתנתבים אילו- ולו יש כתובת IP.
  • כנראה אין לכם כתובת IP משלכם בבית, ואולי לכל הבניין ביחד יש כתובת IP יחודית.
  • זה נקרא דאבל NAT. כי קיימים שני רכיבי NAT אחד אחרי השני.
    Pasted image 20240814173218.png

פתיחת פורט

מה אם אני רוצה להרים שרת HTTP בבית שלי? בשרת HTTP השרת משרת, הוא מקבל בקשות HTTP מבחוץ, מכתובות שונות בעולם ומחזיר תשובה. אחת הבעיות של NAT שNAT יודע להעביר את הפאקטות שהמחשב שברשת הפנימית מתחיל את התעבורה, אבל לא שמתחילים איתו את התעבורה. וזה מגביל אותנו כאשר אנחנו רוצים להרים שרת שמאזין על פורט כלשהו (כמו שרת HTTP).
- לבעיה הזו יש שלשוה פתרונות, יקרים וזולים יותר.
1. קיימות המון ספקיות בעולם שמוכרות אחסון של אתרים, מחשבים ואפילו מחשב וירטואלי שיש לו כתובת IP חיצונית. אפשר לקנות איזשהו שרת כזה, עם כתובת IP ולשים עליו את האתר שלנו (השרת HTTP).
2. חברות כמו cloudflared מציעות שירות שנקרא cloudflared tunnel שבו אתם מתקינים תוכנה על המחשב שלכם בבית שמריץ את השרת שאותו אתם רוצים לפתוח לאינטרנט, והתוכנה מעבירה את התעבורה שלכם מהבית ישירות לסאב דומיין שהחברה יוצרת לכם ואז מאותו סאב-דומיין כל אחד יכול לגלוש לאתר שלכם שהרמתם בבית.
3. ופתרון זול יותר- לפתוח פורט על הרכיב NAT: להגדיר על הרכיב NAT שנמצא לכם בבית שכל מי שפונה לIP הפומבי (החיצוני) של הNAT שלכם בפורט שאתם מגדירים- התעבורה תגיע למחשב שלכם.
הגדרה של פתיחת פורט יכולה להתבצע בממשק ניהול של רכיב הNAT, בהמשך אני מדגים כיצד אני פותח פורט אצלי בבית. רק שימו לב לכמה דגשים חשובים שצריך לקחת בחשבון
- כשאתם פותחים פורט אתם בעצם יוצרים פתח באינטרנט לבית שלכם, זה אומר שאם למשל האקר יצליח למצוא דרך לנצל את האתר שלכם, הוא עלול לפרוץ למחשב שלכם, ואם הוא יגיע למחשב שלכם, אז הוא נמצא ברשת הפנימית של הבית שלכם- ומשם הוא יכול להתפשט לעוד מכשירים וזה מסוכן.
- למעשה במשרדים וחברות גדולות שקיימים המום סוגי רשתות בדרך כלל מפרידים רשתות מסויימות גם במובן אבטחתי. לרוב כשיש אתרים לחברה, האתרים נמצאים ברשת אחרת לחלוטין מהרשת של העובדים בחברה. כדי למנוע מצב שאם האקר יפרוץ לרשת הפחות בטוחה עם הפורטים החשופים לאינטרנט הוא לא יגיע לרשת של העובדים למשל.
- רשת פתוחה כזו נקראת גם DMZ - ראשי תיבות של demilitarized zone, אם נרצה ליצור חיבור כלשהו בין רשת הDMZ לבין הרשת הפנימית שלנו, נצטרך לעשות זאת בצורה כמה שיותר בטוחה, עם המון מוצרי אבטחה מתקדמים- פחות אכנס לזה בקורס זה.
- בנוסף שימו לב שפתיחת פורט בדאבל NAT לא תעבוד לכם, בגלל שהפורט צריך להיפתח ברכיב NAT הראשי שמוציא אתכם לאינטרנט, ואם הNAT שלכם משותף עם עוד אנשים אתם לא בהכרח יכולים לפתוח פורט. למורות שנכון להיות (אוגוסט 2024) קניית כתובת IP פרטית שלכם מהספקית היא זולה- עולה בסביבות ה10 שקלים לחודש. ואפילו כשאני ביקשתי מהספקית אצלה אני לקוח להיות מאחורי NAT אחד ולא שניים הם הסכימו, ויכלתי לפתוח פורטים.

ניהול ראוטר ביתי

  • הגענו סוף סוף לדבר על הראוטר הביתי שכנראה יש לכם בבית, בתכלס? הוא גם switch layer3, גם שרת dhcp, גם רכיב NAT, גם יש לו ממשק הגדרות עשיר וגם הספקית שלכם יכולה לשלוט עליו מרחוק. רכיב קצת יותר מסובך ממה שאנשים נוטים לחשוב.
  • יותר אינדקטיבי לקרוא לו קופסאת קסם מאשר ראוטר, לרוב הראוטרים היום יש ממשק http (אתר) שדרכו אפשר להגדיר אותו. יש ראוטרים שיש להם גם שרת ftp, telnet ועוד.. מוזמנים להריץ nmap כדי לגלות את הפורטים הפתוחים על הראוטר שלכם. אני מזכיר אפשר לבדוק את הdefault gateway שלכם עם ipconfig.
    Pasted image 20240814184612.png
  • על הראוטר שלי בבית יש רק אתר אינטרנט, אז נכנס אילו:
    Pasted image 20240814185557.png
  • לרוב השם משתמש והסיסמא יהיו או admin, admin או שהם יהיו כתובים מתחת לראוטר הפיזי שלכם. נסו גם לחפש את הסיסמא של הדגם ראוטר שלכם באינטרנט, זה גם עובד יותר מידי פעמים.
  • אחרי שנפתח לכם הממשק, שחקו בו- תראו מה אפשר לראות שם, למדו- תנסו לחפש דברים שהכרתם בקורס.
  • אחרכך מצאו את המקום שבו אפשר לפתוח פורט ונסו ליצור חוק port forwarding חדש.
    למשל אצלי אני יכול להוסיף חוקי פתיחת פורטים פה:
    Pasted image 20240814190227.png
  • אני הוספתי חוקים לפורטים 80 ו21- בשביל http ו-ftp למחשב שלי (הip של המחשב שלי ברשת הפנימית הוא 192.168.1.234). אפשר לראות שפתחתי שכל תעבורה שמגיעה לראוטר בפורט 80 תגיע למחשב שלי בפורט 3000 למשל. כי השרת http שהרמתי במחשב משרת בפורט 3000.