רשתות תקשורת

דף הבית >> רשתות תקשורת

מדריך רשתות מורחב

NAT - יNetwork Address Translation  - תרגום כתובות רשת
הרשת תוכננה למטרות מחקריות וצבאיות והפרוטוקול TCP/IP שמשתמשים בו היום (גרסה 4 או IPv4), לא תוכנן להכיל כ"כ הרבה משתמשים או תחנות קצה. בנוסף, ישנם כתובות רבות שמבוזבזות.
למשל, אם יש לנו בבית 5 מחשבים, במקום לרכוש מהספקית שלנו 5 כתובות חוקיות ויקרות. משתמשים ב-NAT לתרגם כתובות לא חוקיות(פנימית) לכתובת חוקית אחת.(חיצונית) מה שחוסך מאיתנו רכישה יקרה של מספר כתובות

כתובות IP חוקיות ולא חוקיות
כתובת IP, כשמה היא, היא כתובת.

לצורך המחשה, בעולם האמיתי, כאשר אני שולח לידיעות אחרונות מכתב שבו אני מבקש להיות מנוי על העיתונים שלהם, עלי לציין במעטפה את הכתובת של מחלקת המנויים של ידיעות, והכתובת שלי, שאליה יישלחו כל העיתונים. בצורה דומה מתבצעת התקשורת באינטרנט. כאשר אני רוצה לקרוא את ynet, המחשב שלי פונה לכתובת ה-IP של ynet (מחלקת המנויים) ומבקש את האתר הראשי. כדי שynet יידעו לאן לשלוח את המידע באתר שלהם חזרה אליי, המחשב שלי מציין את כתובת ה-IP שלו (הכתובת של הבית שלי אליו יישלחו העיתונים).

כתובות חוקיות הם כתובות שמותר להשתמש בהם ברשת האינטרנט. מדובר בכתובת שספקית האינטרנט רוכשת עבורנו מאירגונים בינלאומיים (למשל האירגון האירופאי ripe), ולאחר מכן מחלקת אותם ללקוחות שלה תמורת התשלום החודשי. כתובות אלו הם כתובות שיופיעו במאפיינים של החייגן או הכתובת שתופיע אם תלחץ כאן.

כתובות לא חוקיות הם כתובות שהאינטרנט לא משתמש בהם. בכתובות אלו משתמשים למשל, באירגון שאינו רוצה אינטרנט (מאגר המידע של הבנקים), ברשתות פנים-אירגוניות וגם ברשת הביתית שלנו – וזאת כדי שלא לשלם הרבה כסף על מספר כתובות חוקיות.

הכתובות הלא חוקיות הוגדרו מראש והם:
10.0.0.0 עד 10.255.255.255
172.16.0.0 עד 172.31.255.255
וגם 192.168.0.0 עד 192.168.255.255

אז רגע! אמרנו בעמוד הקודם שאני משתמש בכתובות לא חוקיות ברשת הבייתית שלי כדי לחסוך בכסף, אבל בעמוד הזה אני אומר שאני לא יכול לגלוש עם כתובות לא חוקיות. אז איך בכל זאת אני גולש (גם אם לא רכשתי מהספקית מספר כתובות חוקיות)? או במילים אחרות, איך מחברים מחשב עם כתובת לא חוקית לאינטרנט? והתשובה הנדרשת היא NAT!

NAT אומר בעצם, שאנחנו מתרגמים מספר כתובת לא חוקית חינמיות (למשל 192.168.1.7) לכתובת חוקית (88.104.86.4) אחת שניתנה לנו ע"י הספקית במסגרת המנוי. באמצעות ה-NAT, מחשב ברשת בייתית יוכל לגלוש באינטרנט.

אם נחזור להמחשה הקודמת לפיה כתובת היא בית, ניתן לדמות כתובת לא חוקית לחדר. זר (מהאינטרנט) לא יידע היכן בבית שלנו (הכתובת החוקית שלנו) נמצא הסלון או חדר השינה (כתובות לא חוקיות). תושבי הבית יידעו להגיע לחדרים הללו. הדייר בבית לא יוכל לבקש ממחלקת המנויים של ידיעות אחרונות לשלוח לו את העיתון לסלון.

השאלה הנדרשת הבאה היא: "מי מבצע את ה-NAT?" והתשובה היא הנתב, כמובן

פורטים
פורטים (port) הם בעצם חלוקת משנה מתחת לכתובת ה-IP. נחזור להמחשה הקודמת. כדי שנקבל את העלון ציינתי את הכתובת של הבית שבו אני גר, הפורט מייצג את האיש אליו העלון צריך להגיע: רחוב הרצל 9 הוא ה-IP, ו"משה בוכניק" הוא הפורט.

בשפה מקצועית יותר, נאמר ששכבה 3 במודל השכבות OSI הוא ה-IP ומתחתיו חלוקת המשנה היא שכבה 4.

ניקח לדוגמה את שרת הדואר של הספקית בזק בינלאומי:

אם ניגש ל-mail.bezeqint.net בפורט 80, ייפתח לנו ממשק ה-webmail
אם ניגש ל-mail.bezeqint.net בפורט 25, נוכל לשלוח דואר.
אם ניגש ל-mail.bezeqint.net בפורט 110, נוכל לקבל דואר.

IP אחד, עם כמה פורטים. כל פורט נותן שירות אחר.

כתובת מקור מול כתובת היעד

גם המחשב שלנו משתמש בפורטים. גלישה באתרי אינטרנט מתבצעת בפורט 80. כלומר, כאשר אנחנו פותחים חלון של אקספלורר ומקלידים את הכתובת של ynet, אנחנו ניגשים ל-ynet בפורט 80. אולם, גם אנחנו יוצאים ל-ynet באמצעות פורט. מערכת ההפעלה שלנו משתמש בפורט רנדומלי הגבוה מ-1024. נשתמש בהמחשה שלנו שוב. משה בוכניק רוצה לגלוש ל-ynet

הכתובת של ynet היא:
212.25.69.144:80
זוהי כתובת היעד אליה אנחנו רוצים לגשת. פורט 80 הוא הפורט שבו ynet מציגה אתרי אינטרנט.

הכתובת של המחשב של משה היא:
84.104.87.4:1255
זוהי כתובת המקור. מערכת ההפעלה של משה בחרה בפורט 1255 לצאת ממנו לאתר ynet.

כאשר ניגש לynet, ניגש לכתובת של ynet בפורט 80 ונבקש את הדף הראשי של האתר. בתשובה, ynet יחזירו את העמוד הראשי שלהם לכתובת של משה (84.104.87.4) בפורט 1255. כך יידע המחשב של משה כי התשובה של ynet באה כמענה לבקשה שלו (ולא למשל כמענה לחלון אחר של האקספלורר)

ראינו שפורט 1255 הוא הפורט הרנדומלי שה-windows הקצה ופורט 80 הוא הפורט הסטנדרטי של גלישה. למה המחשב מקצה כתובות גבוהות ורנדומליות?

נניח שאנחנו פותחים שני חלונות של אקספלורר. בחלון אחד אנחנו מבקשים לצפות ב-walla ובחלון השני אנחנו מבקשים לצפות ב-ynet. במקרה זה, כתובת היעד שונה (אחד הולך לוואלה והשני ל-ynet). אולם מה לגבי כתובת המקור? אם לא נקצה פורט שונה, איך המחשב שלנו יידע כי ynet שייך לחלון אחד של האקספלורר וואללה שייך לחלון השני? בואו ניקח מצב מורכב יותר: אם פתחנו שני חלונות של ynet, כיצד המחשב יודע להפריד בינהם? איך מחלקת המנויים של ידיעות אחרונות תדע שהמנוי שלה בהרצל 9 הוא משה בוכניק ולא אישתו, גברת בוכניק? התשובה היא פורטים! מערכת ההפעלה של משה תתן לחלון אחד פורט מקור אחד, ולחלון השני היא תתן פורט מקור שני.

ניתן לראות כיצד המחשב שלנו מבצע את זה באמצעות הפקודה netstat
מידע זה יהיה חשוב מאוד כאשר נדבר על port forward.



DHCP -  הם ראשי תיבות של Dynamic Host Configuration Protocol - 
שיטה לחלוקה של כתובות IP.
ב-DHCP ישנו שרת וקליינט: ישנו מי שמחלק את הכתובות (DHCP server) ואת מי שמבקש אותם (DHCP Client). כאשר כרטיס הרשת שלנו נמצא ב-Optain IP automatically, כשהמחשב עולה, הוא "צועק" בכל הרשת שהוא צריך כתובת IP. הכתובת שהמחשב מזדהה איתה היא ה-MAC address.

"אני 00-08-74-22-39-46 ואני רוצה כתובת IP"

אם יש שרת DHCP ברשת, הוא מחזיר למחשב שלנו תשובה שמכילה בתוכה את כתובת ה-IP שהשרת חילק למחשב, כתובות של שרתי DNS ועוד… שרת ה-DHCP מחלק למחשב שלנו כתובת לתקופה מסוימת. תקופה זו נקראת Lease Time. כאשר זמן זה נגמר, המחשב שלנו מבקש משרת ה-DHCP כתובת שוב. אם המחשב שלנו לא ביקש, שרת ה-DHCP יכול לתת למחשב אחר את הכתובת הישנה שלנו.

לפעמים, יש לנו צורך לשריין כתובת ברשת הפנימית שלנו (לא כתובת חוקית) עבור מחשב מסוים. אנחנו מעוניינים שמחשב מסוים ברשת תמיד יקבל את אותה כתובת ה-IP (למשל כשעושים port forwarding). ניתן לעשות זאת בקלות.

ניקח לדוגמה נתב D-link (לחץ על התמונה כדי לקבל תצוגה מלאה)

מסגרת  1
ניתן לראות ששרת ה-DHCP מופעל. טווח הכתובות ששרת ה-DHCP יחלק לרשת הוא 192.168.0.100 עד 192.168.0.199
(הנתב יוכל לחלק ל-100 מחשבים כתובות IP). ה-Lease Time הוא שבוע.
מסגרת  2
ניתן לראות כיצד ניתן לשריין כתובת IP בשרת ה-DHCP. במקרה זה שיריינתי כך שהמחשב של משה, עם ה-MAC address שלו,
תמיד יקבל את הכתובת 192.168.0.17 לזמן בלתי מוגבל.
מסגרת  3
ניתן לראות את הדוחות. ניתן לראות את השמות של המחשבים ברשת, כתובת ה-MAC שלהם, ואיזה כתובת IP הקצה להם הנתב.

PAT
PAT הינו ראשי התיבות של Port Address Translation.
במצב זה אנחנו מתרגמים מספר כתובות לא חוקיות לכתובת חוקית אחת. במקומות אחדים PAT נקרא גם NAPT, Hide NAT או overload. בכל מקרה מדובר בשיטה שמתרגת מספר כתובות לא חוקיות לכתובת חוקית אחת (many to one).

להלן דוגמה לרשת ביתית שמשתמשת ב-PAT (לחצו על התמונה להגדלה)


נסביר את מה שאנחנו רואים….
לנתב שלנו יש בעצם שני כרטיסי רשת: אחד חיצוני שמדבר עם האינטרנט באמצעות כתובת ה-IP החוקית (88.104.87.4) וכרטיס רשת נוסף שמדבר עם הרשת הפנימית באמצעות כתובת לא חוקית (192.168.0.254).
המחשבים ברשת הפנימית שלנו רוצים לצאת לאינטרנט (לגלוש ב-ynet למשל) אך אין ברשותנו את התקציב לקנות כתובות IP לכל מחשב. כדי לפתור את הבעיה, ניתן להגיד לנתב שלנו שיבצע תרגום של כתובות. כיצד זה יתבצע?
ראשית, המחשב שלנו קיבל כתובת משרת ה-DHCP שנמצא בנתב (למשל 192.168.0.100). שרת ה-DHCP לימד את המחשב שלנו שכדי לצאת לאינטרנט הם צריכים ללכת לנתב שכתובתו הפנימית, בתוך הרשת שלנו בבית, היא 192.168.0.254. הגדרה זו נקראת גם default gateway ובעברית פשוטה אומרת "השער החוצה" . כעת, כשאנחנו מקלידים את הכתובת של ynet (וכדי לפשט את הבעיה נתעלם מהסיפור של ה-DNS), מערכת ההפעלה שלנו פותחת פורט רנדומלי (למשל 1255) ופונה לנתב כדי שיספק לה את ynet בפורט של גלישה (פורט 80). אם נציג זאת בצורה אחרת:

מבחינת המחשב
כתובת המקור היא 192.168.0.100
פורט המקור הוא 1255
כתובת היעד היא ynet.co.il
פורט היעד הוא 80
הפניה לynet מכילה את הבקשה "תן לי את הדף הראשי" (get)

המידע הזה מגיע לנתב. גם לנתב יש default gateway והוא האינטרנט (בפשטות). כיוון שאמרנו לנתב לבצע NAT, הוא יבצע תרגום של הכתובת הלא חוקית של המחשב (192.168.0.100) לכתובת החוקית שספקית האינטרנט נתנה לו (88.104.87.4). מה הכוונה בתרגום? הנתב יוציא לאינטרנט את הבקשה של המחשב שלנו, כאילו הוא בעצמו ביקש לצפות ב-ynet (ולא המחשב שלנו). כאשר הוא יפנה ל-ynet, הוא יחליף את כתובת המקור מ-192.168.0.100 לכתובת החוקית שהיא 88.104.87.4. כך למשל תיראה טבלת ה-NAT בנתב:

טבלאת ה-NAT בנתב
תתיחס לכתובת המקור בצורה הבאה:
192.168.0.100:1255 = 88.104.87.4:1255
כתובת היעד לא משתנה והיא עדיין ynet.co.il:80

כאשר ynet יקבלו את הבקשה, הם לא יידעו על התרגום. בעצם, הם לא יידעו שמאחורי הכתובת 88.104.87.4 יש רשת בייתית והם לא יידעו שעומד מולם נתב. מבחינת ynet הם יחשבו שיש מחשב בודד, בכתובת 88.104.87.4, אשר רוצה לגלוש לאתר שלהם [לכן למשל צ'קפוינט קוראים ל-PAT בשם Hide NAT - כיוון שהוא מסתיר את הרשת].

כעת, נסתכל מה קורה מהכיוון הנגדי.

ynet מקבלים אליהם בפורט 80 בקשה. הבקשה הגיע מ-84.104.87.4 בפורט 1255. ynet מחליטים לשלוח את עמוד החדשות לנתב שלנו.

מבחינת ynet
כתובת המקור היא ynet.co.il
פורט המקור הוא פורט 80 (גלישה)
כתובת היעד היא 88.104.87.4
פורט היעד הוא 1255

דף האינטרנט נשלח והוא מגיע לנתב. איך הנתב יודע להעביר את דף האינטרנט למחשב שלנו? כאשר ביקשנו את דף האינטרנט נוצרה טבלת ה-NAT. בטבלה רשום לנתב כי הכתובת 88.104.87.4 בפורט 1255 שווה לכתובת 192.168.0.100 בפורט 1255. כלומר, כל תעבורה שמגיעה לנתב מהאינטרנט בפורט 1255, יש להפנות אותה למחשב שלנו (192.168.0.100) בפורט 1255.

מה יקרה אם שני המחשבים ברשת (192.168.0.100 וגם 192.168.0.200) יירצו להגיע ל-ynet בפורט מקור 1255? כיצד הנתב שלנו יידע להבדיל בין המחשבים? הנתב בעצם יבנה את הטבלה הבאה:

192.168.0.100:1255 = 88.104.87.4:1255
192.168.0.200:1255 = 88.104.87.4:3030

כלומר, הוא יוציא את התעבורה מפורט שונה מהפורט של אחד המחשבים כדי שלא ליצור בלבול. בצורה הזו הוא יתרגם את פורט 1255 של המחשב השני לפורט 3030.


Port Forward
בעצם הגדרתו, ל-PAT יש חיסרון גדול הנובע מהתכנון שלו. בפרק שמדבר על PAT ראינו שהנתב בונה טבלת NAT ובאמצעותה הוא יודע כיצד לתרגם. לדוגמה, מחשב ברשת הפנימית יוזם תקשורת החוצה (למשל ל-ynet), הנתב בונה בטבלה שלו רשומה שאומרת
192.168.0.100:1255 = 88.104.86.17:1255
כאשר ynet מחזיר תשובה לנתב לפורט היעד (1255), הנתב שלנו הולך לטבלת ה-NAT ורואה שיש לתרגם את התעבורה שנכנסה אליו מ-ynet לכתובת 192.168.0.100:1255.

כלומר, ניתן להגיד שהתעבורה שהמחשב שלנו יוזם מוסיפה רשומה לטבלת ה-NAT. אולם, מה קורה אם מגיעה לנתב שלנו תעבורה מהאינטרנט? שהמחשב שלנו ברשת הפנימית לא יזם? כיוון שהיוזם הוא מחשב באינטרנט (ולא ברשת הביתית) לנתב שלנו אין רשומה בטבלת הNAT, הוא לא יודע כיצד לתרגם את התעבורה שנכנסת אליו מהאינטרנט ולכן זורק אותה.

לכאורה, המצב תקין, שהרי אם מגיעה לרשת שלי תעבורה שלא ביקשתי, אני מעוניין שהנתב יתעלם ממנה. אולם, מה קורה אם יש לי שרת? הרי שרת אינו יוזם תקשורת בפני עצמו, אלא כשמו, נותן שרות, ואחרים יוזמים אליו תעבורה. שרת web, שיש עליו אתר אינטרנט, מחכה שייגשו אליו, הוא אינו יוזם התקשרות. בכך נוצרת תקלה משום שלא ניתן להגיע לשרת שלנו!

מכאן נובעת הבעייתיות עם PAT. כאשר יש שרת ברשת הלא חוקית, הנתב לא יודע להעביר אליו תקשורת.

port forward

כדי להתגבר על הבעיה, נתבים מאפשרים להוסיף רשומות לטבלת ה-NAT באופן ידני. לרשומה זו קוראים Port forward. למשל, נניח שברשת שלנו מותקן שרת web שכתובתו היא 192.168.0.200. שרת זה מחזיר דפי אינטרנט כאשר פונים אליו בפורט 80. ללא הגדרה של port forward, כאשר מישהו באינטרנט ינסה לגלוש לשרת שלנו, הוא יפנה לכתובת החוקית של הנתב (88.104.86.17:80) והנתב לא יידע שיש להעביר תעבורה שכזו את השרת. אם נבצע Port forward, נוכל להגדיר את הרשומה הבאה בטבלת ה-NAT:

88.104.86.17:80 = 192.168.0.200:80

בצורה זו יוכל הנתב שלנו להפנות את התעבורה לשרת ה-web שלנו.
גם תוכנות שיתוף הקבצים הופכות את המחשב שלנו לשרת. הרעיון של אימיול הוא "יש לי קבצים, אתם מוזמנים לבוא ולקחת אותם ממני. אני נותן את השירות בפורט 4662".

 הצורך ב-DMZ נולד בעצלנות
נניח שיש לנו שרת ברשת הפנימית שיש לו תפקידים רבים: הוא גם שרת FTP, יש עליו אתר אינטרנט, הוא שרת דואר, מריצים עליו אימיול ויש עליו שרתי משחקים – הכל על מחשב אחד. המשמעות היא שיש ליצור חוקים רבים של port forwarding. הגדרת DMZ נועדה לענות על הצורך הזה בדיוק! DMZ אומר בעצם, שכל תעבורה, שהיוזם שלה מגיע מהאינטרנט, יש להפנות למחשב אחד ויחיד. בכך חסכו מאיתנו עבודה 

בנוסף, הגדרת DMZ הינה דרך מצוינת לאתר תקלה. אם אתם חושבים שבעיית התקשורת נובעת בגלל צורך בחוק port forward, ניתן להגדיר זמנית DMZ על התחנה ולבדוק אם בעיית התקשורת נפתרה!

אולם, יש חיסרון גדול ל-DMZ. אם המחשב לא מוגן כראוי, ניתן יהיה לפנות אליו בפורטים של שיתוף קבצים, remote desktop והתקפות אחרות – ובכך, לפרוץ למחשב.

Port Redirect
ניקח מצב שבו יש לנו רשת ביתית פשוטה בבית. ברצוננו לבנות שני אתרי אינטרנט ולאחסן אותם בבית. הכתובת של השרתים הם 192.168.0.100 ו-192.168.0.200. כיוון שאנחנו עושים PAT, אנחנו יכולים לעשות הפנייה של פורט 80 רק פעם אחת. אם נפנה את פורט 80 לשרת אחד, לא נוכל להפנות את פורט 80 לשרת השני וההפך.
port redirect עונה בדיוק לבעיה זו. כפתרון, נוכל להגדיר את החוקים הבאים:

88.104.86.17:80 = 192.168.0.100:80
88.104.86.17:8080 = 192.168.0.200:80

ניתן לראות כי כאשר הנתב יקבל אליו בקשה לפורט 8080, הוא ייתרגם אותה ויבצע redirect לפורט 80 על השרת השני שלנו. לאחר שנבצע את ההגדרה יקרה הדבר הבא:

אם נקליד בדפדפן את הכתובת  88.104.86.17:80 אנחנו נגיע לשרת הראשון (192.168.0.100)
אם נקליד בדפדפן את הכתובת  88.104.86.17:8080 אנחנו נגיע לשרת השני (192.168.0.200)

תקלות

פורט טפוס, איך אני עושה את זה?
כברירת מחדל, האימיול משתמש בפורט 4662. כיוון שיש לנו שני מחשבים לכאורה יש בעיה. איך נפנה לשני מחשבים את אותו פורט? אפשר לעשות "קומבינה קטנה". במחשב הראשון לא ניגע. נגדיר בנתב שלנו הפניה של פורט 4662 על המחשב הראשון. במחשב השני ניכנס להגדרות של האימיול ונשנה את הפורט שלו (למשל ל-5662). כל שנותר כעת הוא לעשות חוק port forward נוסף בנתב שמפנה למחשב השני את פורט 5662.

port forward מפסיק לעבוד אחרי כמה ימים
תופעה זו נובעת כאשר לא מקבעים את כתובת ה-IP על המחשב שאליו פותחים את הפורט. port forward מוגדר על כתובת IP. כאשר לא מקבעים את הכתובת בשרת ה-
DHCP, שרת ה-DHCP עלול לשנות את הכתובת של המחשב ואז החוק שהגדרנו הופך ללא רלוונטי. פרטים נוספים ניתן למצוא בפרק שעוסק ב-DHCP