გამორიცხული აპი კვლავ ონლაინ არის? აპისა და მარშრუტის წესები განსხვავდება
Android აპის VPN-იდან გამორიცხვა მას არ ბლოკავს. ნებართვის სიები, UID წესები და გაგზავნილი მარშრუტები გზის სხვადასხვა ნაწილს განსაზღვრავენ.
პაკეტის გამორიცხვა მარშრუტიზაციის მითითებაა და არა ბლოკირება, ამიტომ VPN-ის დაკავშირების შემდეგ ჩატვირთული გვერდები მოსალოდნელია და არა ხარვეზის მტკიცებულება. გამორიცხვა აპს გვირაბიდან ხსნის ბლოკირების ნაცვლად და მის ტრაფიკს ჩვეულებრივი ქსელი ატარებს. აქ ორი ცალკე პოლიტიკა ხვდება: ერთი პროცესებს ირჩევს, მეორე დანიშნულებებს. ამ თანმიმდევრობით კითხვა ხსნის, რატომ არ არის დაკავშირებული ხატულა და მომუშავე აპი წინააღმდეგობა.
რატომ ტოვებს გამორიცხვა ქსელს ღიად
VpnService.Builder იღებს ან ნებართვის სიას, ან აკრძალვის სიას, არასდროს ორივეს. მხოლოდ ნებართვის სიაში მყოფი პაკეტები გადის გვირაბში. აკრძალვის სია ამას აბრუნებს: ყველა პაკეტი, გარდა ჩამოთვლილებისა, გვირაბს იყენებს, ხოლო ჩამოთვლილები ფიზიკურ გზას ინარჩუნებენ. ნებართვის სიაში არმყოფი პაკეტიც გვირაბის გარეთაა, ამიტომ ამ რეჟიმში გამორიცხვა ჩვეულებრივი მდგომარეობაა უმეტესი აპისთვის.
ეს ლოკალურ აკრძალვის ჩანაწერს მარშრუტიზაციის გადაწყვეტილებად აქცევს და არა firewall-ის წესად. თუ მოთხოვნა აპის ჰოსტამდე მიღწევის შეჩერებაა, გვირაბმა უნდა დაფაროს ის და სერვერმა ან ლოკალურმა პოლიტიკამ ტრაფიკი უნდა უარყოს. აპის გვირაბიდან ამოღება მხოლოდ იმას ცვლის, რომელი ინტერფეისი ატარებს მის პაკეტებს.
Play Store-ის შემთხვევა ჩვეულებრივი განზრახ მაგალითია. მაღაზიის პაკეტის გამორიცხვა ჩამოტვირთვებს საშუალებას აძლევს გამოიყენონ ქვედა კავშირი, როცა VPN-ის გასასვლელი ხელს უშლის გადაცემებს, და აჩვენებს, რომ გამორიცხვა ნიშნავს გვერდის ავლას და არა ბლოკირებას.
ერთი პროფილი, ერთი სია
მშენებელი გამონაკლისს აგდებს, თუ ორივე გამოძახება გამოიყენება, ამიტომ თქვენს წინაშე მყოფი პროფილი ან ნებართვის, ან აკრძალვის სიაა. ეს ერთი ფაქტი განსაზღვრავს, როგორ წავიკითხოთ ყოველი შემდგომი დაკვირვება. შეამოწმეთ კოდი ან მართული კონფიგურაცია მარშრუტიზაციის ცხრილამდე, რადგან სია წყვეტს, რას ნიშნავს გამოსავლის დარჩენილი ნაწილი. ჰიბრიდული პროფილი არ არის მდგომარეობა, რომელსაც შეგიძლიათ უყუროთ.
განსხვავება ასევე წინასწარმეტყველებს, რას იზამს ახლად დაყენებული აპი. ნებართვის სიაში ის გარეთ რჩება, სანამ ვინმე დაამატებს, ხოლო აკრძალვის სიაში ნაგულისხმევად უერთდება გვირაბს.
მართული კონფიგურაციები იმავე არჩევანს სხვა გასაღების სახელებით აჩვენებენ და ზოგიერთი კონსოლი მას აპის მიხედვით VPN რეჟიმს უწოდებს და არა სიას. ქცევა მაინც ამ ორ გამოძახებამდე დაიყვანება, ამიტომ თვალი ადევნეთ პარამეტრს უკან, პაკეტების სიამდე, ნაცვლად იარლიყის ნდობისა. თუ იარლიყი და სია ერთმანეთს არ ემთხვევა, სია იმარჯვებს.
მიჰყევით UID წესს გვირაბის ცხრილამდე
Android ყოველ აპს საკუთარ Linux მომხმარებლის ID-ს აძლევს, ხოლო VPN სერვისი აყენებს პოლიტიკის წესებს, რომლებიც UID დიაპაზონებს ემთხვევა. შესაბამისი ტრაფიკი იგზავნება მარშრუტიზაციის ცხრილში, რომლის ნაგულისხმევი მარშრუტი tun მოწყობილობაზე მიუთითებს. ცხრილის ნომერი თითოეული VPN ინსტანსისთვის გამოიყოფა, ამიტომ ის იცვლება ხელახალი დაკავშირების ან მეორე VPN პროფილის შექმნის შემდეგ.
წესების გამოსავალი რუკაა. ყოველი სტრიქონი ასახელებს საძიებო ცხრილს და ეს ცხრილი ინახავს ნაგულისხმევ მარშრუტს, რომელიც წყვეტს, შედიან თუ არა შესაბამისი პაკეტები გვირაბში.
adb shell ip rule show
adb shell ip route show table all
adb shell cmd package list packages -U | grep <package>
ჯერ გაუშვით მესამე ბრძანება UID-ის მისაღებად, შემდეგ იპოვეთ წესი, რომლის დიაპაზონიც მას შეიცავს. ეს წესი ცხრილის ნომერზე მიუთითებს და ip route show table <n> ამ ნომრით ჩანს, არსებობს თუ არა ნაგულისხმევი მარშრუტი tun მოწყობილობის გავლით. თუ ცხრილს ნაგულისხმევი არ აქვს, აპი არჩეულია, მაგრამ გზა არ აქვს, რაც სხვა ხარვეზია.
ამ ბრძანებებს სჭირდება გამართული build ან მოწყობილობა, სადაც adb shell შეძლებს ქსელის მდგომარეობის წაკითხვას. საწარმოო ტელეფონზე პაკეტების მენეჯერი კვლავ პასუხობს, მაგრამ მარშრუტიზაციის შემოწმება შეიძლება უარყოფილ იქნას, ამიტომ ჩაწერეთ რაც შეგიძლიათ და დანარჩენი დაუდასტურებლად მიიჩნიეთ.
მარშრუტი პრეფიქსს ითხოვს და არა აპს
Builder.addRoute გვირაბისთვის დანიშნულების პრეფიქსებს ითხოვს. პროფილი, რომელიც მხოლოდ 10.0.0.0/8 ამატებს, ამ პრეფიქსს გვირაბით აგზავნის და ყველა სხვა დანიშნულებას ფიზიკურ გზაზე ტოვებს. ეს ჩვეულებრივი გაყოფილი გვირაბიზაციაა და დამოუკიდებელია იმისგან, თუ რომელი აპები აირჩიეს წესებმა.
სერვერის მიერ გაგზავნილი კონფიგურაცია იმავე მოდელს ირეკლავს. ცალკეული მარშრუტის გაგზავნები პრეფიქსებს ამატებს, ხოლო redirect-gateway დირექტივა ანაცვლებს ნაგულისხმევ მარშრუტს და იჭერს ყველაფერს იმ აპებისთვის, რომლებსაც გვირაბი ფარავს. ამ დირექტივის მოცილებამ შეიძლება სამუშაო გვირაბი ერთ ქვექსელამდე შეამციროს მოწყობილობაზე ყოველგვარი ცვლილების გარეშე.
არაჩვეულებრივი gateway-ით ან მეტრული კვალიფიკატორით გაგზავნილი მარშრუტიც შეიძლება არ დაყენდეს. უპირატესობა მიანიჭეთ პრეფიქსის უბრალო ფორმას და გადაგზავნა და NAT სერვერს დაუტოვეთ.
წაიკითხეთ გადაკვეთა, სანამ პარამეტრს შეცვლით
გვირაბი ატარებს დაფარული პროცესების და მოთხოვნილი დანიშნულებების გადაკვეთას. დაფარული აპი, რომელიც გამოქვეყნებული პრეფიქსების გარეთ მისამართს ითხოვს, ფიზიკური ქსელით გადის. აკრძალული პაკეტი გარეთ რჩება მაშინაც, როცა ამ პრეფიქსების შიგნით მისამართს ითხოვს. არც ერთი შემთხვევა ხარვეზი არ არის; ორივე ორი პოლიტიკაა, რომლებიც თავიანთ საქმეს აკეთებენ.
აპის მიხედვით VPN-მა შეიძლება დაკავშირებული აპი კავშირის გარეშე დატოვოს. როცა on-demand გამორთულია და გვირაბი ქვევითაა, აპი აპის მიხედვით VPN-ზე დარჩენილია მიბმული და სარეზერვო გზა არ აქვს, რაც გატეხილ აპს ჰგავს და არა პოლიტიკის მდგომარეობას. on-demand-ის ჩართვა ან კავშირის მართვის გზით მოცილება ამას ცვლის.
| Layer | What it selects | Where to look | Typical mismatch |
|---|---|---|---|
| Package list | Processes | Builder calls or managed configuration | App excluded but expected to be blocked |
| UID policy rule | Which table a UID uses | ip rule show | Tunnel icon on, app still on Wi-Fi |
| Routing table | Destinations for matched traffic | ip route show table <n> | Covered app reaches only one subnet |
| Server push | Prefixes offered to the client | Server route configuration | Tunnel shrinks after a server edit |
დიაგნოსტიკა ერთი ღერძით ერთდროულად. ჯერ დაადასტურეთ ნებართვა ან აკრძალვა, მეორე რიგში წაიკითხეთ დაყენებული UID წესები და ცხრილები, და ბოლოს გამოსცადეთ მეორე აპი იმავე დანიშნულებაზე. მეორე აპი ერთ მოთხოვნაში ჰყოფს პროცესის არჩევანს დანიშნულების არჩევანისგან.
ჩაწერეთ შედეგი როგორც აპი, დანიშნულება და ცხრილის ნომერი. სწორედ ეს სამეული უნდა შეინარჩუნოს შემდეგმა ცვლილებამ.