ორი ადამიანი ერთსა და იმავე კითხვას სვამს და ერთმანეთთან შეუთავსებელ პასუხებს იღებს, რადგან სხვადასხვა ადგილას დგანან. ერთს გახსნილი აქვს სისტემის 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-ის შეცვლა საერთოდ არ არის მხარდაჭერილი გზა, და იქ პატიოსანი პასუხია, რომ პარამეტრი იმ პროდუქტს ეკუთვნის.

დაკავშირებული სტატიები