iPhone uygulamanız sistem VPN’ini neden açıp kapatamaz
Genel bir uygulama sistem VPN’ini değiştiremez, durumunu okuyamaz veya bağlantıyı zorlayamaz. On Demand kuralları, denetlenen cihazlardaki Always On profilleri ve MDM seçeneklerdir.
Bir ürün yöneticisi şirket VPN’ini açan bir düğme ister ve talep önemsiz görünür. iOS’ta bu küçük bir özellik değildir; kamusal sözleşmenin dışındadır ve her geçici çözüm ya incelemede kalır ya da sonraki sürümde kırılır. Talebi platformun gerçekten izin verdiği şeylerden geçirin, tasarım büyük ölçüde kendini yazar. Bir uygulama bir VPN yapılandırmasına sahip olabilir ve onu başlatabilir. Bir uygulama sistem anahtarına ulaşamaz, kendi oluşturmadığı bir profilin durumunu okuyamaz ve bir kullanıcıyı isteğine karşı bağlı tutamaz.
Kullanıcının kastettiği üç şeyden başlayın
API’leri ayırmadan önce anlamları ayırın. Bazen kullanıcı uygulamanızın tünelinin bağlı olmasını ister, bazen başka birinin kurduğu bir profil için Ayarlar’daki anahtarın açılmasını ister, bazen de telefonun tünel olmadan gezinememesini ister. Bunlar üç farklı mekanizmaya karşılık gelir ve yalnızca ilki sıradan bir uygulamaya açıktır.
İkinci anlam Stack Overflow sorularını üreten anlamdır ve desteklenen bir yanıtı yoktur. Ayarlar’daki anahtar kullanıcıya, yönetilen cihazlarda ise profile aittir. Hiçbir genel API VPN yapılandırmalarını listelemez, sistem tünelinin ayakta olup olmadığını bildirmez veya onu değiştirmez.
Bir uygulama gerçekte ne oluşturabilir
NetworkExtension bir uygulamaya NEVPNManager aracılığıyla kendi yapılandırmasını verir. Personal VPN hakkı ve kullanıcının onayıyla uygulama, Ayarlar’da kendi adıyla görünen bir yapılandırma kaydeder ve o tek bağlantıyı başlatabilir veya durdurabilir. Bu gerçek ve incelenebilir bir yetenektir ve aynı zamanda tüm kapsamdır: yönetici yalnızca kendi oluşturduğunu okur ve yazar.
Hak otomatik değildir. Apple’dan talep eder ve uygulamanın neden bir tünele ihtiyaç duyduğunu gerekçelendirirsiniz; tek amacı başkasının profilini açmak olan bir istemcinin iyi bir yanıtı yoktur. Paket tünel sağlayıcıları aynı kuralı farklı bir sınıfla izler: NETunnelProviderManager, uygulamanın kendisinin kurduğu sağlayıcı tabanlı yapılandırmalara sahiptir. İki yolun hiçbiri MDM’in teslim ettiği bir profile ulaşmaz.
Onay kaydetme anında da geçerlidir. Yapılandırma yazmak kullanıcıya sorar ve bu soru, kolaylık için bir uygulamanın bastırabileceği bir şey değildir.
Durumu okumak da aynı duvara çarpar
Durum kontrolden daha dostça görünür ve aynı derecede kapalıdır. NEVPNStatus uygulamanın kendi yapılandırması için geçersiz, bağlantı kesildi, bağlanıyor, bağlı, yeniden doğruluyor veya bağlantı kesiliyor durumlarını bildirir ve her değişiklikte bir bildirim tetiklenir. Yönetim profili tarafından kurulan bir tünel hakkında hiçbir şey söylemez ve yardım masasının gerçekten görmek istediği durum tam olarak budur.
Ağ yolu izleme ve arayüz değişiklikleri tasarım incelemelerinde yedek olarak önerilir. Uygulamanın trafiğinin izlediği yolu tanımlarlar; bu yol VPN durumundan bağımsız nedenlerle değişir ve bunları VPN göstergesi olarak kullanmak her iki yönde yalan söyleyen bir arayüz verir.
On Demand ve Always On gerçek kaldıraçlardır
Desteklenen kaldıraçlar uygulamada değil profilde yaşar. On Demand kuralları sisteme ne zaman bağlanacağını söyler: eylemlerle birlikte sıralı bir koşullar listesi; bunu kodunuz değil işletim sistemi değerlendirir. Herhangi bir arayüzde bağlanan bir kural, hiçbir uygulamaya kontrol vermeden sürekli bağlı hissi yaratır.
Always On VPN zorlama mekanizmasıdır ve denetime bağlıdır. Denetlenen bir cihazda MDM tüneli ayakta tutan bir profil kurar; denetlenmeyen kişisel bir telefonda aynı anahtarlar aynı davranışı üretmez. Bu asimetri kasıtlıdır ve hiçbir yük anahtarı kombinasyonu onu ortadan kaldırmaz. Gereksinim gerçekten VPN’in açık olması gerektiğiyse, gereksinim aslında cihazın yönetilmesi gerektiğidir.
İkisinin arasında daha zayıf kuzen oturur: kullanıcı bağlantıyı kestikten sonra yeniden bağlanan bir kural. Kural bir sonraki değerlendirmede yeniden bağlanır; bu hemen ile aynı şey değildir ve bilerek bağlantı kesen kullanıcı farkı fark eder. Kilit vaat etmek yerine arayüzü bu boşluğun etrafında tasarlayın.
Desteklenen yolu gönderin
Herhangi bir kod var olmadan önce dört soru mekanizmayı belirler: cihaz kime ait, denetim altında mı, tüneli hangi istemci sonlandırıyor ve profil nereden geliyor. Bunlardan biri bilinmiyorsa özellik talebi tahmin için hazır değildir.
Sistem VPN’ine dokunan özel bir API bir demoyu geçer ve incelemeden kalır; başka bir yolla gönderilirse sonraki iOS sürümünde kırılır. Bir anahtar için bu değiş tokuşun değerli bir sürümü yoktur.
Yönetim telemetrisi ayrı bir kanaldır: bir profilin kurulu olduğunu ve cihazın uyumlu olup olmadığını bildirir; bu, uygulama başına bir kontrol yüzeyi değil raporlamadır. Akışı her güncellemeden sonra gerçek bir cihazda test edin, çünkü desteklenen davranış işletim sisteminde yaşar ve işletim sistemi hareket eder.