Penghantaran port hotspot Android: tiga titik masuk
Telefon, laluan pembawa dan keluar VPN mendedahkan sempadan yang berbeza. Jejaki mesin mana yang memiliki soket mendengar sebelum anda membuka sebarang port.
Anda menghidupkan hotspot, menyambung VPN, membuka port dalam aplikasi, dan peranti lain masih tidak dapat menyambung. Bahagian yang hilang hampir tidak pernah menjadi port itu sendiri. Persoalannya ialah mesin mana yang memiliki soket mendengar dan alamat mana yang sepatutnya dicapai oleh peranti lain. Saya menelusuri perkara ini dari telefon ke luar, kerana skrin yang anda lihat memberitahu titik masuk mana antara tiga yang sebenarnya anda uji.
Mulakan di tempat perkhidmatan benar-benar berjalan
Buka aplikasi yang sepatutnya menerima sambungan dan baca halaman statusnya. Jika ia menyatakan sedang mendengar, catat alamat yang diikatnya, kerana satu butiran itu menentukan kebanyakan kes di bawah. Aplikasi yang terikat pada 127.0.0.1 hanya boleh dicapai dari telefon itu sendiri, dan tiada klien hotspot, pemetaan pembawa atau keluar VPN akan mengubahnya.
Kemudian pastikan peranti mana yang menjalankan perkhidmatan. Ia sama ada telefon, dan dalam kes itu soket milik aplikasi tersebut, atau komputer riba di belakang hotspot, dan dalam kes itu pendengar serta firewallnya milik komputer riba dan telefon hanya memajukan paket. Itu dua reka bentuk berbeza dengan pemilik berbeza, dan mencampurkannya menyebabkan port yang dibuka di satu tempat tidak berbuat apa-apa di tempat lain.
Pada binaan boleh debug, adb shell boleh menyenaraikan soket melalui /proc/net/tcp, tetapi bagi kebanyakan orang status aplikasi sendiri ialah sumber yang jujur. Ia juga mengelakkan perangkap menguji soket yang dibuka aplikasi pada alamat yang anda tidak jangkakan.
Titik masuk pertama: peranti lain pada hotspot
Ini kes setempat dan paling mudah dilakukan dengan betul. Peranti lain mencapai telefon pada alamat yang dilihatnya sebagai gateway, pada port yang didengar aplikasi, dan tiada apa pun di luar hotspot perlu terlibat. Tiada pemetaan pembawa diperlukan, dan tiada ciri penyedia perlu wujud, kerana trafik tidak pernah meninggalkan segmen setempat.
Dua perkara merosakkannya. Aplikasi terikat pada loopback, atau dasar klien pada telefon tidak membenarkan sambungan setempat. Uji dengan protokol aplikasi sendiri dan bukan sambungan TCP kosong jika aplikasi mengesahkan, kerana pendengar yang menerima lalu menolak kelihatan sama seperti port tertutup dari jauh.
Jika perkhidmatan berjalan pada komputer riba yang ditambat sebaliknya, alamat hotspot telefon bukan destinasi langsung. Anda memerlukan alamat komputer riba pada antara muka hotspot dan pendengar pada komputer riba, dan telefon tidak lagi memiliki apa-apa kecuali pemajuan.
Titik masuk kedua: laluan pembawa
Mencapai telefon dari rangkaian mudah alih ialah masalah berbeza, dan selalunya ia langsung tidak berfungsi untuk IPv4. Pembawa meletakkan telefon di belakang terjemahan dikongsi, sebab itulah RFC 6598 menyediakan julat alamat dikongsi khusus untuk susunan itu. Sambungan masuk yang tidak diminta tiada pemetaan untuk dilaluinya, dan tiada konfigurasi setempat yang menciptanya, kerana penterjemah itu bukan peranti anda.
Akses root juga tidak mengubahnya. Ia memberi anda kawalan ke atas tindanan telefon, bukan penterjemah pembawa, dan resipi yang menjanjikan sebaliknya biasanya menganggap alamat awam yang pembawa tidak pernah berikan. Di tempat pembawa menawarkan awalan IPv6 awam, laluan masuk mungkin wujud, tetapi pendengar dan firewall telefon masih memerlukan kebenaran yang disengajakan sebelum apa-apa menjawab.
Titik masuk ketiga: keluar VPN
Alamat yang dilaporkan tapak web semasa terowong aktif ialah alamat keluar bagi trafik keluar yang dilindungi. Itu bukan perkara sama dengan alamat yang menerima sambungan masuk bagi pihak anda. Menggunakannya untuk trafik masuk memerlukan ciri yang benar-benar ditawarkan penyedia, seperti port dimajukan atau pemetaan masuk yang terikat pada akaun anda, serta laluan boleh guna dari keluar ke klien.
Peraturan kebenaran setempat tidak boleh mencipta pemetaan itu. Apa yang boleh dilakukannya ialah mengubah laluan yang diambil oleh balasan aplikasi, dan ini penting apabila aplikasi dikecualikan daripada terowong: permintaan dan balasan boleh berakhir dalam konteks rangkaian berbeza, dan sambungan gagal dengan cara yang kelihatan seperti masalah firewall.
Uji satu laluan dari hujung ke hujung, kemudian namakan pemiliknya
Tulis tupel itu sebelum menguji: sumber yang dimaksudkan, alamat destinasi, pengangkutan, port dan mesin yang memiliki soket mendengar. Jika mana-mana unsur ialah tekaan, ujian tidak akan memberitahu anda apa-apa yang berguna, dan anda akhirnya akan mengubah lapisan kedua untuk menjelaskan yang pertama.
Kemudian uji satu laluan dibenarkan itu dengan pengesahan aplikasi masih utuh. Elakkan menerbitkan pendengar luas atau mematikan kawalan tidak berkaitan hanya supaya semakan alamat awam yang kabur menjawab, kerana kedua-dua perubahan bertahan lebih lama daripada ujian dan kedua-duanya tidak membuktikan reka bentuk berfungsi.
Subsistem tethering Android memajukan trafik hilir melalui laluannya sendiri, berasingan daripada tangkapan VPN aplikasi biasa, jadi pelayar yang berfungsi pada komputer riba yang ditambat tidak mengatakan apa-apa tentang akses masuk ke perkhidmatan pada telefon. Sebelum anda menganggapnya berfungsi:
- Soket mendengar berada pada alamat yang boleh dicapai rakan yang dimaksudkan, bukan loopback.
- Rakan itu menggunakan alamat milik titik masuk tersebut, bukan alamat keluar dari halaman status.
- Sebarang pemetaan di pihak pembawa atau penyedia ialah ciri yang disokong, bukan peraturan yang anda tambah secara setempat.
- Permintaan dan balasan melalui konteks rangkaian yang sama, dan pengesahan aplikasi masih lulus.