రూట్ లేకుండా Android VPN: సమ్మతి, మార్గాలు మరియు నిరోధం ఎవరిది
సమ్మతి, TUN ఇంటర్ఫేస్ మరియు సిస్టమ్ నిరోధ విధానం మూడు వేర్వేరు అనుమతులు. Android VPN యాప్ను సమీక్షించే ముందు ప్రతి ఒక్కటి ఏ భాగానికి చెందుతుందో గుర్తించండి.
Android VPN యాప్ ట్రాఫిక్ మోయడానికి, లీక్లను నిరోధించడానికి లేదా రీబూట్ తర్వాత కొనసాగడానికి అనుమతించేది రూట్ కాదు. ప్రజలు ఇవన్నీ „యాప్కు VPN అనుమతి ఉంది“ అని సంక్షేపిస్తారు, ఇది మూడు వేర్వేరు యంత్రాంగాలను దాచుతుంది: వినియోగదారు ఇచ్చే సమ్మతి, సిస్టమ్ సృష్టించే ప్యాకెట్ ఇంటర్ఫేస్, మరియు యాప్ నిర్వచించాల్సినది కాని ప్లాట్ఫారమ్ నిరోధ విధానం. Android VPN డిజైన్ను సమీక్షించడం అంటే ఒక వాదన నిజానికి ఈ మూడింటిలో దేనిపై ఆధారపడి ఉందో అడగడం, ఎందుకంటే ప్రతి దానికి వేరే యజమాని మరియు వేరే వైఫల్య విధానం ఉన్నాయి.
సమ్మతి సిస్టమ్ యాక్టివిటీ ద్వారా వస్తుంది
VpnService.prepare() ఏమీ ఇవ్వదు. సమ్మతి లేనప్పుడు ఇది సిస్టమ్ సమ్మతి యాక్టివిటీకి intent తిరిగి ఇస్తుంది, మరియు వినియోగదారు సేవను ఆమోదించగలిగేలా యాప్ ఆ సంభాషణను తెరుస్తుంది. యాప్ తన స్వంత ప్రక్రియను ప్రారంభించడం, మానిఫెస్ట్కు అనుమతిని జోడించడం, లేదా అనుకూల „VPN ప్రారంభించు“ స్క్రీన్ను చూపడం అనుమతిని సృష్టించవు.
అనుమతికి పరిధి కూడా ఉంది. ఇది వినియోగదారు ప్రొఫైల్లోని ప్యాకేజీకి చెందుతుంది, కాబట్టి వ్యక్తిగత కాపీ మరియు పని కాపీ వేర్వేరు నిర్ణయాలు, మరియు పరికర యజమాని నిర్వహిత ప్రొఫైల్ను వ్యక్తిగత దాని నుండి భిన్నంగా సిద్ధం చేయవచ్చు. సంభాషణ ఎప్పుడూ కనిపించకపోతే మరియు prepare() null తిరిగి ఇస్తే, ఆ ప్రొఫైల్లో ఆ ప్యాకేజీకి సమ్మతి ఇప్పటికే ఉంది; ఇది యాప్ విశ్వసనీయమనడానికి సాక్ష్యం కాదు, అనుమతి ఉందని మాత్రమే.
ఇంటర్ఫేస్ అనేది సిస్టమ్ నెరవేర్చే అభ్యర్థన
సమ్మతి తర్వాత యాప్ VpnService.Builder ఉపయోగించి తనకు ఏమి కావాలో వివరిస్తుంది: చిరునామాలు, మార్గాలు, DNS సర్వర్లు, MTU మరియు మద్దతు ఉన్నచోట చేర్చాల్సిన లేదా మినహాయించాల్సిన యాప్లు. establish() సిస్టమ్ను టన్నెల్ ఇంటర్ఫేస్ను సృష్టించి సరిపోయే ట్రాఫిక్ను దానిలోకి పంపమని కోరుతుంది. రూటింగ్ నిర్ణయం సిస్టమ్ది; యాప్ ఫైల్ వివరణిని పొంది తర్వాత ప్యాకెట్లతో ఏదో ఉపయోగకరమైన పని చేయాలి.
| What you observe | Who actually owns it |
|---|---|
| VPN consent dialog | The system, triggered by prepare() |
| Routes, DNS and app lists | The app requests them; the system applies them |
| One active VPN per profile | The platform; a new service replaces the old one |
| Always-on and block-without-VPN | Device policy enforced by the platform |
ఆ పట్టిక ఒకే చోట నిర్మాణం. యాప్ ప్యాకెట్ నిర్వహణలో పాల్గొంటుంది; ఇంటర్ఫేస్, రూటింగ్ పట్టిక లేదా నడపగల సేవల సంఖ్య దానిది కాదు.
టన్నెల్ సాకెట్ తన సొంత టన్నెల్ నుండి తప్పించుకోవాలి
ఎన్క్రిప్ట్ చేసిన ట్రాఫిక్ మోసే కనెక్షన్ కూడా ఒక సాకెట్. యాప్ ఇప్పుడే సృష్టించిన ఇంటర్ఫేస్లోకి అది తిరిగి మళ్లించబడితే, టన్నెల్ టన్నెల్పై ఆధారపడి ఆగిపోతుంది. VpnService.protect() ఆ సాకెట్ను అంతర్లీన నెట్వర్క్కు కట్టివేస్తుంది, తద్వారా అది క్యాప్చర్ను దాటవేస్తుంది, అందుకే సరైన క్లయింట్ మొదటి హ్యాండ్షేక్కు ముందు తన బయటి సాకెట్ను రక్షిస్తుంది.
adb shell dumpsys connectivity | grep -i -A5 vpn
adb shell settings get global always_on_vpn_app
adb shell settings get global always_on_vpn_lockdown
ఈ ఆదేశాలు ఇన్స్టాల్ చేసిన VPN నెట్వర్క్, ఎల్లప్పుడూ ఆన్ ప్యాకేజీ మరియు లాక్డౌన్ సెట్ ఉందో లేదో చూపుతాయి. ఇవి చదవడానికి మాత్రమే పరిశీలనలు: విలువలు డిజైన్ వాదనతో సరిపోలకపోతే, వాదన సిస్టమ్ స్థితి గురించి కాదు, యాప్ ఇంటర్ఫేస్ గురించి.
నిరోధం ప్లాట్ఫారమ్ది కావచ్చు
Android VPN ఉపయోగించని కనెక్షన్లను నిరోధించే విధానాన్ని డాక్యుమెంట్ చేస్తుంది. ఆ అమలు ప్లాట్ఫారమ్ ఒప్పందం, యాప్ లూప్లో కనెక్షన్ను మళ్లీ ప్రయత్నించడం కాదు. స్విచ్ పరికరం VPN సెట్టింగ్లలో „VPN లేకుండా కనెక్షన్లను నిరోధించు“ అని ఉంది, నిర్వహిత పరికరంలో యజమాని దాన్ని మొత్తం ప్రొఫైల్కు ఆన్ చేయవచ్చు. మార్కెటింగ్ వాదనను అంచనా వేసేటప్పుడు ఈ భేదం ముఖ్యం: క్లయింట్ తాళం ఐకాన్ చూపి దూకుడుగా మళ్లీ కనెక్ట్ అవ్వవచ్చు, అయితే నేరుగా ట్రాఫిక్ ఇంకా సాధ్యమే; లేదా కవర్ చేసిన యాప్లు సిస్టమ్ లాక్డౌన్ అమలు చేస్తుండడంతో ఆఫ్లైన్లో ఉండవచ్చు.
తాళం ఐకాన్ను యాప్ గీస్తుంది, కాబట్టి అది యాప్ కనెక్ట్ అయిందని నమ్ముతుందని మాత్రమే రుజువు చేస్తుంది. మరో యాప్ తన నెట్వర్క్ యాక్సెస్ను కోల్పోతుందో లేదో ప్లాట్ఫారమ్ నిర్ణయిస్తుంది, కాబట్టి ఉపయోగకరమైన తనిఖీ టన్నెల్ ఆన్లో ఉన్నప్పుడు ఆ యాప్ విఫలమవడాన్ని చూడడం.
యాప్ స్టోర్ „ఎల్లప్పుడూ ఆన్“ లేబుల్ కూడా ఆ ఒప్పందాన్ని భర్తీ చేయదు. ఎల్లప్పుడూ ఆన్ మరియు లాక్డౌన్ పరికర సెట్టింగ్లు, తరచుగా పరికర యజమాని వర్తింపజేస్తారు, మరియు మినహాయించిన యాప్లకు వాటి ప్రవర్తనను ప్లాట్ఫారమ్ నిర్వచిస్తుంది. సెట్టింగ్ చదవండి, బ్యాడ్జ్ కాదు.
డిజైన్ సమీక్షకు నాలుగు ప్రశ్నలు
మొదట, ఎవరు సమ్మతించారు: ఏ ప్యాకేజీ, ఏ ప్రొఫైల్, మరియు అది వినియోగదారా లేదా నిర్వహిత-పరికర విధానమా? రెండవది, యాప్ ఏమి కోరింది: ఏ మార్గాలు, ఏ చిరునామా కుటుంబాలు, ఏ యాప్లు చేర్చబడ్డాయి లేదా మినహాయించబడ్డాయి? మూడవది, టన్నెల్ అందుబాటులో లేనప్పుడు ఏమి జరుగుతుంది: సిస్టమ్ నిరోధిస్తుందా లేదా ట్రాఫిక్ అంతర్లీన నెట్వర్క్కు తిరిగి వెళ్తుందా? నాల్గవది, యాప్ పొందే ప్యాకెట్లతో ఏమి చేస్తుంది?
నాల్గవ ప్రశ్న అనుమతి నమూనా సమాధానం చెప్పలేనిది. సమ్మతి మరియు TUN ఇంటర్ఫేస్ యాప్ ట్రాఫిక్ పొందగలదని రుజువు చేస్తాయి, దాన్ని ఎన్క్రిప్ట్ చేస్తుంది, ప్రత్యర్థిని ప్రామాణీకరిస్తుంది లేదా శుభ్రంగా పునరుద్ధరిస్తుందని కాదు. ఇవి అమలు లక్షణాలు, నిజాయితీ సమీక్ష అక్కడే సమయం గడుపుతుంది.
అనవసర రూట్ అభ్యర్థన ఫలితాన్ని కిల్ స్విచ్ అని పిలవడం ద్వారా చెల్లుబాటు కాదు, సమ్మతి సంభాషణ భద్రతా ఆడిట్ కాదు. మూడు అనుమతులను వేరుగా ఉంచండి, ప్రతి వాదన ధృవీకరించదగినదవుతుంది.