“VPN açık mı?” aslında tek bir cümlede üç sorudur. Kodunuzun bunlardan hangisine ihtiyacı olduğu ilk karardır ve çoğu uygulamanın atladığı şey de budur. Bu cihazda bir tünel var mı, bu hedefe giden trafik onun üzerinden mi çıkıyor, yoksa uzak uç beklediğiniz kimlikle mi yanıt veriyor. Özelliği seçin, sonra onu ölçen sinyali seçin ve son olarak günlüğe gerçekte hangisini ölçtüğünüzü yazın.

Üç özellik, üç sinyal

Her biri tek satıra sıkıştırıldığında üç sorunun üç farklı yanıtı vardır. Aşağıdaki tablo kararın kendisidir, özeti değil.

PropertySignal that answers itWhat it still leaves open
ExistenceThe platform's own connection state: RAS on Windows, NetworkManager on D-Bus on Linux, scutil on macOSTunnels of a type the platform does not manage, which includes most third-party clients
PathA route lookup for the one destination, or a scoped proxy or interface key that names the tunnelWhether the far end is the peer you trust
IdentityAn authenticated response from the far end, or a source-address policy applied on the serverWhich local interface carried the packets

Son satırı yavaş okuyun. Yanıt veren özel bir ana makine bir şeyin yanıt verdiğini kanıtlar, yanıtın tünelden geldiğini değil, ve diğer uçta kimin olduğu hakkında hiçbir şey söylemez. İhtiyacınız olan özellik yol ise yolu ölçün.

Varlık: platformun kendi durumu

Windows bunu yerel profiller için Remote Access Service API üzerinden yanıtlar. RasEnumConnections neyin bağlı olduğunu listeler, RasGetConnectStatus bir girdinin durumunu bildirir ve RasGetLinkStatistics hızı, bayt sayaçlarını ve bağlantının yaşını ekler. Sınırlar asıl meseledir: OpenVPN, WireGuard ve satıcı istemcileri hiçbir zaman RAS bağlantısı kaydetmez, bu yüzden bu türden sağlıklı bir tünel boş bir liste gösterir ve saf kod onu kapalı olarak bildirir.

Linux masaüstleri aynı özelliği D-Bus üzerindeki NetworkManager aracılığıyla sunar; burada VPN bağlantı nesnesindeki PropertiesChanged kontrolü bir olaya dönüştürür ve State özelliği bağlantının ne zaman bağlı durumuna ulaştığını bildirir. Bir kabuktan nmcli connection show --active aynı bilgiyi okur ve hata ayıklarken istediğiniz şey tam olarak budur. macOS bu listeyi System Configuration çerçevesinde tutar ve scutil onun komut satırı görünümüdür. Üçü de platformun yönettiği bir bağlantıyı tanımlar ve üçü de yönetmediği bir tünel karşısında susar.

Yol: paket gerçekte nereye gider

Ad eşleştirme herkesin ilk başvurduğu kısa yoldur: arabirimleri listeleyin, dizeyi tun, tap, ppp veya ipsec ile test edin ve bir eşleşmeyi kanıt sayın. Bu bir sezgisel yöntemdir ve arabirim kümesi içinden bir şey geçse de geçmese de aynı görünebilir. Eski iOS sürümleri böyle yanıt veriyordu, sonrakiler bıraktı, çünkü görünen arabirimler artık iki durumu ayırt etmiyordu.

Orada bunun yerini sistem proxy sözlüğü aldı. VPN bağlıyken proxy ayarları çağrısı tünelle ilgili arabirimlerle sınırlı anahtarlar döndürür ve hiçbir şey bağlı değilken sözlük boş döner. Bu, kulağa geldiğinden daha zayıf bir ifadedir, çünkü bir tünelin var olduğuna dair sistem inancını kaydeder, hangi hedefin onu kullandığını değil.

Android'in bu tuzağın kendi sürümü vardır: vpn.connectivity yayını bazı derlemelerde bildirimde tanımlanan alıcılara, bazılarında ise çalışma zamanında kaydedilen alıcılara ulaşır. Bunu en iyi çaba olarak değerlendirin ve arkasında doğrudan bir yoklama tutun.

Önemli olan hedef olduğunda adaptör listesi yerine yönlendirme tablosuna sorun. Varsayılan ağ geçidi sezgiselleri çok ağlı makinelerde ve kendi ağ geçidini kuran tünellerde kırılır.

Kimlik: uzak ucu yoklayın

Birkaç saniyede bir uzak uca ICMP yankısı gönderen bir döngü bu türün en ucuz kontrolüdür ve işe yarar bir yönde başarısız olur. Onu yalnızca özel ağın içinde var olan bir adrese yöneltin, çünkü genel bir adres çalışan herhangi bir yukarı bağlantı üzerinden yanıt verir ve hiçbir şeyi kanıtlamaz. ICMP'nin filtrelendiği yerde, hizmet bağlantı noktasına kısa bir TCP bağlantısı aynı işi yapar.

Sunucu tarafındaki bir kontrolün tam olarak tek sinyali vardır: bağlantıdaki kaynak adresi. Aralık envanterini sürdürmek bakım işidir ve bir tüneli aynı bloğu kullanan herhangi bir ağdan ayıramaz.

Kaba politika bununla yaşayabilir. Kimlik yaşayamaz, bu yüzden paketlerinin nereden geliyor gibi göründüğüne güvenmek yerine istemcinin kimliğini doğrulayın.

Kategoriyi günlüğe yazın, hükmü değil

Hata kategorilerini günlükte ayrı tutun: hiç arabirim yok, arabirim var ama hedefe ulaşılamıyor, hedefe ulaşılabiliyor ama kimlik doğrulama reddedildi. Bunlar üç farklı sahiptir ve her biri farklı bir soruşturma açar.

Bunları tek bir “VPN çöktü” haline getirmek raporu düzeltemeyecek bir ekibe gönderir. Kategori yararlı çıktıdır; hüküm onu yanlış yapan şeydir.

İlgili makaleler