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

שלב 1: לגלות מתי האפליקציה מסרבת

התזמון הוא המבחין הראשון. נקו את מאגר הלוג, שחזרו את התקלה והביטו במה שהאפליקציה עשתה לפני שהתלוננה:

adb logcat -c
# reproduce the failure in the app
adb logcat -d | grep -iE 'vpn|network|connect|http' | tail -60

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

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

שלב 2: לקרוא את ההשקפה של הטלפון עצמו על הרשת

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

val cm = context.getSystemService(ConnectivityManager::class.java)
val caps = cm.getNetworkCapabilities(cm.activeNetwork)
val onVpn = caps?.hasTransport(NetworkCapabilities.TRANSPORT_VPN) == true

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

מתחנת עבודה אפשר לראות את אותו מצב במכשיר בדיקה עם adb shell dumpsys connectivity ובחיפוש אחר רשומת רשת ה‑VPN. השוו ריצה עם המנהרה למעלה לריצה איתה למטה, ושמרו את שתי הפלטים.

שלב 3: לקרוא מה השרת באמת רואה

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

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

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

שלב 4: להתאים את הראיות לאחד משלושה פסקי דין

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

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

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

שלב 5: ללכת בדרך הנתמכת ולאמת אותה

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

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

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

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