המחשב הנייד עובר מ-Wi-Fi של המשרד לנקודת גישה של טלפון, המנהרה מחזיקה עוד כמה שניות ואז התעבורה נעצרת בזמן שהממשק ממשיך להצהיר שהוא מחובר. בשרת, רשימת המצב ממשיכה להציג את הכתובת הציבורית הישנה. זהו המצב שלשמו קיים float, והוא גם המצב שבו אנשים מצפים ממנו ליותר בהרבה ממה שהוא עושה. הבנה נכונה של הגבול הופכת תקיעה מבלבלת לשינוי תצורה של שורה אחת או לחקירה אחרת לגמרי.

מה float מרפה, ומה הוא לעולם אינו מרפה

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

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

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

החבילה שמזיזה סשן חייבת לעבור אימות

התחילו סשן בדרך הרגילה מול הקצה המרוחק המוגדר, ו-float מטפל במה שקורה כשהמיפוי משתנה. מפעיל סלולרי שממספר מחדש באמצע הזרימה, שער NAT שכותב מחדש את מיפוי הפורט שלו, או מחשב נייד שמחליף קישור עולה, כולם יוצרים אותה צורה: חבילות מאומתות מ-tuple חדש, שמגיעות לסשן שעדיין מאמין בישן.

כששואלים אם float עובד, ההוכחה השימושית היא לחיצת יד שהושלמה ואחריה שינוי מקור שהתקבל, ולא שורת יומן על הכתובת בלבד. קשרו את הכתובת החיצונית הישנה והחדשה לסשן שנשאר בחיים, ואז אשרו שהתעבורה אכן המשיכה דרך המנהרה.

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

גילוי הוא מנגנון נפרד לחלוטין

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

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

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

כאשר NetworkManager הוא הבעלים של הפרופיל

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

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

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

הוכיחו את המעבר במקום להניח אותו

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

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

לבסוף, תארו רק את המקרה שתרגלתם. שינוי כתובת מוצלח במהלך סשן אינו הוכחה לכך שהגירות DNS, מימוש לקוח אחר או פרופיל שנבנה מחדש יתנהגו אותו דבר. תיעוד link-options מציין את היקף האפשרות במדויק; יומן הבדיקה שלכם צריך לציין איזה חלק מהיקף זה כיסיתם בפועל.

מאמרים קשורים