Dua pekerjaan yang sangat berbeda dimasukkan ke dalam nama VPN terprogram, dan hanya satu di antaranya tersedia bagi aplikasi biasa di salah satu dari dua platform seluler. Yang pertama adalah mengaktifkan profil yang sudah disimpan pengguna; yang kedua adalah membangun terowongan di dalam proses Anda sendiri. Android memberi Anda yang kedua melalui VpnService dan iOS memberi Anda yang kedua melalui hak Network Extension, sedangkan yang pertama tetap pada sistem, pemilik perangkat, atau server MDM. Menentukan mana yang sebenarnya Anda butuhkan biasanya membuat proyek lebih kecil.

Dua pekerjaan dengan satu nama

Mengaktifkan profil tersimpan berarti memberi tahu terowongan yang sudah ada untuk naik: host, kredensial, protokol, semuanya sudah dikonfigurasi di suatu tempat yang bisa dilihat pengguna. Membangun terowongan berarti kode Anda memiliki antarmuka, putaran paket, dan protokol. Keduanya terlihat mirip di backlog produk dan hampir tidak berbagi implementasi.

Tidak ada platform seluler yang membuka yang pertama kepada aplikasi SDK. Koneksi yang muncul tanpa pengguna melakukan apa pun tidak bisa dibedakan dari perangkat lunak berbahaya, jadi kedua sistem menaruh gerbang persetujuan di depan setiap aplikasi yang membawa lalu lintas.

Android: gerbang persetujuan, dan tidak ada API profil

VpnService sudah ada sejak Android 4.0 dan memungkinkan aplikasi membuat antarmuka tun, lalu membaca dan menulis paket. Layanan harus dideklarasikan dengan BIND_VPN_SERVICE, dan VpnService.prepare() menghasilkan dialog sistem yang meminta pengguna mengizinkannya. Contoh platform, ToyVpn, adalah pernyataan paling jelas tentang bentuk yang dimaksud: kode Anda memiliki antarmuka dan semua yang mengalir melaluinya.

Yang tidak dilakukannya adalah menambahkan entri ke layar pengaturan VPN sistem. Tidak ada API publik untuk itu, dan aplikasi Pengaturan menyimpan profilnya di penyimpanan yang tidak bisa dijangkau aplikasi biasa. Panggilan ke kelas tersembunyi dari aplikasi normal menghasilkan profil yang tidak pernah didaftarkan sistem, itulah sebabnya kode yang tampak berfungsi pada satu build diam-diam berhenti bekerja pada build berikutnya.

Jalur terkelola terpisah. Pemilik perangkat atau pemilik profil dapat menunjuk paket VPN yang selalu aktif melalui API kebijakan perangkat, dan alat perusahaan dapat mendorong profil yang kemudian disetujui pengguna. Itu wewenang pengelolaan perangkat, bukan izin yang diminta aplikasi saat pemasangan. Jika pelanggan Anda organisasi, inilah jalur yang harus direncanakan; jika pelanggan Anda orang yang memasang dari toko, itu sama sekali tidak tersedia.

iOS: hak istimewa adalah batasnya

iOS membagi pekerjaan yang sama secara berbeda. Klien VPN mengimplementasikan penyedia terowongan paket atau proksi aplikasi di bawah kerangka Network Extension, dan hak yang sesuai harus diberikan ke akun pengembang. Konfigurasi VPN pribadi melalui NEVPNManager ada untuk kasus yang lebih sederhana, dan tetap berjalan dalam model izin yang sama. Apple mendokumentasikan seluruh permukaan di referensi Network Extension, yang layak dibaca sebelum Anda menentukan cakupan pekerjaan.

Tidak ada cara yang didukung untuk membuka layar pengaturan VPN, membaca konfigurasi tersimpan pengguna, atau memulai salah satunya. Yang bisa dilakukan klien adalah mengirim profil konfigurasi agar dipasang pengguna, lalu menggunakan terowongan yang dihasilkan melalui panggilan jaringan biasa. Terowongan per aplikasi ditetapkan oleh server MDM melalui aturan sesuai permintaan, bukan dipilih aplikasi saat runtime.

Klien VPN dari vendor besar bukan bukti bahwa akun Anda bisa mengirim hal yang sama. Hak tersebut diminta per akun pengembang dan ditinjau, jadi risiko jadwal ada pada Apple, bukan pada rencana sprint Anda.

Desktop menjangkau lebih jauh, tetapi kepemilikan tidak berubah

Windows adalah kasus yang permisif. Add-VpnConnection membuat entri buku telepon dari sesi PowerShell yang ditinggikan, dan rasdial menghubungkan atau memutusnya dari skrip. Aplikasi juga dapat menggerakkan klien vendor melalui baris perintahnya yang terdokumentasi. Membuat profil tetap tindakan administratif, karena entri itu hidup di penyimpanan seluruh mesin.

macOS berperilaku sama dengan alat yang berbeda. scutil --nc start dan stop beroperasi pada layanan yang sudah ada, sedangkan membuatnya adalah tugas administrasi sistem. Memiliki proses di laptop tidak membuat Anda menjadi pemilik konfigurasi.

Apa yang sebaiknya dibangun

Jika kebutuhan sebenarnya adalah aplikasi Anda menjangkau API internal, terowongan yang sudah dijalankan pengguna sudah cukup. Kirim permintaan HTTPS biasa, biarkan sistem memilih jalurnya, dan berhenti mencoba mengendalikan terowongan. Jika kebutuhannya hanya lalu lintas aplikasi Anda yang memakai terowongan, minta VPN per aplikasi melalui saluran pengelolaan, atau akhiri TLS di dalam aplikasi terhadap layanan yang dapat dijangkau tanpanya.

API tersembunyi bukan jalan pintas yang layak diambil. API itu berubah antar rilis, gagal dalam peninjauan aplikasi, dan kegagalan yang dihasilkannya tampak seperti gangguan jaringan biasa bagi siapa pun yang mewarisi kodenya. Perbandingannya bukan Android versus iOS; ini soal memiliki terowongan versus meminta platform merutekan lalu lintas, dan hanya yang pertama yang menjadi milik Anda untuk dibangun.

Artikel terkait