Dua orang bertanya soalan yang sama dan mendapat jawapan yang tidak selari, kerana mereka berdiri di tempat yang berbeza. Seorang membuka skrin tetapan VPN sistem dan menyunting senarai aplikasi. Seorang lagi menulis VpnService.Builder.addDisallowedApplication() dalam editor. Kedua-duanya memanggilnya penapis VPN setiap aplikasi. Hanya seorang daripada mereka memiliki kawalan yang mereka gambarkan, dan kedua-duanya tidak menyekat apa-apa.

Mulakan pada skrin yang dilihat pengguna

Buka Tetapan, cari entri VPN dan lihat sambungan yang benar-benar aktif. Jika klien menawarkan senarai setiap aplikasi, senarai itu milik terowong klien itu sendiri. Platform tidak menerbitkan API umum yang membolehkan aplikasi tidak berkaitan membaca atau menyunting pilihan aplikasi VPN lain, jadi aplikasi kedua tidak boleh membaiki senarai itu untuk pengguna.

Inilah cabang pertama dalam panduan ini. Jika VPN yang dipasang tidak mempunyai tetapan itu, tiada apa untuk dikodkan: ciri itu tiada pada produk yang memiliki terowong. Jika ada, pembetulan yang betul ada pada skrin itu, dilakukan oleh orang yang boleh membukanya.

Ikut paket masuk ke dalam terowong

Apabila aplikasi anda sendiri membina terowong, ia mencipta antara muka TUN dan mengisytiharkan trafik aplikasi mana yang masuk ke dalamnya. Panggilan keahlian berlaku sebelum antara muka ditubuhkan, dan selepas itu set peraturan tetap untuk sesi tersebut:

val builder = VpnService.Builder()
builder.addAddress("10.8.0.2", 32)
builder.addRoute("0.0.0.0", 0)
builder.addDisallowedApplication("com.example.bypass")
val tun = builder.establish()   // membership decided here

Panggilan itu hanya terpakai pada terowong yang baru dibina oleh aplikasi anda dan tidak pada apa-apa yang lain. Ia bukan dasar seluruh peranti, ia tidak kekal untuk klien lain, dan ia tidak boleh menjangkau VPN orang lain. Apabila panggilan pembina melontar pengecualian kerana paket tidak dapat diselesaikan, antara muka tidak pernah ditubuhkan, yang merupakan kegagalan bersih dan bukan senyap.

Mengapa pengecualian kelihatan seperti sekatan

Aplikasi yang dikecualikan dialihkan mengelilingi terowong anda ke rangkaian di bawahnya. Itu adalah bertentangan dengan menyekatnya: trafik masih keluar dari peranti, hanya di luar antara muka yang anda kawal. Aplikasi bergaya dinding api melakukan sebaliknya. Ia menerima trafik aplikasi ke dalam terowongnya dan kemudian membuang paket, atau enggan memajukannya, jadi antara mukanya sama dan arah dasarnya terbalik.

Kerja di sebalik pembalikan itu bukan bendera konfigurasi. Anda membaca paket IP daripada deskriptor terowong, memutuskan setiap aliran, dan kemudian memajukannya melalui soket terlindung atau membuangnya. Apa sahaja yang tidak anda tangani berhenti begitu sahaja, dan itulah sebabnya terowong separuh siap kelihatan seperti rangkaian rosak dan bukan penapis yang berfungsi. Jika matlamat anda ialah sekatan, anggarkan pengendalian paket, perkhidmatan latar hadapan dan dasar bertulis untuk trafik yang tidak dapat anda kelaskan.

Apa yang rosak apabila anda membinanya sendiri

Android secara amnya hanya membenarkan satu VPN aktif pada satu masa, jadi terowong penapis anda dan terowong privasi bersaing untuk tempat yang sama melainkan produk menyokong perantaian. VPN sentiasa aktif dengan sekatan sambungan mengubah cara kegagalan dengan cara yang penting di sini: trafik yang tidak dapat masuk ke terowong dibuang dan bukan dihantar terus, yang merupakan apa yang dikehendaki oleh reka bentuk pencegahan kebocoran dan yang jarang dijangka oleh sesi nyahpepijat.

Kebolehnampakan paket ialah perangkap kedua. Menyelesaikan nama paket aplikasi boleh gagal dengan NameNotFoundException, dan pada versi Android yang lebih baharu set paket yang boleh anda lihat bergantung pada pertanyaan yang anda isytiharkan. Tangani pengecualian itu dan bukan menganggap setiap nama dapat diselesaikan, dan baca semula senarai itu apabila aplikasi dipasang atau dibuang dan bukan menyimpannya dalam cache selamanya.

Peranti terurus menambah pemilik ketiga. Dasar mobiliti perusahaan boleh menetapkan VPN setiap aplikasi atau profil sentiasa aktif, dan aplikasi biasa tidak boleh mengatasinya. Semak sama ada peranti itu terurus sebelum menyahpepijat kod anda sendiri, kerana dalam kes itu senarai yang anda cuba ubah mungkin tidak boleh disunting oleh sesiapa yang memegang telefon itu.

Uji dengan aplikasi yang anda kawal

Jangan uji dengan aplikasi yang anda cuba tapis. Gunakan aplikasi kedua yang tingkah laku rangkaiannya boleh anda perhatikan, dan semak sama ada trafiknya keluar melalui terowong anda sedangkan trafik sasaran tidak. Jika kedua-duanya kekal di dalam, dasar itu berfungsi dan sasaran dikecualikan; jika tiada yang keluar, terowong itu sendiri yang salah dan senarai aplikasi bukan masalahnya.

Kemudian tentukan yang mana antara tiga perkara yang sebenarnya anda bina. Terowong setiap aplikasi ialah API pembina, dengan senarai sebagai sebahagian daripada profil anda. Dinding api peranti ialah pengendalian paket serta kitaran hayat yang boleh anda pertahankan. Menukar VPN orang lain langsung bukan laluan yang disokong, dan jawapan jujur di situ ialah tetapan itu milik produk tersebut.

Artikel berkaitan