Dua persyaratan yang terdengar setara tidaklah sama: «kecualikan aplikasi ini dari VPN» dan «kirim satu tujuan ini ke luar VPN untuk laptop di hotspot saya». Yang pertama mengubah cara soket di telepon memilih jaringan. Yang kedua harus mengubah keputusan penerusan untuk paket yang datang dari perangkat lain setelah telepon sudah menerimanya. Mencampur keduanya adalah cara klien hotspot berakhir dengan pengecualian yang selalu hanya berlaku bagi peramban telepon itu sendiri.

Dua subsistem memiliki dua pertanyaan itu

Android memisahkan jaringan aplikasi dan tethering. Soket aplikasi ditetapkan ke jaringan oleh tumpukan konektivitas, dan aplikasi VPN memutuskan soketnya yang mana masuk ke terowongan. Paket yang diteruskan dari klien bertambat ditangani subsistem tethering, yang meminta netd rute, aturan kebijakan, dan terjemahan pada antarmuka hilir.

Pengecualian per aplikasi dievaluasi saat aplikasi membuka soket. Paket yang diteruskan tidak pernah mencapai pemeriksaan itu, karena tidak berasal dari soket aplikasi di perangkat ini. Itulah seluruh alasan kedua pengaturan tidak dapat saling menggantikan, dan itu bukan bug pada salah satunya.

Apa yang sebenarnya diubah pengecualian per aplikasi

Pembangun VpnService dapat menamai paket yang tetap di luar terowongan dengan addDisallowedApplication, atau menamai satu-satunya paket yang diizinkan di dalam dengan addAllowedApplication. Aplikasi itu lalu membuka soket pada jaringan yang mendasari sementara VPN tetap memiliki rute bawaan untuk semua hal lain.

Cakupannya tepat: soket milik paket itu sendiri, di perangkat ini, selama terowongan menyala. Itu tidak mengatakan apa pun tentang lalu lintas yang diteruskan, tidak tentang perangkat kedua, dan tidak tentang paket yang dikirim sistem atas nama tethering.

Itu juga bukan kendali tujuan. Mengecualikan peramban mengecualikan setiap alamat yang dicapai peramban itu, termasuk yang ingin Anda pertahankan di dalam terowongan. Ketika persyaratan menyebut tujuan alih-alih aplikasi, pemilih aplikasi adalah alat yang salah secara konstruksi.

Seperti apa paket bertambat bagi telepon

Paket klien tiba di antarmuka hotspot dengan alamat sumber privat yang diberikan telepon, katakanlah 192.168.43.20, dan tujuan publik. Untuk meneruskannya telepon memerlukan rute ke tautan atas dan aturan terjemahan agar balasan menemukan jalan pulang, karena alamat privat klien tidak bermakna di jaringan seluler.

Android menyatakan itu dengan aturan kebijakan yang memilih tabel perutean, dan netd membangun ulang tabel serta aturan terkait saat jaringan dan VPN berubah. Nomor tabel, prioritas aturan, atau nama antarmuka yang disalin dari kiriman forum, atau dari model yang sama pada rilis lebih lama, tidak menetapkan kepemilikan yang tahan lama. Pembangunan ulang itu juga sebabnya aturan yang ditulis tangan bisa bekerja satu jam lalu berhenti setelah penyambungan ulang berikutnya.

Kebijakan apa yang sebenarnya dibutuhkan pengecualian hotspot

Tulis keputusan itu sebagai sumber, tujuan, dan jalur yang dimaksud sebelum menyentuh aturan. Bentuk minimal untuk satu tujuan yang disetujui tampak seperti ini:

SourceDestinationIntended path
One authorized hotspot clientOne approved public service addressOrdinary cellular uplink
The same clientAll other covered destinationsShared VPN
The phone's own appsTheir existing destinationsUnchanged phone policy

Kedua arah harus lengkap. Cabang langsung memerlukan rute yang dapat dipakai melalui tautan atas seluler yang kebetulan sedang aktif; cabang VPN memerlukan rute terowongan plus izin untuk meneruskan. Terjemahan sumber apa pun harus cocok dengan jalan keluar yang Anda pilih, karena NAT yang diterapkan pada antarmuka terowongan menampilkan alamat terowongan dan bukan alamat seluler, dan jalur kembali lalu tidak sesuai dengan jalur pergi.

Balasan harus mencapai klien hilir yang sama melalui keadaan terlacak atau rute eksplisit, dan penghitung paket keluar tidak membuktikan semua itu. Jaga juga transportasi luar VPN sendiri di luar cakupan pengecualian, atau paket pengangkut terowongan mewarisi kebijakan yang ditulis untuk permintaan web klien.

Satu alamat yang tertangkap bukan tujuan

Satu alamat IPv4 yang dibaca dari peramban adalah cuplikan sesaat. Layanan besar menjawab dari anycast atau dari kumpulan alamat tepi yang berputar, banyak yang bertumpuk ganda, dan alur masuk bisa menyentuh host autentikasi dan telemetri yang tidak pernah ditampilkan halaman. Pengecualian yang dibangun di sekitar alamat yang kebetulan Anda lihat rusak saat layanan menyeimbangkan ulang beban.

Gunakan alamat terdokumentasi milik pemilik layanan, atau rentang yang ia terbitkan, dan hitung kedua keluarga alamat. Jika persyaratan tidak dapat dinyatakan sebagai himpunan stabil, itu mungkin pertanyaan kebijakan bagi layanan dan bukan trik perutean di telepon.

Verifikasi dari sisi hilir

Tiga pemeriksaan, dalam urutan ini: layanan yang dipilih dari laptop, tujuan biasa yang harus tetap di dalam VPN, dan aplikasi telepon yang harus tetap tidak terpengaruh. Lalu ulangi setelah penyambungan ulang dan setelah perubahan tautan atas, karena saat itulah tabel kebijakan dibangun ulang.

Jika implementasi berbagi telepon tidak dapat memegang kontrak itu selama penyambungan ulang, pindahkan kebijakan selektif ke router hilir yang didukung alih-alih menumpuk aturan root di perangkat. Router dapat menyatakan pencocokan sumber dan tujuan dengan pemilik yang stabil, dan dokumentasi modul tethering adalah rujukan yang tepat untuk apa yang sebenarnya dilakukan telepon.

Artikel terkait