“Adakah VPN hidup?” sebenarnya tiga soalan dalam satu ayat. Yang mana satu diperlukan oleh kod anda ialah keputusan pertama, dan itulah yang dilangkau oleh kebanyakan pelaksanaan. Adakah terowong wujud pada peranti ini, adakah trafik ke destinasi ini keluar melaluinya, atau hujung jauh menjawab dengan identiti yang anda jangkakan. Pilih sifat itu, kemudian pilih isyarat yang mengukurnya, dan akhirnya tulis dalam log yang mana satu benar-benar anda ukur.

Tiga sifat, tiga isyarat

Dimampatkan kepada satu baris setiap satu, ketiga-tiga soalan mempunyai tiga jawapan berbeza. Jadual di bawah ialah keputusan itu sendiri, bukan ringkasannya.

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

Baca baris terakhir dengan perlahan. Hos peribadi yang menjawab membuktikan sesuatu menjawab, bukan bahawa jawapan itu datang melalui terowong, dan ia tidak berkata apa-apa tentang siapa di hujung sana. Jika sifat yang anda perlukan ialah laluan, ukur laluan itu.

Kewujudan: keadaan platform itu sendiri

Windows menjawab ini untuk profil asli melalui Remote Access Service API. RasEnumConnections menyenaraikan apa yang disambungkan, RasGetConnectStatus melaporkan keadaan satu entri, dan RasGetLinkStatistics menambah kelajuan, pembilang bait dan usia sambungan. Hadnya ialah intinya: OpenVPN, WireGuard dan klien vendor tidak pernah mendaftarkan sambungan RAS, jadi terowong sihat jenis itu menunjukkan senarai kosong dan kod naif melaporkannya sebagai mati.

Desktop Linux mendedahkan sifat yang sama melalui NetworkManager pada D-Bus, di mana PropertiesChanged pada objek sambungan VPN menukar pemeriksaan menjadi peristiwa dan sifat State melaporkan bila pautan mencapai keadaan bersambung. Daripada shell, nmcli connection show --active membaca maklumat yang sama, dan itulah yang anda mahu semasa menyahpepijat. macOS menyimpan senarai itu dalam rangka System Configuration, dengan scutil sebagai paparan baris arahannya. Ketiga-tiganya menerangkan sambungan yang diuruskan platform, dan ketiga-tiganya senyap tentang terowong yang tidak diurusnya.

Laluan: ke mana paket itu sebenarnya pergi

Padanan nama ialah jalan pintas yang semua orang capai dahulu: senaraikan antara muka, uji rentetan terhadap tun, tap, ppp atau ipsec, dan anggap padanan sebagai bukti. Ia satu heuristik, dan set antara muka boleh kelihatan sama sama ada sesuatu bergerak melaluinya atau tidak. Binaan iOS lama menjawab begitu dan yang lebih baharu berhenti, kerana antara muka yang kelihatan tidak lagi membezakan kedua-dua keadaan itu.

Yang menggantikannya di sana ialah kamus proksi sistem. Selagi VPN bersambung, panggilan tetapan proksi mengembalikan kunci yang terhad kepada antara muka berkaitan terowong, dan apabila tiada apa bersambung kamus itu kembali kosong. Itu kenyataan yang lebih lemah daripada bunyinya, kerana ia merekodkan kepercayaan sistem bahawa terowong wujud, bukan destinasi mana yang menggunakannya.

Android mempunyai versi perangkapnya sendiri: siaran vpn.connectivity sampai kepada penerima yang diisytiharkan dalam manifes pada sesetengah binaan dan penerima yang didaftarkan pada masa jalan pada yang lain. Anggap ia sebagai usaha terbaik, dan simpan probe langsung di belakangnya.

Apabila destinasi yang penting, tanya jadual penghalaan dan bukan senarai penyesuai. Heuristik get laluan lalai rosak pada mesin berbilang rangkaian dan pada terowong yang memasang get laluan sendiri.

Identiti: uji hujung jauh

Gelung yang menghantar gema ICMP ke hujung jauh setiap beberapa saat ialah pemeriksaan paling murah jenis ini, dan ia gagal ke arah yang berguna. Halakan ia ke alamat yang hanya wujud di dalam rangkaian peribadi, kerana alamat awam menjawab melalui mana-mana pautan atas yang berfungsi dan tidak membuktikan apa-apa. Di tempat ICMP ditapis, sambungan TCP pendek ke port perkhidmatan melakukan kerja yang sama.

Pemeriksaan sebelah pelayan mempunyai tepat satu isyarat: alamat sumber pada sambungan. Menyelenggara inventori julat ialah kerja penyelenggaraan, dan ia tidak boleh memisahkan terowong daripada mana-mana rangkaian lain yang kebetulan menggunakan blok yang sama.

Dasar kasar boleh hidup dengan itu. Identiti tidak boleh, jadi sahkan klien dan bukannya mempercayai dari mana paketnya kelihatan datang.

Log kategori, bukan keputusan

Asingkan kategori kegagalan dalam log: tiada antara muka sama sekali, antara muka ada tetapi destinasi tidak dapat dicapai, destinasi boleh dicapai tetapi pengesahan ditolak. Itu tiga pemilik berbeza, dan setiap satu membuka siasatan berbeza.

Meruntuhkannya menjadi satu “VPN mati” menghantar laporan kepada pasukan yang tidak boleh membaikinya. Kategori ialah output berguna; keputusan itulah yang menjadikannya salah.

Artikel berkaitan