Přesměrování portů na hotspotu Android: tři vstupní body
Telefon, cesta přes operátora a výstup VPN ukazují různé hranice. Zjistěte, který stroj drží naslouchající socket, než otevřete port.
Zapnuli jste hotspot, připojili VPN, otevřeli port v aplikaci a druhé zařízení se přesto nepřipojí. Chybějící díl téměř nikdy není port samotný, ale otázka, který stroj drží naslouchající socket a na jakou adresu má druhé zařízení dosáhnout. Jdu od telefonu ven, protože obrazovka před vámi ukazuje, který ze tří vstupních bodů právě testujete.
Začněte tam, kde služba opravdu běží
Otevřete aplikaci, která má spojení přijímat, a přečtěte si její stránku stavu. Pokud hlásí, že naslouchá, poznamenejte si adresu, na kterou je vázaná, protože tento jediný detail rozhoduje většinu případů níže. Aplikace vázaná na 127.0.0.1 je dostupná jen z telefonu a nezmění to klient hotspotu, mapování u operátora ani výstup VPN.
Potom ověřte, které zařízení službu provozuje. Je-li to telefon, socket patří oné aplikaci; je-li to notebook za hotspotem, naslouchač i jeho firewall patří notebooku a telefon jen předává pakety. To jsou různé konstrukce a jejich míchání je důvod, proč port otevřený na jednom místě nic nedělá na druhém.
V laditelné sestavě vypíše adb shell sockety přes /proc/net/tcp, ale pro většinu lidí je poctivým zdrojem vlastní stav aplikace.
První vstupní bod: jiné zařízení na hotspotu
To je místní případ a nejjednodušší. Druhé zařízení dosáhne telefonu na adrese, kterou vidí jako svou bránu, na portu, na kterém aplikace naslouchá, a nic mimo hotspot se neúčastní. Mapování u operátora není potřeba, protože provoz neopouští místní segment.
Dvě věci to rozbíjejí: aplikace je vázaná na loopback, nebo klientská politika telefonu místní spojení nepovoluje. Testujte vlastním protokolem aplikace, ne holým TCP, protože naslouchač, který přijme a pak odmítne, z dálky vypadá jako zavřený port.
Běží-li služba na připojeném notebooku, adresa hotspotu v telefonu není cíl; potřebujete adresu notebooku na rozhraní hotspotu a naslouchač tam.
Druhý vstupní bod: cesta přes operátora
Dosáhnout telefonu z mobilní sítě je jiný problém a většinou pro IPv4 nefunguje. Operátoři stavějí přístroje za sdílený překlad, a proto RFC 6598 vyhradil pro takové uspořádání sdílený rozsah adres. Nevyžádané příchozí spojení nemá mapování, kterým by dorazilo, a žádná místní konfigurace ho nevytvoří, protože překladač není vaše zařízení.
Root přístup to nemění; dává kontrolu nad zásobníkem telefonu, ne nad překladačem operátora. Nabízí-li operátor veřejný prefix IPv6, příchozí cesta může existovat, ale naslouchač i firewall stejně potřebují výslovné svolení.
Třetí vstupní bod: výstup VPN
Adresa, kterou web hlásí při zapnutém tunelu, je adresa výstupu pro krytý odchozí provoz. Není to adresa, která by přijímala příchozí spojení vaším jménem. Použití dovnitř vyžaduje funkci, kterou poskytovatel skutečně nabízí, třeba přesměrovaný port, plus funkční cestu z výstupu ke klientovi.
Místní pravidlo povolení takové mapování nevytvoří. Mění cestu, kterou jdou odpovědi aplikace, což je důležité, když je aplikace z tunelu vyjmuta: požadavek a odpověď mohou skončit v různých síťových kontextech a spojení selže jako problém firewallu.
Otestujte jednu cestu od začátku do konce, pak pojmenujte vlastníka
Zapište si čtveřici před testem: zamýšlený zdroj, cílovou adresu, přenos, port a stroj, který drží naslouchající socket. Je-li některý prvek domněnka, test vám nic užitečného neřekne.
Pak otestujte tu jedinou povolenou cestu s neporušeným ověřováním aplikace. Nezveřejňujte široký naslouchač a nevypínejte nesouvisející kontroly jen aby odpověděla nejednoznačná kontrola adresy, protože obě změny test přežijí.
Androidí subsystém pro sdílení připojení předává sestupný provoz vlastní cestou, odděleně od běžného zachytávání VPN, takže fungující prohlížeč na připojeném notebooku nic neříká o příchozím přístupu ke službě v telefonu. Než řeknete, že to funguje:
- Naslouchač je na adrese dosažitelné protější stranou, ne na loopbacku.
- Protější strana používá adresu tohoto vstupního bodu, ne adresu výstupu ze stránky stavu.
- Každé mapování u operátora či poskytovatele je podporovaná funkce, ne místně přidané pravidlo.
- Požadavek i odpověď procházejí stejným kontextem a ověření stále prochází.