Tiket dukungan datang yang menyatakan aplikasi menampilkan satu alamat sementara server mencatat alamat lain, lalu bertanya mana yang berbohong. Tidak ada yang berbohong; itu dua pengamatan atas dua hal berbeda. Alamat yang terikat ke antarmuka, alamat yang terikat ke soket, dan alamat sumber yang dilihat layanan jarak jauh menjawab tiga pertanyaan terpisah. VPN menambahkan konteks jaringan ke ponsel dan tidak meruntuhkan ketiganya menjadi satu angka untuk seluruh perangkat. Baca nama field di tiket sebelum membaca alamatnya.

Apa yang biasanya dijelaskan tiket

Bayangkan ponsel di Wi-Fi dengan terowongan aktif. Antarmuka Wi-Fi memegang alamat LAN, antarmuka terowongan memegang alamat dalam yang ditetapkan, dan permintaan yang keluar lewat terowongan tiba di layanan publik dari sumber mana pun yang bertahan dari penerjemahan apa pun di jalur. Aplikasi yang mencetak alamat dalam dan server yang mencatat sumber terjemahan keduanya melaporkan dengan akurat, dan kedua nilai itu tidak akan pernah cocok.

Ketiga pengamatan berbeda dalam apa yang bisa mereka buktikan, bukan hanya dalam apa yang mereka gambarkan.

ObservationWhat it describesWhat it cannot prove
An address on a local interfaceOne configured attachment: Wi-Fi, cellular or a tunnelThe source a remote site receives
A socket's local endpointThe binding used by that one connectionThe address after translation further along
The peer address at a serviceWhat arrived at that observation pointAny other interface on the phone

Simpan tabel itu di dekat kode yang mengisi nilai-nilai ini ke dalam tiket, karena sebagian besar kebingungan di sini adalah tertukarnya kolom, bukan gangguan jaringan.

Apa yang bisa dan tidak bisa dijawab panggilan soket

Pada tingkat API, getsockname melaporkan endpoint lokal yang saat ini terikat ke soket tertentu. Untuk soket yang terhubung, itu adalah sumber yang dipilih kernel untuk koneksi tersebut, yang sudah lebih spesifik daripada daftar antarmuka mana pun. Ini bukan pencarian alamat publik, dan memanggilnya pada soket yang belum terikat hampir tidak memberi tahu apa pun. Apa pun yang dikembalikannya masih bisa ditulis ulang nanti di jalur, jadi hanya pengamatan layanan itu sendiri yang otoritatif tentang apa yang diterima layanan.

Di platform Apple, sisi antarmuka punya permukaan terpisah: pengaturan terowongan mencantumkan alamat yang ditetapkan ke antarmuka terowongan. Membacanya memberi tahu Anda bagaimana terowongan dikonfigurasi, dan tidak memberi tahu Anda jalur mana yang diambil permintaan tertentu, karena perutean dan aturan per aplikasi memutuskan itu untuk setiap koneksi.

Terowongan terpisah membuat celahnya terlihat. Satu permintaan bisa keluar lewat terowongan sementara permintaan berikutnya, yang diarahkan ke tujuan atau keluarga alamat lain, tidak, sehingga dua hasil dari aplikasi yang sama dengan selisih detik bisa jujur dan berbeda.

Pilih pengamatan yang sesuai dengan pertanyaan

Pilih dengan sengaja daripada menginstrumentasi semuanya. Untuk apa yang dilihat backend, catat sumbernya di backend, dan di tempat proksi terbalik berdiri di depan, baca alamat klien dari header penerusan yang benar-benar ditetapkan penerapan Anda, bukan dari apa pun yang dikirim klien.

Untuk mengetahui apakah terowongan dikonfigurasi, baca antarmukanya. Untuk mengetahui apakah lalu lintas aplikasi ini memakainya, kirim lalu lintas dari aplikasi itu ke tujuan yang Anda kendalikan dan bandingkan sumbernya di kedua ujung.

Aturan per aplikasi layak mendapat kalimatnya sendiri. Hasil peramban adalah bukti tentang peramban itu, dan terowongan terkelola per aplikasi bisa menempatkan dua aplikasi di ponsel yang sama pada jalur berbeda pada saat yang sama. Memverifikasi cakupan berarti mengirim lalu lintas dari aplikasi yang dimaksud, dalam keluarga alamat yang dimaksud.

Nama antarmuka bukanlah detektor

Jangan pula memakai nama antarmuka sebagai pemeriksaan VPN. Nama-nama itu bukan kontrak publik, dan ponsel bisa memiliki beberapa keterikatan sementara hanya satu yang membawa permintaan Anda.

Beri nama field sesuai pengamatan yang dibawanya. local_interface_address, socket_local_endpoint dan service_observed_source canggung dan tidak ambigu, dan tidak ambigu adalah yang Anda inginkan ketika nilainya berakhir di tiket dukungan seminggu kemudian. Satu kolom bernama device IP akan mengumpulkan ketiganya lalu dipercaya seolah-olah hanya satu.

Jauhkan identitas dari kolom alamat

Keluaran VPN bersama bukanlah identitas pengguna, dan alamat privat bukanlah kredensial akses. Keduanya menggambarkan jalur, bukan orang, dan memperlakukan salah satunya sebagai autentikasi mengubah kecelakaan perutean menjadi keputusan otorisasi.

Ketika seseorang bertanya alamat mana yang dimiliki ponsel, jawaban yang berguna adalah pertanyaan tentang koneksi mana dan pengamat mana. Definisi getsockname layak dikutip untuk kasus tengah, karena menyelesaikan pertanyaan soket tanpa berpura-pura menyelesaikan dua lainnya.

Lalu tuliskan mana dari ketiganya yang benar-benar perlu ditampilkan produk Anda, dan hapus dua lainnya dari antarmuka.

Artikel terkait