Mengapa aplikasi iPhone Anda menampilkan satu IP dan server mencatat yang lain
Alamat antarmuka, endpoint soket, dan sumber yang dicatat server menjawab pertanyaan berbeda. VPN menambahkan konteks; ia tidak menjadikannya satu angka.
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.
| Observation | What it describes | What it cannot prove |
|---|---|---|
| An address on a local interface | One configured attachment: Wi-Fi, cellular or a tunnel | The source a remote site receives |
| A socket's local endpoint | The binding used by that one connection | The address after translation further along |
| The peer address at a service | What arrived at that observation point | Any 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.