Portin edelleenohjaus Android-hotspotissa: kolme sisäänkäyntiä
Puhelin, operaattorin reitti ja VPN:n ulostulo näyttävät eri rajat. Selvitä, mikä kone omistaa kuuntelevan socketin ennen kuin avaat portin.
Kytkit hotspotin päälle, liitit VPN:n, avasit sovelluksessa portin, ja toinen laite ei silti saa yhteyttä. Puuttuva pala ei lähes koskaan ole itse portti, vaan kysymys siitä, mikä kone omistaa kuuntelevan socketin ja mihin osoitteeseen toisen laitteen pitäisi päästä. Etenen puhelimesta ulospäin, koska edessäsi oleva näyttö kertoo, mitä kolmesta sisäänkäynnistä todella testaat.
Aloita siitä, missä palvelu oikeasti pyörii
Avaa sovellus, jonka pitäisi ottaa yhteys vastaan, ja lue sen oma tilasivu. Jos se kertoo kuuntelevansa, kirjaa ylös osoite, johon se on sidottu, koska tämä yksi yksityiskohta ratkaisee useimmat alla olevat tapaukset. 127.0.0.1-osoitteeseen sidottu sovellus on tavoitettavissa vain puhelimesta, eikä sitä muuta hotspot-asiakas, operaattorin kartoitus tai VPN:n ulostulo.
Vahvista sitten, mikä laite pyörittää palvelua. Jos se on puhelin, socket kuuluu kyseiselle sovellukselle; jos se on hotspotin takana oleva kannettava, kuuntelija ja sen palomuuri kuuluvat kannettavalle ja puhelin vain välittää paketteja. Ne ovat eri suunnitteluja, ja niiden sekoittaminen on syy siihen, miksi yhteen kohtaan avattu portti ei tee toisessa kohdassa mitään.
Virheenkorjattavassa buildissa adb shell listaa socketit /proc/net/tcp-tiedoston kautta, mutta useimmille sovelluksen oma tila on rehellinen lähde.
Ensimmäinen sisäänkäynti: toinen laite hotspotissa
Tämä on paikallinen tapaus ja helpoin. Toinen laite saavuttaa puhelimen osoitteessa, jonka se näkee yhdyskäytävänään, portissa, jossa sovellus kuuntelee, eikä mikään hotspotin ulkopuolella osallistu. Operaattorin kartoitusta ei tarvita, koska liikenne ei koskaan poistu paikallisesta segmentistä.
Kaksi asiaa rikkoo sen: sovellus on sidottu loopbackiin, tai puhelimen asiakaskäytäntö ei salli paikallista yhteyttä. Testaa sovelluksen omalla protokollalla äläkä paljaalla TCP:llä, koska kuuntelija, joka hyväksyy ja sitten hylkää, näyttää kaukaa suljetulta portilta.
Jos palvelu pyörii liitetyssä kannettavassa, puhelimen hotspot-osoite ei ole lainkaan kohde; tarvitset kannettavan osoitteen hotspot-rajapinnassa ja kuuntelijan sinne.
Toinen sisäänkäynti: operaattorin reitti
Puhelimen tavoittaminen matkapuhelinverkosta on toinen ongelma, eikä se yleensä toimi IPv4:lle. Operaattorit asettavat laitteet jaetun käännöksen taakse, ja siksi RFC 6598 varaa juuri sellaista järjestelyä varten jaetun osoitealueen. Pyytämätön saapuva yhteys ei löydä kartoitusta, jonka kautta saapua, eikä mikään paikallinen asetus luo sellaista, koska kääntäjä ei ole sinun laitteesi.
Root-käyttöoikeus ei muuta sitä; se antaa hallinnan puhelimen pinoon, ei operaattorin kääntäjään. Jos operaattori tarjoaa julkisen IPv6-etuliitteen, saapuva reitti voi olla olemassa, mutta kuuntelija ja palomuuri tarvitsevat silti tietoisen luvan.
Kolmas sisäänkäynti: VPN:n ulostulo
Osoite, jonka verkkosivusto ilmoittaa tunnelin ollessa auki, on ulostulon osoite katetulle lähtevälle liikenteelle. Se ei ole osoite, joka ottaisi saapuvia yhteyksiä vastaan puolestasi. Sen käyttäminen sisäänpäin vaatii ominaisuuden, jota palveluntarjoaja todella tarjoaa, kuten edelleenohjatun portin, sekä toimivan reitin ulostulosta asiakkaalle.
Paikallinen sallintasääntö ei voi luoda sellaista kartoitusta. Se mitä se tekee, on muuttaa sitä reittiä, jota sovelluksen vastaukset kulkevat, ja sillä on merkitystä, kun sovellus on jätetty tunnelin ulkopuolelle: pyyntö ja vastaus voivat päätyä eri verkkokonteksteihin ja yhteys epäonnistuu kuin palomuuriongelma.
Testaa yksi reitti päästä päähän ja nimeä sitten omistaja
Kirjoita monikko ennen testiä: aiottu lähde, kohdeosoite, kuljetus, portti ja kone, joka omistaa kuuntelevan socketin. Jos jokin osa on arvaus, testi ei kerro sinulle mitään hyödyllistä.
Testaa sitten tuo yksi valtuutettu reitti sovelluksen todennus ehjänä. Älä julkaise leveää kuuntelijaa äläkä kytke pois asiaankuulumattomia kontrolleja vain saadaksesi epäselvän osoitetarkistuksen vastaamaan, koska molemmat muutokset jäävät testin jälkeen voimaan.
Androidin yhteysjaon alijärjestelmä välittää alaspäin menevän liikenteen omalla reitillään, erillään tavallisesta VPN-kaappauksesta, joten liitetyssä kannettavassa toimiva selain ei kerro mitään puhelimen palveluun kohdistuvasta saapuvasta pääsystä. Ennen kuin sanot sen toimivan:
- Kuuntelija on osoitteessa, johon vastapuoli pääsee, ei loopbackissa.
- Vastapuoli käyttää juuri sen sisäänkäynnin osoitetta, ei tilasivun ulostulo-osoitetta.
- Mikä tahansa operaattorin tai tarjoajan puolen kartoitus on tuettu ominaisuus, ei paikallisesti lisätty sääntö.
- Pyyntö ja vastaus kulkevat saman verkkokontekstin läpi ja todennus menee yhä läpi.