Mengecualikan paket adalah instruksi perutean, bukan pemblokiran, jadi halaman yang dimuat setelah VPN tersambung memang diharapkan dan bukan bukti kegagalan. Pengecualian mengeluarkan aplikasi dari terowongan alih-alih memblokirnya, dan jaringan biasa membawa lalu lintasnya. Dua kebijakan terpisah bertemu di sini: satu memilih proses, yang lain memilih tujuan. Membacanya dalam urutan itu menjelaskan mengapa ikon tersambung dan aplikasi yang berfungsi bukanlah kontradiksi.

Mengapa pengecualian membiarkan jaringan tetap terbuka

VpnService.Builder menerima daftar izin atau daftar larangan, tidak pernah keduanya. Hanya paket dalam daftar izin yang dirutekan melalui terowongan. Daftar larangan membaliknya: setiap paket kecuali yang terdaftar memakai terowongan, dan yang terdaftar mempertahankan jalur fisik. Paket yang tidak terdaftar di bawah daftar izin juga berada di luar terowongan, jadi pengecualian adalah keadaan normal bagi sebagian besar aplikasi dalam mode itu.

Itu menjadikan entri larangan lokal sebagai keputusan perutean, bukan aturan firewall. Jika persyaratannya adalah mencegah aplikasi menjangkau host, terowongan harus mencakupnya dan server atau kebijakan lokal harus menolak lalu lintasnya. Mengeluarkan aplikasi dari terowongan hanya mengubah antarmuka mana yang membawa paketnya.

Kasus Play Store adalah contoh sengaja yang biasa. Mengecualikan paket toko memungkinkan unduhan memakai koneksi dasar saat jalan keluar VPN mengganggu transfer, dan itu menunjukkan bahwa pengecualian berarti penghindaran, bukan pemblokiran.

Satu profil, satu daftar

Pembangun melempar pengecualian jika kedua panggilan dipakai, jadi profil di hadapan Anda adalah daftar izin atau daftar larangan. Satu fakta itu menentukan cara membaca setiap pengamatan berikutnya. Periksa kode atau konfigurasi terkelola sebelum tabel perutean, karena daftarlah yang menentukan arti sisa keluaran. Profil hibrida bukan keadaan yang bisa Anda amati.

Perbedaan itu juga memprediksi apa yang akan dilakukan aplikasi yang baru dipasang. Di bawah daftar izin ia tetap di luar sampai seseorang menambahkannya, sedangkan di bawah daftar larangan ia bergabung ke terowongan secara bawaan.

Konfigurasi terkelola menampilkan pilihan yang sama di bawah nama kunci berbeda, dan sebagian konsol menyebutnya mode VPN per aplikasi alih-alih daftar. Perilakunya tetap bermuara pada dua panggilan itu, jadi telusuri pengaturannya kembali ke daftar paket alih-alih memercayai label. Jika label dan daftar tidak cocok, daftar yang menang.

Ikuti aturan UID sampai ke tabel terowongan

Android memberi setiap aplikasi ID pengguna Linux-nya sendiri, dan layanan VPN memasang aturan kebijakan yang cocok dengan rentang UID. Lalu lintas yang cocok dikirim ke tabel perutean yang rute bawaannya mengarah ke perangkat tun. Nomor tabel dialokasikan per instans VPN, jadi berubah setelah menyambung ulang atau setelah profil VPN kedua dibuat.

Keluaran aturan adalah petanya. Setiap baris menyebut tabel pencarian, dan tabel itu menyimpan rute bawaan yang menentukan apakah paket yang cocok masuk ke terowongan.

adb shell ip rule show
adb shell ip route show table all
adb shell cmd package list packages -U | grep <package>

Jalankan perintah ketiga lebih dulu untuk mendapatkan UID, lalu temukan aturan yang rentangnya memuatnya. Aturan itu menunjuk nomor tabel, dan ip route show table <n> dengan nomor itu menunjukkan apakah ada rute bawaan melalui perangkat tun. Jika tabel tidak punya rute bawaan, aplikasi terpilih tetapi tidak punya jalur, yang merupakan kegagalan berbeda.

Perintah ini membutuhkan build yang bisa di-debug atau perangkat tempat adb shell dapat membaca keadaan jaringan. Pada ponsel produksi manajer paket tetap menjawab, tetapi pemeriksaan perutean bisa ditolak, jadi catat apa yang bisa Anda dapatkan dan anggap sisanya belum terverifikasi.

Rute mengklaim prefiks, bukan aplikasi

Builder.addRoute mengklaim prefiks tujuan untuk terowongan. Profil yang hanya menambahkan 10.0.0.0/8 mengirim prefiks itu melalui terowongan dan meninggalkan setiap tujuan lain di jalur fisik. Itu terowongan terbelah biasa, dan tidak bergantung pada aplikasi mana yang dipilih aturan.

Konfigurasi yang didorong server mencerminkan model yang sama. Dorongan rute individual menambahkan prefiks, sedangkan direktif redirect-gateway menggantikan rute bawaan dan menangkap semuanya untuk aplikasi yang dicakup terowongan. Menghapus direktif itu dapat menyusutkan terowongan yang berfungsi menjadi satu subnet tanpa perubahan apa pun di perangkat.

Rute yang didorong dengan gateway atau kualifier metrik tidak biasa juga bisa gagal dipasang. Utamakan bentuk prefiks biasa dan biarkan server menangani penerusan dan NAT.

Baca irisan sebelum mengubah pengaturan

Terowongan membawa irisan proses yang dicakup dan tujuan yang diklaim. Aplikasi tercakup yang meminta alamat di luar prefiks yang diterbitkan keluar melalui jaringan fisik. Paket yang dilarang tetap di luar bahkan ketika meminta alamat di dalam prefiks itu. Tidak ada yang merupakan bug; keduanya adalah dua kebijakan yang menjalankan tugasnya.

VPN per aplikasi juga dapat meninggalkan aplikasi terkait tanpa konektivitas. Saat on-demand mati dan terowongan mati, aplikasi tetap terikat ke VPN per aplikasi dan tidak punya cadangan, yang tampak seperti aplikasi rusak alih-alih keadaan kebijakan. Mengaktifkan on-demand, atau menghapus keterkaitan lewat manajemen, mengubahnya.

LayerWhat it selectsWhere to lookTypical mismatch
Package listProcessesBuilder calls or managed configurationApp excluded but expected to be blocked
UID policy ruleWhich table a UID usesip rule showTunnel icon on, app still on Wi-Fi
Routing tableDestinations for matched trafficip route show table <n>Covered app reaches only one subnet
Server pushPrefixes offered to the clientServer route configurationTunnel shrinks after a server edit

Diagnosis satu sumbu setiap kali. Pastikan izin atau larangan lebih dulu, baca aturan UID dan tabel yang terpasang kedua, dan uji aplikasi kedua terhadap tujuan yang sama terakhir. Aplikasi kedua memisahkan pemilihan proses dari pemilihan tujuan dalam satu permintaan.

Catat hasilnya sebagai aplikasi, tujuan, dan nomor tabel. Tiga serangkai itulah yang harus dijaga oleh perubahan berikutnya.

Artikel terkait