Port forwarding sa Android hotspot: tatlong pasukan
Ang telepono, ang daan ng carrier at ang labasan ng VPN ay nagpapakita ng magkaibang hangganan. Alamin kung aling makina ang may-ari ng nakikinig na socket bago magbukas ng anumang port.
Binuhay mo ang hotspot, ikinonekta ang VPN, nagbukas ng port sa app, at hindi pa rin makakonekta ang kabilang device. Ang kulang na piraso ay halos hindi kailanman ang port mismo. Ang tanong ay kung aling makina ang may-ari ng nakikinig na socket at aling address ang dapat maabot ng kabilang device. Sinusundan ko ito mula sa telepono pakanluran, dahil ang screen na kinaroroonan mo ay nagsasabi kung alin sa tatlong pasukan ang talagang sinusubukan mo.
Magsimula kung saan talagang tumatakbo ang serbisyo
Buksan ang app na dapat tumanggap ng koneksyon at basahin ang sariling pahina ng estado. Kung sinasabi nitong nakikinig ito, itala ang address na kinabitan nito, dahil ang isang detalyeng iyon ang nagpapasya sa karamihan ng mga kaso sa ibaba. Ang app na nakakabit sa 127.0.0.1 ay maaabot lamang mula sa telepono mismo, at walang kliyente ng hotspot, pagmamapa ng carrier o labasan ng VPN ang magbabago nito.
Pagkatapos, tiyakin kung aling device ang nagpapatakbo ng serbisyo. Ito ay alinman sa telepono, at ang socket ay pag-aari ng app na iyon, o isang laptop sa likod ng hotspot, at ang tagapakinig at ang firewall nito ay pag-aari ng laptop at ang telepono ay nagpapasa lamang ng mga packet. Magkaibang disenyo ito na may magkaibang may-ari, at ang paghahalo sa kanila ang dahilan kung bakit ang port na binuksan sa isang lugar ay walang ginagawa sa kabila.
Sa isang build na maaaring i-debug, maaaring ilista ng adb shell ang mga socket sa pamamagitan ng /proc/net/tcp, ngunit para sa karamihan ng tao ang sariling estado ng app ang tapat na pinagmulan. Iniiwasan din nito ang bitag ng pagsubok sa socket na binuksan ng app sa address na hindi mo inaasahan.
Unang pasukan: ibang device sa hotspot
Ito ang lokal na kaso at pinakamadaling gawin nang tama. Naabot ng kabilang device ang telepono sa address na nakikita nitong gateway nito, sa port na pinakikinggan ng app, at wala sa labas ng hotspot ang kailangang masangkot. Walang kailangang pagmamapa ng carrier at walang kailangang tampok ng provider, dahil hindi kailanman lumalabas ang trapiko sa lokal na segment.
Dalawang bagay ang sumisira dito. Nakakabit ang app sa loopback, o hindi pinapayagan ng patakaran ng kliyente sa telepono ang lokal na koneksyon. Subukan gamit ang sariling protocol ng app sa halip na hubad na TCP na koneksyon kung nagpapatunay ng pagkakakilanlan ang app, dahil ang tagapakinig na tumatanggap at pagkatapos ay tumatanggi ay mukhang katulad ng saradong port mula sa malayo.
Kung ang serbisyo ay tumatakbo sa isang laptop na nakakabit sa telepono, ang address ng hotspot ng telepono ay hindi ang destinasyon. Kailangan mo ang address ng laptop sa interface ng hotspot at isang tagapakinig sa laptop, at ang telepono ay hindi na may-ari ng anuman maliban sa pagpapasa.
Ikalawang pasukan: daan ng carrier
Ang maabot ang telepono mula sa mobile network ay ibang problema, at kadalasan ay hindi ito gumagana para sa IPv4. Inilalagay ng mga carrier ang mga handset sa likod ng pinagsamang pagsasalin, kaya naglaan ang RFC 6598 ng pinagsamang hanay ng address para mismo sa ganoong kaayusan. Ang hindi hinihinging papasok na koneksyon ay walang pagmamapang madaraanan, at walang lokal na configuration ang gumagawa nito, dahil ang tagasalin ay hindi ang iyong device.
Hindi rin ito binabago ng root access. Binibigyan ka nito ng kontrol sa stack ng telepono, hindi sa tagasalin ng carrier, at ang mga recipe na nangangako ng kabaligtaran ay karaniwang ipinapalagay ang pampublikong address na hindi kailanman ibinigay ng carrier. Kung saan nag-aalok ang carrier ng pampublikong IPv6 prefix, maaaring may papasok na daan, ngunit ang tagapakinig at firewall ng telepono ay nangangailangan pa rin ng sadyang pahintulot bago may sumagot.
Ikatlong pasukan: labasan ng VPN
Ang address na iniuulat ng isang website habang buhay ang tunnel ay ang address ng labasan para sa sakop na palabas na trapiko. Hindi ito katulad ng address na tumatanggap ng papasok na koneksyon sa iyong ngalan. Ang paggamit nito para sa papasok ay nangangailangan ng tampok na talagang iniaalok ng provider, tulad ng naipasang port o papasok na pagmamapa na nakatali sa iyong account, kasama ang magagamit na daan mula sa labasan hanggang sa kliyente.
Hindi magagawang likhain ng lokal na tuntunin ng pahintulot ang pagmamapang iyon. Ang magagawa nito ay baguhin kung aling daan ang tinatahak ng mga sagot ng app, at mahalaga ito kapag ang app ay hindi kasama sa tunnel: ang kahilingan at ang sagot ay maaaring mauwi sa magkaibang konteksto ng network, at nabibigo ang koneksyon sa paraang mukhang problema sa firewall.
Subukan ang isang daan mula simula hanggang dulo, pagkatapos pangalanan ang may-ari
Isulat ang tuple bago magsubok: nilalayong pinagmulan, address ng destinasyon, transport, port at ang makinang may-ari ng nakikinig na socket. Kung ang alinman sa mga elemento ay hulaan, wala itong sasabihing kapaki-pakinabang sa iyo, at sa huli ay babaguhin mo ang ikalawang layer para ipaliwanag ang una.
Pagkatapos ay subukan ang isang pinahintulutang daan na iyon na buo ang pagpapatunay ng app. Iwasang maglathala ng malawak na tagapakinig o magpatay ng mga walang kaugnayang kontrol para lamang sumagot ang malabong pagtingin sa pampublikong address, dahil ang dalawang pagbabago ay mas matagal kaysa sa pagsubok at wala sa kanila ang nagpapatunay na gumagana ang disenyo.
Ang subsystem ng tethering ng Android ay nagpapasa ng downstream na trapiko sa sarili nitong daan, hiwalay sa karaniwang paghuli ng VPN ng app, kaya ang gumaganang browser sa nakakabit na laptop ay walang sinasabi tungkol sa papasok na pag-access sa isang serbisyo sa telepono. Bago mo sabihing gumagana ito:
- Ang nakikinig na socket ay nasa address na maaabot ng nilalayong kapares, hindi sa loopback.
- Ginagamit ng kapares ang address na kabilang sa pasukang iyon, hindi ang address ng labasan mula sa pahina ng estado.
- Ang anumang pagmamapa sa panig ng carrier o provider ay sinusuportahang tampok, hindi tuntuning idinagdag mo nang lokal.
- Ang kahilingan at sagot ay dumadaan sa parehong konteksto ng network, at pumasa pa rin ang pagpapatunay ng app.