Ovo uverenje je dovoljno uobičajeno da se tretira kao činjenica: Android dopušta samo jednu VPN, pa SSH server koji radi na telefonu ne može funkcionisati kroz taj tunel. Prva polovina je tačna i zaključak iz nje ne sledi. Ograničenje platforme odnosi se na to koliko aplikacija može zauzeti mesto VPN usluge, a ne na to koliko socket-a može postojati ni kome je dopušteno da se poveže sa telefonom. SSH daemon sa socketom koji sluša obična je aplikacija sa običnim portom, a tunel je jedan od puteva kojima njen saobraćaj može ići.

Šta pravilo jedne VPN zapravo ograničava

VpnService je resurs sa jednim mestom. Kada aplikacija uspostavi tunel, ona postaje VPN uređaja, a druga aplikacija koja pokuša da ga uspostavi biva odbijena dok prva ne nestane. To je pravilo o vlasništvu nad tunelom i objašnjava zašto dva VPN klijenta ne mogu raditi istovremeno.

O socketima koji slušaju ne govori ništa. SSH server ne poziva VpnService, ne presreće pakete i ne takmiči se za to mesto. On vezuje port i prihvata veze, isto što bi radio i bez instalirane VPN. Mit dakle meša ograničenje na pružaoce tunela sa ograničenjem na mrežne veze, a njih dvoje nisu povezani.

Slušalac je odredište, a ne deo tunela

Kada tunel postoji, telefon na njemu ima adresu, a partnerski uređaj ima rutu do te adrese. Hoće li nešto odgovoriti odlučuje slušalac. Daemon vezan za loopback dostupan je samo sa telefona; daemon vezan za staru adresu tunela može zadržati svoju vezu posle ponovnog povezivanja iako se adresa na koju se vezao promenila.

Pravila vezivanja su obična SSH konfiguracija: adresa i port za slušanje i ko može da se autentifikuje. Na Androidu te postavke žive u konfiguraciji same aplikacije, a vlasniku procesa aplikacije možda nije dopušteno da koristi privilegovane portove, pa se navika sa računara da se port 22 veže kao root ne prenosi nepromenjena.

ListenAddress 10.90.0.4
Port 2222
AllowUsers alice

Zatim je tu dozvola na samom putu. Potrošačka VPN koja rado prenosi odlazni web saobraćaj uopšte ne mora dopustiti dolazne veze ka svojim klijentima; mnoge to ne čine jer bi izložile jednog korisnika drugome. Ako partner ne može niotkuda da dosegne adresu tunela telefona, problem je u politici usluge, a ne u telefonu.

Povratni put je mesto gde se to obično lomi

Pretpostavimo da partner dosegne adresu tunela telefona i da SYN stigne. Sada odgovor mora izaći istim putem, a to je odluka o rutiranju unutar telefona. Ako odgovor izađe preko Wi-Fi-ja jer je to podrazumevana mreža, partner vidi vezu koja se nikad ne dovrši, što izgleda tačno kao zaštitni zid.

Android to čini složenijim od računara jer se podrazumevana mreža bira po procesu i politika VPN aplikacije može je promeniti. VPN klijent može da usmerava samo listu dopuštenih aplikacija, pa serverska aplikacija izvan te liste nastavlja da koristi fizičku mrežu za svoje odgovore dok partner očekuje da oni dođu kroz tunel.

Aplikacija takođe može da veže svoje sockete za određenu mrežu, što nadjačava podrazumevano. Kada čitate izveštaj da je usluga dostupna sa jedne adrese, a sa druge nije, to je obično mehanizam koji stoji iza toga.

Zaobilaženje VPN ne popravlja dolaznu uslugu

Popularno rešenje, izuzimanje SSH aplikacije iz VPN kako bi njen saobraćaj prestao da se preusmerava, popravka je za suprotan problem. Pomaže kada se transport odlaznog SSH klijenta stalno lomi zbog tunela. Za hostovani server može da izmesti odgovore iz tunela koji partner koristi, što delimičan kvar pretvara u potpun.

Isto važi i za otvaranje javnog porta na ruteru. Ako je zahtev da jedan ovlašćeni uređaj dosegne telefon preko VPN, izlaganje SSH interneta je drugi model pretnje, a ne popravka.

Prvo odlučite adresu usluge: LAN adresu telefona, njegovu adresu tunela ili namerno prosleđenu krajnju tačku. Svaka ima svoj ugovor o dostupnosti i izloženosti, a njihovo mešanje je način na koji mali problem pristupa postaje trajna rupa.

Dijagnostikujte jedan smer odjednom

Zapišite četiri činjenice pre promene konfiguracije: adresu na koju se partner povezuje, stanje slušaoca na telefonu, kontekst aplikacije i korisnika koji ga poseduje i put opažen u svakom smeru. Izveštaj koji kaže da VPN prekida SSH ne sadrži nijednu od njih i ne može razlikovati problem transporta klijenta od nedostupnog servera.

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

Pokrenite proveru porta sa partnera, ne sa telefona, i pročitajte opširni izlaz SSH klijenta da vidite pada li pre ili posle TCP rukovanja. Socket koji se nikad ne poveže i odbijena prijava različite su faze sa različitim vlasnicima.

Držite proveru ključa hosta i ograničenja naloga netaknutima dok tražite grešku. Upravo ograničavanje slušaoca i dopuštenih korisnika čini dostupni server prihvatljivim; njihovo popuštanje da bi veza proradila menja jedan problem za gori. Referenca OpenSSH servera pokriva kontrole slušanja i pristupa ako vaša Android implementacija sledi iste nazive konfiguracije.

Povezani članci