Prosljeđivanje portova na Android hotspot-u: tri ulazne točke
Telefon, put kroz operatera i izlaz VPN-a pokazuju različite granice. Utvrdite koji računar drži socket koji sluša prije nego otvorite port.
Uključili ste hotspot, povezali VPN, otvorili port u aplikaciji, a drugi se uređaj i dalje ne može povezati. Dio koji nedostaje gotovo nikada nije sam port, nego pitanje koji računar drži socket koji sluša i koju adresu drugi uređaj treba dosegnuti. Krećem od telefona prema van, jer zaslon pred vama govori koju od tri ulazne točke zapravo testirate.
Počnite gdje usluga zaista radi
Otvorite aplikaciju koja treba prihvatiti vezu i pročitajte njezinu stranicu stanja. Ako piše da sluša, zapišite adresu na koju je vezana, jer taj jedan detalj odlučuje većinu slučajeva ispod. Aplikacija vezana na 127.0.0.1 dostupna je samo s telefona, i to ne mijenja klijent hotspot-a, mapiranje operatera ni izlaz VPN-a.
Zatim provjerite koji uređaj pokreće uslugu. Ako je telefon, socket pripada toj aplikaciji; ako je laptop iza hotspot-a, slušalac i njegov vatrozid pripadaju laptopu, a telefon samo prosljeđuje pakete. To su različiti dizajni, i njihovo miješanje je razlog zašto port otvoren na jednom mjestu ne radi ništa na drugom.
U buildu koji se može otklanjati adb shell navodi sockete kroz /proc/net/tcp, ali većini je vlastito stanje aplikacije iskren izvor.
Prva ulazna točka: drugi uređaj na hotspot-u
To je lokalni slučaj i najlakši. Drugi uređaj dolazi do telefona na adresi koju vidi kao svoj gateway, na portu na kojem aplikacija sluša, i ništa izvan hotspot-a ne sudjeluje. Mapiranje operatera nije potrebno jer promet ne napušta lokalni segment.
Dvije stvari to kvare: aplikacija je vezana na loopback, ili klijentska politika na telefonu ne dopušta lokalnu vezu. Testirajte vlastitim protokolom aplikacije, a ne golim TCP-om, jer slušalac koji prihvati pa odbije izdaleka izgleda kao zatvoren port.
Ako usluga radi na povezanom laptopu, adresa hotspot-a na telefonu uopće nije odredište; potrebna je adresa laptopa na sučelju hotspot-a i slušalac tamo.
Druga ulazna točka: put kroz operatera
Dolazak do telefona iz mobilne mreže drugi je problem i najčešće ne radi za IPv4. Operateri stavljaju uređaje iza zajedničkog prevođenja, i zato RFC 6598 izdvaja zajednički raspon adresa upravo za takav raspored. Neželjena dolazna veza nema mapiranje kroz koje bi stigla, i nikakva lokalna postavka ga ne stvara, jer prevoditelj nije vaš uređaj.
Root pristup to također ne mijenja; daje kontrolu nad stekom telefona, ne nad prevoditeljem operatera. Ako operater nudi javni prefiks IPv6, dolazni put može postojati, ali slušalac i vatrozid i dalje traže izričito odobrenje.
Treća ulazna točka: izlaz VPN-a
Adresa koju web stranica prijavi dok je tunel otvoren jest adresa izlaza za pokriveni odlazni promet. To nije adresa koja prima dolazne veze u vaše ime. Korištenje prema unutra traži funkciju koju pružatelj stvarno nudi, poput proslijeđenog porta, uz upotrebljiv put od izlaza do klijenta.
Lokalno pravilo dopuštenja ne može stvoriti to mapiranje. Ono mijenja put kojim idu odgovori aplikacije, što je važno kada je aplikacija izuzeta iz tunela: zahtjev i odgovor mogu završiti u različitim mrežnim kontekstima i veza padne kao problem vatrozida.
Testirajte jedan put od početka do kraja, pa imenujte vlasnika
Zapišite skup prije testa: željeni izvor, adresu odredišta, prijenos, port i računar koji drži socket koji sluša. Ako je bilo koji element nagađanje, test vam neće reći ništa korisno.
Zatim testirajte taj jedini odobreni put uz netaknutu autentifikaciju aplikacije. Ne objavljujte širok slušalac i ne isključujte nepovezane kontrole samo da bi dvosmislena provjera adrese odgovorila, jer obje promjene nadžive test.
Android podsustav za dijeljenje veze prosljeđuje silazni promet svojim putem, odvojeno od uobičajenog hvatanja VPN-a, pa preglednik koji radi na povezanom laptopu ne govori ništa o dolaznom pristupu usluzi na telefonu. Prije nego kažete da radi:
- Slušalac je na adresi koju drugi kraj može dosegnuti, a ne na loopback-u.
- Drugi kraj koristi adresu te ulazne točke, a ne adresu izlaza sa stranice stanja.
- Svako mapiranje kod operatera ili pružatelja je podržana funkcija, a ne lokalno dodano pravilo.
- Zahtjev i odgovor idu kroz isti mrežni kontekst i autentifikacija prolazi.