To prepričanje je dovolj razširjeno, da ga obravnavajo kot dejstvo: Android dovoljuje samo en VPN, zato strežnik SSH na telefonu ne more delovati skozi ta tunel. Prva polovica je resnična in sklep iz nje ne sledi. Omejitev platforme se nanaša na to, koliko aplikacij lahko zasede mesto storitve VPN, ne na to, koliko socketov lahko obstaja ali kdo se sme povezati s telefonom. Daemon SSH s poslušajočim socketom je običajna aplikacija z običajnimi vrati, tunel pa je ena od poti, po katerih lahko gre njen promet.

Kaj pravilo enega VPN v resnici omejuje

VpnService je vir z enim mestom. Ko aplikacija vzpostavi tunel, postane VPN naprave, druga aplikacija, ki ga poskuša vzpostaviti, pa je zavrnjena, dokler prva ne izgine. To je pravilo o lastništvu tunela in pojasnjuje, zakaj dva odjemalca VPN ne moreta delovati hkrati.

O poslušajočih socketih ne pove ničesar. Strežnik SSH ne kliče VpnService, ne prestreza paketov in se ne poteguje za to mesto. Veže vrata in sprejema povezave, kar je isto, kot bi počel brez nameščenega VPN. Mit torej meša omejitev ponudnikov tunelov z omejitvijo omrežnih povezav, ti dve pa nista povezani.

Poslušalec je cilj, ne del tunela

Ko tunel obstaja, ima telefon na njem naslov, partnerska naprava pa pot do tega naslova. Ali se kaj odzove, odloči poslušalec. Daemon, vezan na loopback, je dosegljiv le s telefona samega; daemon, vezan na stari naslov tunela, lahko po ponovni povezavi obdrži vezavo, čeprav se je naslov, na katerega se je vezal, spremenil.

Pravila vezave so običajna konfiguracija SSH: naslov in vrata za poslušanje ter kdo se lahko overi. V Androidu te nastavitve živijo v konfiguraciji same aplikacije, lastniku procesa aplikacije pa morda ni dovoljeno uporabljati privilegiranih vrat, zato se navada z namizja, da se vrata 22 vežejo kot root, ne prenese nespremenjena.

ListenAddress 10.90.0.4
Port 2222
AllowUsers alice

Nato je tu dovoljenje na sami poti. Potrošniški VPN, ki z veseljem prenaša odhodni spletni promet, sploh ni dolžan dovoliti dohodnih povezav do svojih odjemalcev; mnogi tega ne storijo, ker bi to izpostavilo enega naročnika drugemu. Če partner od nikoder ne more doseči naslova tunela telefona, je težava v politiki storitve in ne v telefonu.

Povratna pot je tisto, kjer se običajno zlomi

Recimo, da partner doseže naslov tunela telefona in prispe SYN. Zdaj mora odgovor oditi po isti poti, to pa je odločitev o usmerjanju znotraj telefona. Če odgovor odide prek Wi-Fi, ker je to privzeto omrežje, partner vidi povezavo, ki se nikoli ne dokonča, kar je videti natanko kot požarni zid.

Android naredi to bolj zapleteno kot namizje, ker se privzeto omrežje izbere za vsak proces in ga lahko spremeni politika aplikacije VPN. Odjemalec VPN lahko usmerja le seznam dovoljenih aplikacij, zato strežniška aplikacija zunaj tega seznama še naprej uporablja fizično omrežje za svoje odgovore, medtem ko partner pričakuje, da bodo prišli skozi tunel.

Aplikacija lahko tudi veže svoje sockete na določeno omrežje, kar preglasi privzeto. Ko berete poročilo, da je storitev dosegljiva z enega naslova in ne z drugega, je običajno za tem prav ta mehanizem.

Obhod VPN ne popravi dohodne storitve

Priljubljena rešitev, izločitev aplikacije SSH iz VPN, da se njen promet ne preusmerja več, je popravek za nasprotno težavo. Pomaga, ko se prenos odhodnega odjemalca SSH zaradi tunela nenehno lomi. Za gostovani strežnik lahko odgovore iznese iz tunela, ki ga uporablja partner, kar delno okvaro spremeni v popolno.

Enako velja za odpiranje javnih vrat na usmerjevalniku. Če je zahteva, da ena pooblaščena naprava doseže telefon prek VPN, je izpostavljanje SSH internetu drug model groženj in ne popravilo.

Najprej določite naslov storitve: naslov LAN telefona, njegov naslov tunela ali namerno posredovano končno točko. Vsak ima svojo pogodbo o dosegljivosti in izpostavljenosti, njihovo mešanje pa je pot, po kateri majhna težava z dostopom postane trajna luknja.

Diagnosticirajte eno smer naenkrat

Preden spremenite konfiguracijo, zapišite štiri dejstva: naslov, s katerim se povezuje partner, stanje poslušalca v telefonu, kontekst aplikacije in uporabnika, ki jo ima v lasti, ter pot, opaženo v vsaki smeri. Poročilo, da VPN prekine SSH, ne vsebuje nobenega od njih in ne more ločiti težave s prenosom odjemalca od nedosegljivega strežnika.

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

Preverjanje vrat zaženite s partnerja, ne s telefona, in preberite podroben izhod odjemalca SSH, da vidite, ali odpove pred rokovanjem TCP ali po njem. Socket, ki se nikoli ne poveže, in zavrnjena prijava sta različni stopnji z različnimi odgovornimi.

Med odpravljanjem napak pustite preverjanje ključa gostitelja in omejitve računa nedotaknjene. Prav omejevanje poslušalca in dovoljenih uporabnikov naredi dosegljiv strežnik sprejemljiv; njihovo popuščanje, da bi povezava delovala, zamenja eno težavo za slabšo. Referenca strežnika OpenSSH pokriva nadzor poslušanja in dostopa, če vaša izvedba Androida sledi istim imenom konfiguracije.

Sorodni članki