VPN מאחורי NAT שאינכם יכולים להגדיר: מה עדיין עובד
בלי העברת פורט, לחבילה נכנסת אין לאן ללכת. ניקוב חורים, UPnP וממסרים משנים זאת, אבל רק תחת התנהגות NAT מסוימת.
כל נקודת קצה של מנהרה זקוקה לכתובת ולפורט שהצד השני יכול להגיע אליהם, ונתב שאינכם מנהלים אותו הוא הסיבה הרגילה לכך שהדרישה הזו נכשלת. החלק המעניין אינו שקיימים טריקים, אלא שכל אחד מהם תלוי בתכונה של טבלת מיפוי שאינכם רואים מהלקוח. שתיים מהתכונות האלה קובעות כמעט הכול: איך נוצר מיפוי, והאם הוא מקבל חבילות מכתובת שהפנים מעולם לא יצר איתה קשר. מיינו את הסביבה לפי התכונות האלה והפתרונות העקיפים מפסיקים להיות פולקלור.
טבלת המיפוי קובעת הכול
תרגום כתובות רשת מחזיק טבלה שבה כתובת ופורט פנימיים נרשמים מול כתובת ופורט ציבוריים. תשובות שתואמות רשומה מתורגמות חזרה, ולחבילה שמגיעה מבחוץ בלי רשומה תואמת אין יעד כלל. ההתנהגות האחת הזו מסבירה מדוע מאזין מאחורי הנתב אינו נגיש מהאינטרנט. היא גם מסבירה מדוע החבילה הראשונה בכל כיוון חייבת לנבוע מבפנים.
הביטו בטבלה מצד הנתב והפתרונות העקיפים נעשים ברורים: או שמשהו יוצר רשומה קבועה, או שמשהו יוצר רשומה זמנית ושומר עליה טרייה, או שהתעבורה כלל לא הולכת בדרך הזו. שאר המאמר הוא שלושת המקרים האלה לפי הסדר. שום דבר כאן אינו תלוי בתכונה של ספק מעבר למה שהטבלה רושמת.
מה שירות המפגש יכול לעשות ומה הוא לא יכול
ניקוב חורי UDP משתמש ברשומה היוצאת כפתח זמני במקום להביס את המסנן. שני העמיתים פונים לשירות מפגש, שלומד כל נקודת קצה ציבורית ומחזיר לצד השני את נקודת הקצה שלו. אז שניהם שולחים זה לזה, וכל חבילה יוצאת יוצרת או מרעננת את הרשומה שמאפשרת לתשובה להיכנס. הסדר הוא מה שגורם לזה לעבוד, והסדר הוא גם מה שעושה את זה שביר: עמית ששולח לפני שהצד השני יצר את הרשומה שלו פשוט נזרק, בעוד שניסיון חוזר כעבור רגע מצליח. השירות עצמו אינו נושא תעבורת VPN, ולכן המנוף היחיד שלו הוא התזמון שהוא מתאם.
התנהגות המיפוי קובעת את השאר, ו RFC 4787 מכנה את שלוש הצורות: בלתי תלויה בנקודת הקצה, תלויה בכתובת, ותלויה בכתובת ובפורט. באחרונה, הפורט שהעמית חייב לכוון אליו משתנה עם כל יעד, ולכן התחזית מפסיקה להיות אמינה. שם הטכניקה מגיעה למבוי סתום, מפני ש-NAT ברמת ספק וקיר אש ארגוני נוקשה שניהם מסירים את יכולת החיזוי שהשיטה זקוקה לה, וכל כמות של ניסיונות חוזרים לא מחזירה אותה.
Keepalive, אתחולים ונקודת הקצה שמתקדמת
נתיב מנוקב הוא זרימה ולא מאזין, ולכן כל מה שרץ מעליו חייב לשרוד שינוי. עליו להחזיק את המיפוי בחיים בתעבורה תקופתית, לשים לב מתי נקודת הקצה הציבורית זזה, ולהתבסס מחדש לאחר אתחול הנתב או הקצאה מחדש של הכתובת. מוצרי mesh VPN שמים את ההיגיון הזה במישור הבקרה שלהם, בעוד ששרת פשוט משאיר אותו לכם. Keepalive עוזרים רק כל עוד אותו מיפוי שורד, והם עולים בסוללה בלקוח נייד, ולכן מרווח אגרסיבי אינו בחינם.
מחשב נייד שישן שעה חוזר בדרך כלל לנקודת קצה ציבורית אחרת. כל מה שמבסס את הנתיב מחדש חייב לרוץ שוב מבפנים, מה שמחזיר את אותה דרישה ללקוח.
שלוש דרכים לעקוף העברה חסרה
הדרך הראשונה מבקשת מהנתב ליצור את הרשומה בעצמו, דרך UPnP IGD, NAT-PMP או PCP, כשהתכונה קיימת ומופעלת. השנייה מוסרת את התעבורה לממסר עם כתובת ציבורית, שתמיד עובד ותמיד עולה רוחב פס ועוד גבול אמון שונה. השלישית הופכת את הכיוון: המארח הפנימי פותח מנהרה יוצאת לשרת ציבורי וכל השאר נוסע בתוכה.
[Peer]
PublicKey = 6yGj3kQ2wVb8sTn1pLx4dRc7hZa9mKf2uYe5oNq0iXw=
Endpoint = relay.corp.internal:51820
PersistentKeepalive = 25
AllowedIPs = 10.44.0.0/24
נקודת קצה של ממסר הופכת את העסקה הזו לגלויה בתצורת הלקוח, שבה נקודת הקצה היא ממסר ולא הכתובת של העמית עצמו. Keepalive מתמשך שומר על המיפוי חם, והקידומות המותרות קובעות מה הלקוח רשאי לשלוח דרכו. מנהרה הפוכה מהמארח הפנימי היא אותו רעיון עם בעלים אחר, והיא אינה דורשת שום שינוי ב-NAT. כל אחת מהשלוש מסירה את דרישת הכניסה בלי להביס קיר אש שחוסם תעבורה לא מבוקשת לפי תכנון, מפני שהתעבורה עדיין מתחילה בפנים.
התאימו את הפתרון העקיף למי שמחזיק בנתב
אם אתם מנהלים את הנתב, העברת UDP סטטית פשוטה יותר לביקורת מכל סכימת ניקוב, והיא נכשלת בדרכים שאתם רואים. אם לא, בררו אם הספק מציע ממסר או מישור בקרה מתארח, והאם המדיניות תאפשר להשתמש בו. אם אין אף אחד מהם, האפשרויות שנותרו הן מנהרה הפוכה או השלמה עם כך שנקודת הקצה אינה נגישה מבחוץ. תיעוד מה השתמשתם חשוב יותר מכפי שזה נשמע, מפני שהאפשרויות נבדלות במי יכול לצפות בתעבורה ובמה קורה כשצד שלישי משנה משהו.
שימו לב אם הנתיב שאליו הגעתם היה ישיר או דרך ממסר, מפני שהעובדה האחת הזו מנבאת גם השהיה וגם התנהגות כשל. RFC 4787 נשאר ההתייחסות להתנהגות המיפוי שמתחת לכל זה, וקריאת פרק המיפוי שלו מהירה יותר מאשר לבדוק שלושה פתרונות עקיפים ברצף. לטבלה לא אכפת איזו אפשרות בחרתם; היא רק רושמת מה החבילה הבאה רשאית לעשות.