Root жок Android VPN: макулдук, маршруттар жана бөгөттөө кимге таандык
Макулдук, TUN интерфейси жана системанын бөгөттөө саясаты — үч башка уруксат. Android VPN колдонмосун карап чыгуудан мурун ар бири кайсы компонентке таандык экенин аныктаңыз.
Root — 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 интерфейси колдонмонун трафик ала аларын далилдейт, аны шифрлей турганын, тарапты аутентификациялай турганын же таза калыбына келерин эмес. Булар — ишке ашыруу касиеттери, жана чынчыл карап чыгуу убактысын ошол жерде өткөрөт.
Ашыкча root өтүнүчү натыйжаны „kill switch“ деп атагандан мыйзамдуу болбойт, ал эми макулдук диалогу коопсуздук аудити эмес. Үч уруксатты өзүнчө кармаңыз, ошондо ар бир билдирүү текшерилүүчү болот.