9.7. רשתות פרטיות ו-NAT¶
פרוטוקול IPv4 תוכנן עם ארבעה מיליארד כתובות, מה שנשמע מספיק באותה תקופה. זה לא מספיק. כל בית, משרד ומפעל המחובר לאינטרנט זקוק לבלוק כתובות משלו עבור ההתקנים הפנימיים שלו, והוספת כל המצלמות, הטלפונים ומכשירי החשמל שבעולם לא משאירה ארבעה מיליארד כתובות פנויות.
הפתרון העוקף שעליו התייצב האינטרנט הוא רשתות פרטיות: רוב ההתקנים ברשת מקומית משתמשים בכתובות שאינן ייחודיות גלובלית אלא רק בתוך אותה רשת, והתקן יחיד בקצה מתרגם בין שני העולמות. המצלמה, כמעט תמיד, יושבת על אחת מהרשתות הפרטיות הללו.
9.7.1. טווחי הכתובות הפרטיות¶
שלושה טווחי IPv4 שמורים בתור לא ניתנים לניתוב באינטרנט הציבורי. כל רשת מקומית רשאית להשתמש בכתובות מתוך הטווחים הללו ללא תיאום עם איש, כיוון ששום נתב מחוץ לרשת המקומית לעולם לא ינסה למסור אליהן:
10.0.0.0–10.255.255.255(16 מיליון כתובות; נפוץ ברשתות ארגוניות גדולות יותר).172.16.0.0–172.31.255.255(כמיליון כתובות; פחות נפוץ בשטח).192.168.0.0–192.168.255.255(65 אלף כתובות; ברירת המחדל כמעט בכל נתב ביתי).
ברשת ביתית טיפוסית, גם המצלמה וגם המחשב הנייד המתקשר איתה יושבים על כתובות 192.168.x.x, כיוון שזהו הטווח שהנתב הביתי בוחר עבור הרשת שהוא מארח.
9.7.1.1. כיצד נעשה שימוש במסכת הרשת¶
הדף כתובות IP הציג את הסימון /24. הסיבה שהוא חשוב כאן היא שמסכת הרשת היא מה שכל התקן משתמש בו כדי להחליט לאן חבילה צריכה ללכת בשלב הבא. בכל פעם שהמצלמה שולחת חבילה, היא מיישמת את מסכת הרשת שלה על כתובת היעד ובוחנת את התוצאה:
אם היעד חולק את ביטי הרשת עם כתובתה של המצלמה עצמה, היעד נמצא על אותה רשת מקומית. המצלמה שולחת אליו את החבילה ישירות.
אם היעד אינו חולק את ביטי הרשת, הוא חייב להימצא על רשת אחרת כלשהי. המצלמה שולחת את החבילה אל שער ברירת המחדל שלה (הנתב המוגדר אוטומטית בעת חיבור הקו) ומאפשרת לשער לטפל בשאר.
אותה בדיקה יחידה – ”האם אנו חולקים ביטי רשת?“ – היא מה שמסכת הרשת נועדה אליו. זו גם הסיבה שרשתות ביתיות מוגדרות כברירת מחדל ל-/24: מגבלה של 254 התקנים מתאימה למשק בית בנוחות ושומרת על פשטות הרשת.
9.7.2. תרגום כתובות רשת (Network Address Translation)¶
מצלמה על 192.168.1.50 אינה יכולה פשוט לשלוח חבילה לשרת באינטרנט הציבורי – האינטרנט הציבורי אינו מנתב אל 192.168.x.x. הנתב הביתי פותר זאת באמצעות תרגום כתובות רשת, או NAT, והוא עושה זאת באופן שקוף.
NAT משכתב את כתובת המקור של חבילות יוצאות לכתובת הציבורית של הנתב, והופך את השכתוב על תשובות נכנסות, כך שהתקנים פרטיים נראים כחולקים כתובת ציבורית אחת.¶
לנתב יש שתי כתובות: אחת פרטית על הרשת המקומית (בדרך כלל 192.168.1.1) ואחת ציבורית המוקצית על ידי ספק האינטרנט. כאשר המצלמה שולחת חבילה לכתובת ציבורית, הנתב
מתעד את הכתובת הפרטית של המצלמה + הפורט ומשייך אותם לפורט יוצא זמני משלו;
משכתב את כתובת המקור על החבילה לכתובת הציבורית שלו (ואת פורט המקור לפורט היוצא הנבחר);
שולח את החבילה המשוכתבת החוצה דרך הצד הציבורי.
כאשר התשובה חוזרת ממוענת לכתובת הציבורית של הנתב + הפורט, הנתב מחפש את השיוך, משכתב את היעד בחזרה לכתובת הפרטית של המצלמה + הפורט, ומוסר אותה בצד המקומי. המצלמה לעולם אינה יודעת שהשכתוב התרחש; השרת לעולם אינו יודע את המקור המקורי.
NAT הוא מה שהופך רשתות ביתיות למעשיות. יש לו גם שתי השלכות שכדאי לדעת עליהן.
9.7.3. מה NAT משנה¶
יציאה החוצה היא קלה. מצלמה על רשת פרטית יכולה לדבר החוצה בחופשיות. בכל פעם שהיא פותחת חיבור TCP או שולחת חבילת UDP לשרת מרוחק, NAT מקים את השיוך אוטומטית. רוב יישומי המצלמה עובדים בכיוון זה: לכוד תמונה, דחוף אותה לשרת כלשהו, קבל את התשובה.
כניסה פנימה היא קשה. התקן על האינטרנט הציבורי אינו יכול להתחבר ישירות למצלמה על רשת פרטית. אין שיוך שהנתב יכול לחפש כאשר חבילה לא מבוקשת מגיעה לכתובתו הציבורית, ולכן לחבילה אין לאן ללכת. הנתב או משליך אותה או מוסר אותה לשירות הפועל על הנתב עצמו.
שלושה פתרונות עוקפים למקרה של כניסה פנימה נפוצים, בערך בסדר עולה של מעשיות:
העברת פורטים (Port forwarding). הגדר את הנתב לכוון את כל החבילות הנכנסות על פורט ציבורי נבחר אל התקן פרטי מסוים. דורש גישת מנהל לנתב; שביר כאשר הכתובת הציבורית של הנתב משתנה.
VPN. הרץ רשת פרטית וירטואלית שמכניסה את המצלמה לאותה רשת לוגית כמו מי שצריך להגיע אליה. כבד; מחוץ להיקף עבור רוב פריסות המצלמה.
חיבור ביוזמת היציאה החוצה. המצלמה מתחברת החוצה לשרת ידוע כלשהו על האינטרנט הציבורי ומשאירה את אותו חיבור פתוח; השרת משתמש בחיבור הקיים כדי לדחוף הודעות בחזרה. כך עובדות התראות דחיפה ורוב פרוטוקולי ההתקנים המחוברים לענן, וזהו הדפוס שרוב יישומי המצלמה בסופו של דבר משתמשים בו.
NAT בלתי נראה לקוד ה-Python על המצלמה. הסקריפט פשוט מדבר עם כל יעד שהוא צריך; הנתב מטפל בתרגום מאחורי הקלעים. אך כיוון החיבור כן חשוב, ו-NAT הוא הסיבה לכך ש“המצלמה פונה החוצה אל שרת ענן“ הוא צורה הרבה יותר קלה מ“שרת ענן פונה פנימה אל המצלמה“.