Vjerovanje je dovoljno uobičajeno da se tretira kao činjenica: Android dopušta samo jedan VPN, pa SSH poslužitelj koji radi na telefonu ne može funkcionirati kroz taj tunel. Prva polovica je istinita i zaključak iz nje ne slijedi. Ograničenje platforme odnosi se na to koliko aplikacija može zauzeti mjesto VPN usluge, a ne na to koliko socket-a može postojati ni kome je dopušteno spojiti se na telefon. SSH daemon s uključenim socketom obična je aplikacija s običnim portom, a tunel je jedan od puteva kojima njezin promet može ići.

Što pravilo jedne VPN zapravo ograničava

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

Ne govori ništa o socketima koji slušaju. SSH poslužitelj ne poziva VpnService, ne presreće pakete i ne natječe se za to mjesto. Vezuje port i prihvaća veze, što je isto što bi činio bez instaliranog VPN-a. Mit dakle miješa ograničenje na pružatelje tunela s ograničenjem na mrežne veze, a njih dvoje nisu povezani.

Slušatelj je odredište, ne dio tunela

Kad tunel postoji, telefon na njemu ima adresu, a partnerski uređaj ima rutu do te adrese. Hoće li išta odgovoriti odlučuje slušatelj. Daemon vezan na loopback dostupan je samo s telefona; daemon vezan na staru adresu tunela može zadržati svoju vezu nakon ponovnog spajanja iako se adresa na koju se vezao promijenila.

Pravila vezanja obična su SSH konfiguracija: adresa i port za slušanje te tko se može autentificirati. Na Androidu te postavke žive u konfiguraciji same aplikacije, a vlasniku procesa aplikacije možda nije dopušteno koristiti privilegirane portove, pa se navika s računala da se port 22 veže kao root ne prenosi nepromijenjena.

ListenAddress 10.90.0.4
Port 2222
AllowUsers alice

Zatim je tu dopuštenje na samom putu. Potrošački VPN koji rado prenosi odlazni web promet uopće ne mora dopustiti dolazne veze prema svojim klijentima; mnogi to ne čine jer bi izložili jednog korisnika drugome. Ako partner ne može od nikuda dosegnuti adresu tunela telefona, problem je u politici usluge, a ne u telefonu.

Povratni put je mjesto gdje 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 usmjeravanju unutar telefona. Ako odgovor izađe preko Wi-Fi-ja jer je to zadana mreža, partner vidi vezu koja se nikad ne dovrši, što izgleda točno kao vatrozid.

Android to čini složenijim od računala jer se zadana mreža bira po procesu i politika VPN aplikacije može je promijeniti. VPN klijent može usmjeravati samo popis dopuštenih aplikacija, pa serverska aplikacija izvan tog popisa nastavlja koristiti fizičku mrežu za svoje odgovore dok partner očekuje da dođu kroz tunel.

Aplikacija također može vezati svoje sockete na određenu mrežu, što nadjačava zadanu. Kada čitate izvještaj da je usluga dostupna s jedne adrese, a s druge nije, to je obično mehanizam koji stoji iza toga.

Zaobilaženje VPN-a ne popravlja dolaznu uslugu

Popularno rješenje, izuzimanje SSH aplikacije iz VPN-a kako bi se njezin promet prestao preusmjeravati, popravak je za suprotan problem. Pomaže kad se prijenos odlaznog SSH klijenta stalno lomi zbog tunela. Za hostani poslužitelj može izmjestiti odgovore iz tunela koji partner koristi, što djelomični kvar pretvara u potpuni.

Isto vrijedi za otvaranje javnog porta na routeru. Ako je zahtjev da jedan ovlašteni uređaj dosegne telefon preko VPN-a, izlaganje SSH-a internetu drugi je model prijetnje, a ne popravak.

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

Dijagnosticirajte jedan smjer odjednom

Zapišite četiri činjenice prije promjene konfiguracije: adresu na koju se partner spaja, stanje slušatelja na telefonu, kontekst aplikacije i korisnika koji ga posjeduje te put opažen u svakom smjeru. Izvještaj koji kaže da VPN prekida SSH ne sadrži nijednu od njih i ne može razlikovati problem prijenosa klijenta od nedostupnog poslužitelja.

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

Pokrenite provjeru porta s partnera, ne s telefona, i pročitajte opširni izlaz SSH klijenta da vidite pada li prije ili nakon TCP rukovanja. Socket koji se nikad ne spoji i odbijena prijava različite su faze s različitim vlasnicima.

Držite provjeru ključa hosta i ograničenja računa netaknutima dok tražite grešku. Upravo ograničavanje slušatelja i dopuštenih korisnika čini dostupni poslužitelj prihvatljivim; njihovo popuštanje da bi veza proradila mijenja jedan problem za gori. Referenca OpenSSH poslužitelja pokriva kontrole slušanja i pristupa ako vaša Android implementacija slijedi iste nazive konfiguracije.

Povezani članci