Android-ում հավելվածային VPN. հավելվածը բացառելը դրա արգելափակումը չէ
Էկրանին երևացող հավելվածային ցանկը պատկանում է մեկ թունելի տիրոջ, և հավելվածը բացառելը շրջանցում է այդ թունելը, ոչ թե հանում ցանցից։ Սկսեք այնտեղից։
Երկու մարդ նույն հարցն են տալիս և ստանում անհամատեղելի պատասխաններ, որովհետև կանգնած են տարբեր տեղերում։ Մեկի մոտ բաց է համակարգի VPN կարգավորումների էկրանը, և նա խմբագրում է հավելվածների ցանկ։ Մյուսը խմբագրիչում գրում է VpnService.Builder.addDisallowedApplication()։ Երկուսն էլ դա անվանում են հավելվածային VPN զտիչ։ Նրանցից միայն մեկն է տիրապետում իր նկարագրած կառավարմանը, և ոչ մեկը ոչինչ չի արգելափակում։
Սկսեք այն էկրանից, որը տեսնում է օգտատերը
Բացեք Կարգավորումները, գտեք VPN կետը և նայեք այն միացմանը, որն իրոք ակտիվ է։ Եթե հաճախորդն առաջարկում է հավելվածային ցանկ, այդ ցանկը պատկանում է հաճախորդի սեփական թունելին։ Հարթակը չի հրապարակում ընդհանուր API, որով անկապ հավելվածը կարող է կարդալ կամ փոփոխել մեկ այլ VPN-ի հավելվածների ընտրությունը, ուստի երկրորդ հավելվածը չի կարող շտկել այդ ցանկը օգտատերի փոխարեն։
Սա ուղեցույցի առաջին պատառաքաղն է։ Եթե տեղադրված VPN-ը նման կարգավորում չունի, կոդով շրջանցելու բան չկա. հատկությունը բացակայում է այն ապրանքից, որին պատկանում է թունելը։ Եթե ունի, ճիշտ ուղղումը հենց այդ էկրանում է, և անում է նա, ով կարող է բացել այն։
Հետևեք փաթեթին դեպի թունել
Երբ ձեր սեփական հավելվածը թունել է կառուցում, այն ստեղծում է TUN ինտերֆեյս և հայտարարում, թե որ հավելվածների երթևեկությունն է մտնում դրա մեջ։ Անդամակցության կանչերը կատարվում են ինտերֆեյսի հաստատումից առաջ, և դրանից հետո կանոնների հավաքածուն ֆիքսված է այդ սեսիայի համար։
val builder = VpnService.Builder()
builder.addAddress("10.8.0.2", 32)
builder.addRoute("0.0.0.0", 0)
builder.addDisallowedApplication("com.example.bypass")
val tun = builder.establish() // membership decided hereԱյդ կանչերը վերաբերում են միայն այն թունելին, որը ձեր հավելվածը հենց նոր ստեղծեց, և ուրիշ ոչնչի։ Դրանք սարքի ամբողջության քաղաքականություն չեն, չեն պահպանվում այլ հաճախորդների համար և չեն կարող ներթափանցել ուրիշի VPN։ Երբ կառուցողի կանչը բացառություն է նետում, քանի որ փաթեթը հնարավոր չէ լուծել, ինտերֆեյսը երբեք չի հաստատվում, ինչը մաքուր ձախողում է, ոչ լուռ։
Ինչու բացառումը նմանվեց արգելափակման
Բացառված հավելվածը շրջանցում է ձեր թունելը և գնում հիմքում ընկած ցանց։ Դա դրա արգելափակման հակառակն է. երթևեկությունը դեռ լքում է սարքը, պարզապես ձեր կառավարած ինտերֆեյսից դուրս։ Հրդեհային պատի ոճի հավելվածը անում է հակառակը։ Այն ընդունում է հավելվածի երթևեկությունը իր թունելի մեջ և հետո դեն է նետում փաթեթները կամ հրաժարվում է դրանք փոխանցել, ուստի ինտերֆեյսը նույնն է, իսկ քաղաքականության ուղղությունը՝ շրջված։
Այդ շրջադարձի հետևում եղած աշխատանքը կարգավորման դրոշակ չէ։ Դուք կարդում եք IP փաթեթները թունելի նկարագրիչից, որոշում հոսքով և հետո դրանք փոխանցում պաշտպանված սոքեթով կամ դեն նետում։ Այն ամենը, ինչ չեք մշակում, պարզապես կանգ է առնում, և դրա համար կիսատ թունելը նմանվում է կոտրված ցանցի, ոչ աշխատող զտիչի։ Եթե ձեր նպատակը արգելափակումն է, նախատեսեք փաթեթների մշակում, առաջին պլանի ծառայություն և գրավոր քաղաքականություն այն երթևեկության համար, որը չեք կարող դասակարգել։
Ինչ է կոտրվում, երբ ինքներդ եք կառուցում
Android-ը սովորաբար թույլ է տալիս միաժամանակ միայն մեկ ակտիվ VPN, ուստի ձեր զտիչ թունելը և գաղտնիության թունելը մրցում են նույն տեղի համար, եթե ապրանքները չեն աջակցում շղթայավորում։ Մշտապես միացված VPN-ը միացումների արգելափակմամբ փոխում է ձախողման եղանակը մի կերպ, որը կարևոր է այստեղ. երթևեկությունը, որը չի կարող մտնել թունել, դեն է նետվում ուղիղ ուղարկելու փոխարեն, ինչը ցանկանում է արտահոսքի կանխարգելման նախագիծը և ինչը վրիպազերծման սեսիան հազվադեպ է սպասում։
Փաթեթների տեսանելիությունը երկրորդ թակարդն է։ Հավելվածի փաթեթի անվան լուծումը կարող է ձախողվել NameNotFoundException-ով, և Android-ի նոր տարբերակներում ձեր տեսնելիք փաթեթների հավաքածուն կախված է ձեր հայտարարած հարցումներից։ Մշակեք բացառությունը՝ փոխարենը ենթադրելու, որ ամեն անվանում լուծվում է, և վերընթերցեք ցանկը, երբ հավելվածներ են տեղադրվում կամ հեռացվում, փոխարենը հավերժ պահելու այն քեշում։
Կառավարվող սարքերը ավելացնում են երրորդ տիրոջ։ Ձեռնարկության շարժունակության քաղաքականությունը կարող է սահմանել հավելվածային VPN կամ մշտապես միացված պրոֆիլ, և սովորական հավելվածը չի կարող այն վերացնել։ Ստուգեք, արդյոք սարքը կառավարվում է, նախքան ձեր սեփական կոդը վրիպազերծելը, որովհետև այդ դեպքում այն ցանկը, որը փորձում եք փոխել, գուցե անհնար լինի խմբագրել հեռախոսը ձեռքին պահող ոչ ոքի համար։
Փորձարկեք ձեր կառավարած հավելվածով
Մի փորձարկեք այն հավելվածով, որը փորձում եք զտել։ Օգտագործեք երկրորդ հավելված, որի ցանցային վարքը կարող եք դիտել, և ստուգեք՝ արդյոք դրա երթևեկությունը դուրս է գալիս ձեր թունելով, մինչդեռ թիրախինը՝ ոչ։ Եթե երկուսն էլ ներսում են մնում, քաղաքականությունը աշխատում է և թիրախը բացառված է. եթե ոչ մեկը դուրս չի գալիս, թունելն ինքն է սխալ, և հավելվածների ցանկը խնդիրը չէ։
Ապա որոշեք, թե երեքից որն եք իրականում կառուցում։ Հավելվածային թունելը կառուցողի API-ն է, ցանկը՝ ձեր պրոֆիլի մասը։ Սարքի հրդեհային պատը փաթեթների մշակումն է գումարած կյանքի ցիկլ, որը կարող եք պաշտպանել։ Ուրիշի VPN-ը փոխելը բոլորովին աջակցվող ուղի չէ, և այնտեղ ազնիվ պատասխանն այն է, որ կարգավորումը պատկանում է այդ ապրանքին։