Táto predstava je dosť rozšírená na to, aby sa brala ako fakt: Android povoľuje len jeden VPN, takže SSH server bežiaci na telefóne nemôže fungovať cez ten tunel. Prvá polovica je pravdivá a záver z nej nevyplýva. Limit platformy sa týka toho, koľko aplikácií môže obsadiť miesto služby VPN, nie toho, koľko socketov môže existovať ani kto sa smie pripojiť k telefónu. SSH démon s počúvajúcim socketom je obyčajná aplikácia s obyčajným portom a tunel je jednou z ciest, ktorými môže ísť jeho prevádzka.

Čo pravidlo jedného VPN naozaj obmedzuje

VpnService je zdroj s jedným miestom. Keď aplikácia vytvorí tunel, stane sa VPN zariadenia, a druhá aplikácia, ktorá sa ho pokúsi vytvoriť, je odmietnutá, kým prvá nezmizne. Je to pravidlo o vlastníctve tunela a vysvetľuje, prečo dva VPN klienty nemôžu bežať súčasne.

O počúvajúcich socketoch nehovorí nič. SSH server nevolá VpnService, neodchytáva pakety a nesúťaží o to miesto. Zviaže port a prijíma spojenia, čo je to isté, čo by robil bez akéhokoľvek nainštalovaného VPN. Mýtus teda zamieňa limit pre poskytovateľov tunelov s limitom pre sieťové spojenia a tieto dve veci spolu nesúvisia.

Listener je cieľ, nie časť tunela

Keď tunel existuje, telefón má na ňom adresu a partnerské zariadenie má trasu k tej adrese. Či niečo odpovie, rozhoduje listener. Démon zviazaný s loopbackom je dostupný iba z telefónu samotného; démon zviazaný so starou adresou tunela môže po opätovnom pripojení zachovať svoje zviazanie, hoci adresa, s ktorou sa zviazal, sa zmenila.

Pravidlá zviazania sú obyčajná konfigurácia SSH: adresa a port na počúvanie a kto sa môže autentifikovať. V Androide tieto nastavenia žijú v konfigurácii samotnej aplikácie a vlastník procesu aplikácie nemusí mať povolenie používať privilegované porty, takže zvyk z počítača zviazať port 22 ako root sa neprenáša nezmenený.

ListenAddress 10.90.0.4
Port 2222
AllowUsers alice

Potom je tu povolenie na samotnej ceste. Spotrebiteľský VPN, ktorý rád prenáša odchádzajúcu webovú prevádzku, vôbec nemusí povoliť prichádzajúce spojenia ku svojim klientom; mnohé to nerobia, pretože by to vystavilo jedného zákazníka druhému. Ak sa partner nevie odnikiaľ dostať na adresu tunela telefónu, problém je v politike služby, nie v telefóne.

Cesta odpovede je miesto, kde sa to zvyčajne láme

Predpokladajme, že partner dosiahne adresu tunela telefónu a príde SYN. Teraz musí odpoveď odísť tou istou cestou, a to je rozhodnutie o smerovaní vnútri telefónu. Ak odpoveď odíde cez Wi-Fi, pretože to je predvolená sieť, partner vidí spojenie, ktoré sa nikdy nedokončí, čo vyzerá presne ako firewall.

Android to robí zložitejším než počítač, pretože predvolená sieť sa vyberá pre každý proces a môže ju zmeniť politika aplikácie VPN. VPN klient môže smerovať len zoznam povolených aplikácií, takže serverová aplikácia mimo tohto zoznamu naďalej používa fyzickú sieť na svoje odpovede, kým partner ich očakáva cez tunel.

Aplikácia môže tiež zviazať svoje sockety s konkrétnou sieťou, čo prepíše predvolenú. Keď čítate správu, že služba je dostupná z jednej adresy a nie z inej, zvyčajne je toto mechanizmus, ktorý za tým stojí.

Obchádzanie VPN neopraví prichádzajúcu službu

Populárne riešenie, vylúčenie SSH aplikácie z VPN, aby sa jej prevádzka prestala presmerúvať, je opravou opačného problému. Pomáha, keď sa transport odchádzajúceho SSH klienta neustále láme pre tunel. Pre hostovaný server môže vyniesť odpovede z tunela, ktorý partner používa, čo zmení čiastočné zlyhanie na úplné.

To isté platí pre otvorenie verejného portu na routeri. Ak je požiadavka, aby jedno autorizované zariadenie dosiahlo telefón cez VPN, vystavenie SSH internetu je iný model hrozieb a nie oprava.

Najprv rozhodnite adresu služby: LAN adresu telefónu, jeho adresu tunela alebo zámerne presmerovaný koncový bod. Každá má svoju vlastnú zmluvu o dostupnosti a vystavení a ich miešanie je spôsob, akým sa malý problém s prístupom stane trvalou dierou.

Diagnostikujte jeden smer naraz

Pred zmenou konfigurácie si zapíšte štyri fakty: adresu, ku ktorej sa partner pripája, stav listenera na telefóne, kontext aplikácie a používateľa, ktorý ho vlastní, a cestu pozorovanú v každom smere. Správa, ktorá hovorí, že VPN odpája SSH, neobsahuje ani jeden z nich a nedokáže odlíšiť problém transportu klienta od nedostupného servera.

adb shell ip -br addr
adb shell ip route get 10.90.0.9
nc -vz 10.90.0.4 2222

Spustite kontrolu portu z partnera, nie z telefónu, a prečítajte si podrobný výstup SSH klienta, aby ste videli, či zlyháva pred alebo po TCP handshaku. Socket, ktorý sa nikdy nepripojí, a odmietnuté prihlásenie sú rôzne fázy s rôznymi zodpovednými.

Počas ladenia nechajte overovanie kľúča hostiteľa a obmedzenia účtu nedotknuté. Práve obmedzenie listenera a povolených používateľov robí dostupný server prijateľným; ich uvoľnenie, aby spojenie fungovalo, vymieňa jeden problém za horší. Referencia servera OpenSSH pokrýva kontroly počúvania a prístupu, ak vaša implementácia Androidu používa rovnaké názvy konfigurácie.

Súvisiace články