28 במרץ 2010

NAT



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

אז ככה..
מה זה NAT?
בתרגום פשוט - Network Address Translation - תרגום כתובות רשת.
בתחילת דרכו של האינטרנט בוצעה חלוקת כתובות IP ע"י ארגון שנקרא IANA ראשי תיבות (Internet Assigned Numbers Authority), חלוקת הכתובות התבצעה ללא הבחנה ולכל דורש.
לקראת שנות ה-90 עם התפתחות הטכנולוגיה, הבינו בארגון IANA שכתובות ה-IP הולכות ואוזלות וצריך למצוא פתרון אשר יאפשר את המשך השימוש באינטרנט (היום כבר קיים IPv6).

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

אבל איך עושים את זה?

כפי שציינתי במאמר IP Subnneting בוצע חלוקת ל-Classes אשר הגדירו מהן כתובות פנים ארגוניות (פרטיות) ומהן כתובות חיצוניות (ציבוריות).

תזכורת קצרה לסוגי ה- Classes השונים :

Class A: 0-127.0.0.0

Class B: 128.0.0.0-191.0.0.0

Class C: 192.0.0.0-223.0.0.0

מהן כתובות פרטיות?

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, בואו נבין את הסוגים.
אז ככה...
- הסוג הראשון עליו נדבר הוא Static Nat,
Static Nat משמש למיפוי כתובת חיצונית לכתובת פנימית ולהפך - אם אני רוצה שמחשב מסויים ברשת ייראה לעולם ככתובת ציבורית אזי אני מגדיר למחשב לצאת עם כתובת חיצוניות וזו קבועה ואינה משתנה.

- הסוג השני שבו אנו נשתמש לעתים קרובות יותר הוא נקרא PAT - Port Address Translation
חשוב לציין שאנו משתמשים ב-PAT כאשר אנו מעוניינים להגדיר כתובת IP אשר תמפה שרת אשר מספק שירות מסויים לדוגמא :
שרת דואר, שרת WEB או כל שרת אחר יש צורך במיפוי ה-Port מהכתובת הציבורית אשר העולם פונה אליה אל הכתובת הפנימית אשר עליה ממוקם השירות המבוקש,

לדוגמא:
אם יש לי שרת דואר (Exchange) בארגון ואני מעוניין שתהיה גישה אליו משרתי דואר אחרים אני מבצע את המיפוי הסטטי בצורה הבאה :

212.235.111.15:25-----> 192.168.2.10:25

מה שהגדרתי פה בעצם זה שכל מי שפונה לכתובת IP 212.235.111.15 בפורט 25 בעצם ממופה לכתובת פנים ארגונית שהיא 192.168.2.10 בפורט 25.

במילים אחרות כל ההגדרה שביצעתי כאן נקרא PAT, שזה בתרגום פשוט מיפוי פורטים - Port Address Translation.

נמשיך..

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

ואחרי התאוריה, נעבור לחלק המעניין :) ההגדרות בסיסקו שלנו:

אז איך אנחנו מגדירים NAT:

- תחילה עלינו לזהות את המתאמים, כלומר מי מבצע NAT פנימי ומי מבצע NAT חיצוני.
 את הזיהוי אנו מבצעים כפי שציינתי - תחת המתאם:

יש להכנס אל המתאם הרצוי, לדוגמא את Vlan1 המשמש לפנים הרשת נגדיר בפקודה הבאה:

R1(Config)# int vlan1

R1(Config)# ip nat inside

לאחר מכן נגדיר את המתאם החיצוני, במקרה שלנו חייגן PPPOE:

R1(Config)# int dialer 1

R1(Config)# ip nat outside

בכך הגדרנו אילו מתאמים יבצעו NAT החוצה ואילו מתאמים יבצעו NAT פנימה.

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

אז נגדיר ACL בפקודה הבאה :

R1(Config)# Ip access list standard Nat_Addresses

R1(config-ext-nacl)#permit 172.30.30.0 0.0.0.255

R1(config-ext-nacl)#permit 10.10.10.0 0.0.0.255

כעת הגדרנו ACL אשר מאפשר ל-2 רשתות לגשת לאינטרנט ולהיות מתורגמות לכתובות חיצוניות.

מה שנותר לנו זה להגדיר את ההגדרות של ה-NAT עצמו וזאת בצורה הבאה:

R1(config)# ip nat inside source list Nat_Addresses interface Dialer1  overload

ועכשיו בתרגום לעברית , מה אומרת לנו הפקודה משמאל לימין -
ip nat - הגדר NAT
inside - מבפנים החוצה
list - בהתאם ל ACL שהגדרנו מראש שנקרא Nat_Addresses
Dialer1 - דרך החייגן\החיבור לספקית האינטרנט.
overload- תאפשר למספר כתובות לצאת על גבי כתובת אחת.

עכשיו אני אדגים כיצד לבצע NAT כאשר רכשנו מספר כתובות IP חיצוניות (Pool).

תחילה נגדיר את ה-Pool של הכתובות שרכשנו.

R1(config)#ip nat pool Nat_Pool 10.41.10.1 10.41.10.41 netmask 255.255.255.0


כעת נגדיר ACL לכתובות פנימיות שיתורגמו לכתובות שיצרנו בהגדרת ה-NAT למעלה.

R1(config)#access-list 100 permit ip 10.3.2.0 0.0.0.255 any
 
כעת מה שנותר הוא להחיל את ההגדרות בפקודה הבאה:
 
Router(config)#ip nat inside source list 100 pool Nat_Pool interface Dialer1 overload

ולסיכום אני רוצה להדגים פקודות One To One Nat כלומר מיפוי של כתובת Ip חיצונית לפנימית ולהיפך:

R1(config)#ip nat inside source static 10.3.2.11 10.41.10.12

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

R1(Config)#ip nat inside source static tcp 212.235.111.15 80 172.16.10.8 80

מה שהגדרתי בפקודה זו בעצם ממפה לנו את פורט 80 מכתובת חיצונית 212.235.111.15 לכתובת פנימית 172.16.10.8 לפורט 80, שזה שרת ה-Web הפנימי.

לסיכום,
כל נושא ה-NAT הוא נושא מאוד פשוט,
צריך רק להבין את התפיסה הכללית של למה אנחנו משתמשים ב-NAT.

כמו בכל פוסט, אם יש לכם שאלות אתם מוזמנים לפנות אליי במייל.

מקווה שהחכמתם.

חג שמח
אבי


4 תגובות:

  1. אנונימי29 מרץ, 2010

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

    מאחל יצחק מעסה בכיר

    השבמחק
  2. אנונימי31 מרץ, 2010

    כתוב בצורה רהוטה וברורה להפליא!
    תענוג לקרוא

    השבמחק
  3. אנונימי06 אפריל, 2010

    יופי של מאמר

    רק יש לך טעות קטנה שכחת להוסיף interface
    בשורה של R1(config)# ip nat inside source list Nat_Addresses overload

    לפני ה OVERLOAD

    בהצלחה עם הבלוג

    השבמחק