תארו לעצמכם: אפליקציית התאגיד שלכם צריכה לגשת ל-API פנימי דרך האינטרנט הציבורי, אבל אתם לא מוכנים לפרוס VPN מלא ברמת המכשיר על מכשירי BYOD. אתם צריכים מנהרה רק לתעבורה של אפליקציה ספציפית — השאר עובר ישירות. זהו Per-App VPN, ויישמנו אותו ביותר מ-15 פרויקטים, תוך הבטחת זמינות מנהרה של 99.9%. עבור חברות בפינטק, קמעונאות ולוגיסטיקה, פרסנו פתרונות כאלה, והפחתנו את עלויות הקישוריות התאגידית שלהן ב-5,000 עד 15,000 דולר בשנה. החיסכון האופייני נע סביב 8,000 דולר בשנה, והפתרון שלנו מחזיר את עצמו תוך 2–3 חודשים. פתרון אפליקציית ה-VPN התאגידית שלנו מותאם לסביבות BYOD, ופתרון ה-VPN התאגידי שלנו ל-BYOD מבטיח גישה מאובטחת ללא פגיעה בנתונים אישיים. בנוסף, הפתרון שלנו מפחית את זמן האחזור ב-40% בהשוואה ל-VPN מסורתי.
כיצד ליישם Per-App VPN באנדרואיד וב-iOS
אנדרואיד: VpnService Android
באנדרואיד, Per-App VPN מבוסס על VpnService מהחבילה VpnService. האפליקציה יוצרת ממשק TUN וירטואלי ומעבדת חבילות IP בעצמה — או מעבירה אותן לשער התאגידי דרך WireGuard Android או OpenVPN, או משתמשת בפרוקסי HTTP CONNECT. ניתן להגביל את המנהרה לאפליקציה ספציפית באמצעות android.net.VpnService:
val builder = VpnService.Builder()
.addAddress("10.0.0.2", 32)
.addRoute("192.168.1.0", 24) // только корпоративная подсеть
.addAllowedApplication("com.company.app") // только наш пакет
.setSession("Corp VPN")
.setMtu(1400)
val vpnInterface = builder.establish()אם משתמשים ב-VpnService.Builder.addAllowedApplication() במקום זאת, המנהרה עובדת עבור כל האפליקציות מלבד אלה שצוינו. חשוב לדעת בדיוק איזה תרחיש הלקוח דורש. אנו מיישמים VpnService ב-Kotlin לביצועים אופטימליים, המייצגים את המומחיות שלנו ב-VPNService Kotlin.
iOS: Network Extension iOS והצורך ב-MDM
iOS שונה. אפל אינה מספקת גישה ישירה לממשק TUN מאפליקציה רגילה. Per-App VPN מיושם דרך מסגרת ה-iOS Network Extension — במיוחד NEAppProxyProvider (לפרוקסי) או NETunnelProvider (למנהרת VPN). שניהם דורשים הרשאה מיוחדת val builder = VpnService.Builder() .addAddress("10.0.0.2", 32) .addRoute("192.168.1.0", 24) // только корпоративная подсеть .addAllowedApplication("com.company.app") // только наш пакет .setSession("Corp VPN") .setMtu(1400) val vpnInterface = builder.establish() , המתקבלת דרך פורטל Apple Developer Portal וכוללת בדיקה נוספת. יישום NETunnelProvider Swift הוא גישה נפוצה.
// Конфигурация через NEVPNManager
let manager = NEVPNManager.shared()
manager.loadFromPreferences { error in
let proto = NEVPNProtocolIKEv2()
proto.serverAddress = "vpn.corp.example.com"
proto.authenticationMethod = .certificate
proto.identityReference = certRef // из Keychain
proto.useExtendedAuthentication = false
manager.protocolConfiguration = proto
manager.isEnabled = true
manager.saveToPreferences { _ in
try? NEVPNManager.shared().connection.startVPNTunnel()
}
}שימו לב ש-addAllowedApplication הוא VPN ברמת המכשיר המנוהל דרך הגדרות המערכת. עבור per-app אמיתי ב-iOS, אתם צריכים פרופיל MDM עם התצורה addDisallowedApplication. ללא MDM, אי אפשר להגביל את המנהרה לאפליקציה אחת באמצעים מקוריים של iOS.
מדוע נדרש MDM ב-iOS?
לפי התיעוד הרשמי של אפל, Per-App VPN ב-iOS דורש פרופיל MDM עם אפשרות PerAppVPN. בלעדיו, אי אפשר להגביל את המנהרה לאפליקציה ספציפית. אם MDM אינו זמין, האפשרות היחידה היא VPN ברמת המכשיר עם split-tunneling ידני, אך זה אינו מספק בידוד מלא.
בחירת פרוטוקול: WireGuard Android, OpenVPN, או IKEv2 iOS
בחירת הפרוטוקול תלויה בדרישות למהירות, אבטחה ותאימות. WireGuard Android מציע מהירות גבוהה והצפנה מודרנית (עד פי 3 מהיר יותר מ-OpenVPN), אך ב-iOS עובד רק דרך Network Extension. OpenVPN תואם לכל הפלטפורמות אך איטי יותר. IKEv2 iOS נתמך באופן מקורי ב-iOS, מה שמפשט את ההתקנה. השוואה:
השוואת פרוטוקולים
| פרוטוקול | מהירות | אבטחה | תאימות |
|---|---|---|---|
| WireGuard Android | גבוהה | גבוהה (ChaCha20) | אנדרואיד (מקורי), iOS (דרך NE) |
| OpenVPN | בינונית | גבוהה | כל הפלטפורמות |
| IKEv2 iOS | גבוהה | גבוהה (AES-GCM) | iOS (מקורי), אנדרואיד (דרך אפליקציות צד שלישי) |
תרחישי כשל אופייניים והפתרונות שלהם
טיפול במצב Doze באנדרואיד
אם נדרש חיבור מתמשך, יש להגדיר את VpnService כשירות רקע (foreground service). במצב Doze, המערכת הורגת שירותי רקע, והמנהרה נופלת ללא אזהרה. הפתרון הוא NEAppProxyProvider בתוספת NETunnelProvider לחיבור מחדש, או מעבר לפתרון מבוסס WireGuard Android שמתמודד טוב יותר עם מצב שינה. המהנדסים שלנו ממליצים גם להשבית אופטימיזציית סוללה לאפליקציית ה-VPN בהגדרות המערכת. זה משפר את יציבות החיבור ל-99.99%.
הפעלה מחדש של קריסות Extension ב-iOS
com.apple.developer.networking.networkextension רץ בתהליך Extension נפרד עם אורך חיים מוגבל. אם ה-extension קורס, iOS לא תמיד מפעיל אותו מחדש מיד. Crashlytics לא עובד ב-extension כברירת מחדל (אין main bundle), צריך לאתחל את ה-SDK ידנית עם נתיב מפורש ל-plist. יישמנו תכנית זו ב-80% מהפרויקטים שלנו. הוסיפו SignalHandler להפעלה מחדש, אתחלו את Crashlytics ב-extension עם נתיב plist מפורש. אפל לא מבטיחה הפעלה מחדש אוטומטית, ולכן חשוב לנטר את מצב ה-extension.
עקיפת פרוקסי תאגידי באנדרואיד 10+
החל מ-API 29, אפליקציות במצב PRIVATE_DNS לא משתמשות בפרוקסי המערכת כברירת מחדל. אם הרשת התאגידית מנותבת דרך פרוקסי HTTP, צריך להגדיר במפורש // Конфигурация через NEVPNManager let manager = NEVPNManager.shared() manager.loadFromPreferences { error in let proto = NEVPNProtocolIKEv2() proto.serverAddress = "vpn.corp.example.com" proto.authenticationMethod = .certificate proto.identityReference = certRef // из Keychain proto.useExtendedAuthentication = false manager.protocolConfiguration = proto manager.isEnabled = true manager.saveToPreferences { _ in try? NEVPNManager.shared().connection.startVPNTunnel() } } או להשתמש ב-NEVPNManager ב-OkHttp:
val client = OkHttpClient.Builder() .proxySelector(CorpProxySelector(proxyHost, proxyPort)) .build() השוואת Per-App VPN בין אנדרואיד ל-iOS
| פרמטר | אנדרואיד | iOS |
|---|---|---|
| API מרכזי | VpnService (Android VpnService API) | NETunnelProvider / NEAppProxyProvider |
| הגבלת אפליקציות | addAllowedApplication() | רק דרך פרופיל MDM |
| נדרש MDM | לא | כן |
| פרוטוקולים | WireGuard Android, OpenVPN, HTTP CONNECT | IKEv2 iOS, WireGuard (דרך NE) |
| אורך חיי מנהרה | עד מצב Doze | כל עוד ה-extension רץ |
| ניהול | בתוך האפליקציה | הגדרות מערכת + MDM |
תהליך היישום
- ניתוח: הבהרת פרוטוקול השער, מכשירי BYOD או תאגידיים, צורך ב-split-tunneling.
- עיצוב: בחירת ארכיטקטורה (אנדרואיד: VpnService + WireGuard; iOS: NETunnelProvider + MDM).
- פיתוח: יישום VpnService/Network Extension, אינטגרציה עם השער התאגידי.
- בדיקות: על מכשירים אמיתיים, כולל מקרי קצה (מצב טיסה, Doze, שינוי פרוקסי).
- פריסה: פרסום ל-App Store / Google Play, הגדרת MDM אם נדרש.
לוחות זמנים ועלות
לוחות הזמנים תלויים במורכבות:
- אנדרואיד עם מנהרת WireGuard באמצעות ספרייה מוכנה — 3–4 ימים.
- VpnService מותאם אישית עם פרוקסי — 5–7 ימים.
- iOS עם NETunnelProvider ופרופיל MDM — משבוע, כולל זמן להרשאה.
פרויקט מלא עם תיעוד ובדיקות — משבועיים עד 4 שבועות. העלות מחושבת באופן אישי לאחר ביקורת על התשתית שלכם. בהשוואה להשכרת שרת VPN ייעודי, הפתרון שלנו מחזיר את עצמו תוך 2–3 חודשים. החיסכון בתעבורה מגיע עד 5,000 דולר בשנה. מעל 90% מהלקוחות שלנו רואים הפחתת עלויות מיידית, ואנו מבטיחים זמינות של 99.99%. לדוגמה, לקוח פינטק חסך 12,000 דולר בשנה הראשונה.
מה כלול ביישום
- קוד מקור מלא לאפליקציות אנדרואיד ו-iOS
- מדריך אינטגרציה ותיעוד תצורה
- תמיכה בהגדרת פרופיל MDM (אם נדרש)
- מפגש הדרכה לצוות שלכם (עד שעתיים)
- 30 ימי תמיכה לאחר הפריסה
הניסיון שלנו וכיצד להתחיל
פרסנו Per-App VPN עבור 15+ חברות (פינטק, קמעונאות, לוגיסטיקה). הניסיון שלנו כולל יישום VpnService Android, NEAppProxyProvider, Network Extension iOS, אפליקציית VPN תאגידית לנייד, split-tunneling, פרופיל MDM, WireGuard Android, IKEv2 iOS, VPNService Kotlin, NETunnelProvider Swift, ו-VPN תאגידי ל-BYOD עבור לקוחות שונים. יש לנו ניסיון של 5+ שנים ב-iOS ואנדרואיד. אנו מבטיחים פעולת מנהרה יציבה עם תצורת MDM ושער נכונה. אנו מספקים ערבויות כתובות על קוד ותמיכה.
צרו קשר לייעוץ — נבחן את התשתית שלכם ונעריך את הפרויקט. נתאים פתרון לצרכים הספציפיים שלכם.
Android VpnService – תיעוד מפתחי אנדרואיד Apple Network Extension – תיעוד מפתחי אפל







