iPhone bir VPN'de mi? Bir iOS uygulaması gerçekte neyi görebilir
iOS SDK'da tek bir VPN bayrağı yoktur. Bir uygulama yalnızca kendi yapılandırmasını, bir durum bildirimini ve sınırlı kapsamlı bir proxy anlık görüntüsünü gözlemleyebilir, fazlasını değil.
Bir iOS uygulamasına telefonun VPN'de olup olmadığını sorun; dürüst yanıt, bunu sizin kastettiğiniz anlamda bilemeyeceğidir. SDK «cihaz bir tünelde» diye bir bayrak sunmaz ve buna yaklaşabilecek özel arayüzler yayımlanan uygulamalara kapalıdır. Kendi uygulamanızın yapılandırmasını, ona bağlı durumu ve ağ yığınından bir iki dolaylı ipucunu gözlemleyebilirsiniz. Her biri farklı bir soruyu yanıtlar ve bozuk kontrollerin çoğu bunlardan birini bütün yanıt sanmaktan kaynaklanır.
Tek VPN bayrağı miti
İnanış, SDK'nın bir yerinde cihazın tünelde olup olmadığını bildiren bir özellik olduğudur; tıpkı bir erişilebilirlik bayrağının bir sunucunun yanıt verip vermediğini bildirmesi gibi. Böyle bir genel özellik yoktur. Olsaydı bile, «bir tünel var» ile «trafiğim onu kullanıyor» farklı iddialardır ve çoğu uygulama için yalnızca ikincisi önemlidir.
Tam da bu boşluk, tek satırlık VPN dedektörü reklamı yapan kütüphanelerin genellikle arayüz adı ya da proxy anahtarı gibi kırılgan bir şeyi okuyup bunu bir hüküm gibi sunmasının nedenidir.
Bir nil'e güvenmeden önce tercihleri yükleyin
Paylaşılan yönetici örneği istediğiniz anda vardır, ancak protokol özelliği yükleme geri çağrısı tamamlanana kadar nil kalır. Yani nil protokol, «henüz yüklenmedi» anlamına en az «kurulu değil» kadar sık gelir. Okumayı tamamlama bloğunun içinde yapın ve ancak ondan sonra karar verin: var olan ve etkinleştirme bayrağı açık bir protokol nesnesi, «kurulu»nun görünüşüdür.
İkinci sinyal bağlantı nesnesindedir: bu uygulamanın kurulu bir yapılandırması olmadığında sistemin bildirdiği geçersiz durum. Tamamlanmış bir yüklemeden sonra geçersiz durum ile nil protokol birlikte gerçek bir yokluktur, zaman yarışı değil.
Bağlantı değişiklikleri bildirim olarak gelir
load ve save'e verilen işleyiciler yapılandırmaya ne olduğunu bildirir, tünelin ne yaptığını değil. Bağlanma anında bunlardan birinin tetiklenmesini beklemek hiç çözülmeyen bir yarıştır. Bunun yerine durum değişikliği bildirimini izleyin ve geldiğinde bağlantı nesnesinin güncel değerini okuyun.
Bir yapılandırma kurulduktan sonra bağlantı durumu kısa bir sırayla ilerler: bağlantı kesildi, bağlanıyor, bağlandı, yeniden doğruluyor, bağlantı kesiliyor. «Bağlandı» tüneli tanımlar, arkasındaki sunucuyu değil; dolayısıyla trafiğin aktığının kanıtı değildir. On-demand, uygulama askıdayken bile bir tünel kaldırabilir ve o zaman bildirim, güncelleyecek bir şeyiniz olmadan önce gelir.
Sınırlı proxy anlık görüntüsü bir ipucudur, hüküm değil
CFNetwork uygulamaya sistemin güncel proxy ayarlarını verebilir ve bu sonucun içinde arayüz adına göre anahtarlanmış sınırlı bir sözlük vardır. tun, utun, ppp, ipsec veya tap ile başlayan bir ad görmek, bir tünelin varlığına ipucudur. Bu, uygulamanın görebildiklerinin anlık görüntüsü olarak kalır; paketlerin nereye gittiğine dair bir açıklama değildir.
Sağlayıcılar adlandırma konusunda anlaşamaz; bu yüzden eksik bir önek hiçbir şeyi kanıtlamaz ve var olan bir arayüz trafik taşımadan da bulunabilir. Erişilebilirlik daha da zayıftır: özel bir adrese yapılan başarılı bir istek, yolun o istek için o anda çalıştığını gösterir, bir VPN kurulu olduğunu değil.
Simülatör Mac'i ödünç alır ve diğer uygulamalar görünmez kalır
Simülatörün kendi ağ yığını yoktur; kurduğu her bağlantı Mac'indir. Bu yüzden ana Mac'te çalışan bir VPN, simüle edilen uygulama için zaten yürürlüktedir ve simülatörün kendi ayarları hiçbir şey göstermez. Tünel simülatör başladıktan sonra kalktıysa, onu yeniden başlatmak genellikle uygulamada hata ayıklamaktan daha hızlıdır. Standart olmayan bir bağlantı noktasındaki ana bilgisayar o bağlantı noktasını URL'de ister ya da socat TCP-LISTEN:12345,fork TCP:host:12345 gibi yerel bir yönlendirme ister.
Genel API'ler başka uygulamalara veya yapılandırma profillerine ait VPN profillerini listelemez. Bilinen bir uygulama için canOpenURL üzerinden URL şeması yoklaması taşınabilir hiledir ve iOS 9'dan beri sorgulanan şemanın Info.plist'inizde bildirilmesi gerekir; atlarsanız çağrı false döndürür. OpenVPN Connect openvpn:// üzerinde yanıt verir, bu da onu iyi bir örnek ve kötü bir genel dedektör yapar.
Üç gözlemi birleştirin ve ne anlama geldiklerini söyleyin
Pratikte üç sonucu üst üste koyun: yüklenmiş ve etkinleştirilmiş bir yapılandırma, geçersiz olmayan bir bağlantı durumu ve yalnızca tünelden erişilebilen bir adrese istek. Her biri tek başına yanıltır; birlikte, kullanıcının varsaydığını değil uygulamanın ne bilebileceğini söylerler.
Sonucu tanılama bilgilerinize tek bir boolean olarak değil, üç satır olarak yazın. Bir kullanıcı VPN kapalı diyor ama uygulamanız aynı fikirde değilse, üç satır hangi gözlemin saptığını gösterir ve bu, üzerinde işlem yapabileceğiniz bir destek talebi ile «bende çalışıyor» diye biten bir talep arasındaki farktır.