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

זהו קודם את סוג החיבור

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

adb shell dumpsys connectivity | grep -i -A12 "VPN"
adb shell cmd connectivity list-owners 2>/dev/null || true

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

רשמו את הבעלים ואת היקף הפרופיל

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

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

השוו את המצב המבוקש, המתקבל והמיושם

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

StageWhere to lookWhat it proves
RequestedThe app's profile editor or imported fileWhat the owner intends to use
ReceivedSanitized app log of server-supplied optionsWhat the peer actually pushed
AppliedLink properties and routes after connectWhat the device is really using

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

adb shell ip addr show tun0
adb shell ip route show table all | head -40

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

ערכו את הארטיפקט שהבעלים באמת קורא

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

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

כתבו את הערת התמיכה בלי לחשוף סודות

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

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

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

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