„VPN ჩართულია?“ სინამდვილეში სამი კითხვაა ერთ წინადადებაში. რომელი მათგანი სჭირდება თქვენს კოდს, ეს პირველი გადაწყვეტილებაა, და სწორედ მას გამოტოვებს იმპლემენტაციების უმეტესობა. არის თუ არა გვირაბი ამ მოწყობილობაზე, გადის თუ არა ტრაფიკი ამ დანიშნულებისკენ მის გავლით, თუ შორეული მხარე პასუხობს იმ იდენტობით, რომელსაც ელით. აირჩიეთ თვისება, შემდეგ აირჩიეთ სიგნალი, რომელიც ზომავს მას, და ბოლოს ჩაწერეთ ჟურნალში, რომელი გაზომეთ სინამდვილეში.

სამი თვისება, სამი სიგნალი

თითო ხაზში შეკუმშული, სამ კითხვას სამი განსხვავებული პასუხი აქვს. ქვემოთ მოცემული ცხრილი თავად გადაწყვეტილებაა, და არა მისი შეჯამება.

PropertySignal that answers itWhat it still leaves open
ExistenceThe platform's own connection state: RAS on Windows, NetworkManager on D-Bus on Linux, scutil on macOSTunnels of a type the platform does not manage, which includes most third-party clients
PathA route lookup for the one destination, or a scoped proxy or interface key that names the tunnelWhether the far end is the peer you trust
IdentityAn authenticated response from the far end, or a source-address policy applied on the serverWhich local interface carried the packets

წაიკითხეთ ბოლო სტრიქონი ნელა. პასუხისმგებელი კერძო ჰოსტი ამტკიცებს, რომ რაღაცამ უპასუხა, და არა ის, რომ პასუხი გვირაბით მოვიდა, და არაფერს ამბობს იმაზე, თუ ვინ არის მეორე მხარეს. თუ საჭირო თვისება გზაა, გაზომეთ გზა.

არსებობა: პლატფორმის საკუთარი მდგომარეობა

Windows პასუხობს ამას მშობლიური პროფილებისთვის Remote Access Service API-ის მეშვეობით. RasEnumConnections ჩამოთვლის, რა არის დაკავშირებული, RasGetConnectStatus აცნობებს ერთი ჩანაწერის მდგომარეობას, ხოლო RasGetLinkStatistics ამატებს სიჩქარეს, ბაიტების მთვლელებს და კავშირის ასაკს. შეზღუდვები სწორედ არსია: OpenVPN, WireGuard და მწარმოებლების კლიენტები არასოდეს არეგისტრირებენ RAS კავშირს, ამიტომ ამ ტიპის ჯანსაღი გვირაბი ცარიელ სიას აჩვენებს და გულუბრყვილო კოდი მას გამორთულად აცნობს.

Linux-ის სამუშაო მაგიდები იმავე თვისებას ამჟღავნებენ D-Bus-ზე NetworkManager-ის მეშვეობით, სადაც VPN კავშირის ობიექტზე PropertiesChanged შემოწმებას მოვლენად აქცევს და State თვისება აცნობებს, როდის აღწევს რგოლი დაკავშირებულ მდგომარეობას. გარსიდან nmcli connection show --active კითხულობს იმავე ინფორმაციას, და ეს არის ის, რაც გნებავთ გამართვის დროს. macOS ინახავს ამ სიას System Configuration ჩარჩოში, და scutil მისი ბრძანების ხაზის ხედია. სამივე აღწერს პლატფორმის მიერ მართულ კავშირს, და სამივე დუმს იმ გვირაბზე, რომელსაც ის არ მართავს.

გზა: სად მიდის სინამდვილეში პაკეტი

სახელების შედარება ის მოკლე გზაა, რომელსაც ყველა პირველად მიმართავს: ჩამოთვალეთ ინტერფეისები, შეამოწმეთ სტრიქონი tun, tap, ppp ან ipsec-ის წინააღმდეგ და დამთხვევა ჩათვალეთ მტკიცებულებად. ეს ევრისტიკაა, და ინტერფეისების ნაკრები შეიძლება ერთნაირად გამოიყურებოდეს, მიუხედავად იმისა, გადის თუ არა რამე მასში. ძველი iOS-ის ვერსიები ასე პასუხობდნენ, ხოლო უფრო ახლებმა შეწყვიტეს, რადგან ხილული ინტერფეისები აღარ არჩევდნენ ორ მდგომარეობას.

რაც იქ შეცვალა, ეს სისტემის პროქსის ლექსიკონია. სანამ VPN დაკავშირებულია, პროქსის პარამეტრების გამოძახება აბრუნებს გვირაბთან დაკავშირებულ ინტერფეისებზე შეზღუდულ გასაღებებს, ხოლო როცა არაფერია დაკავშირებული, ლექსიკონი ცარიელი ბრუნდება. ეს უფრო სუსტი განაცხადია, ვიდრე ჟღერს, რადგან აფიქსირებს სისტემის რწმენას გვირაბის არსებობის შესახებ და არა იმას, რომელი დანიშნულება იყენებს მას.

Android-ს ამ ხაფანგის საკუთარი ვერსია აქვს: vpn.connectivity გადაცემა ზოგიერთ აწყობაში აღწევს მანიფესტში გამოცხადებულ მიმღებებამდე, ხოლო სხვებში — გაშვების დროს რეგისტრირებულ მიმღებებამდე. მოეპყარით მას როგორც საუკეთესო მცდელობას და მის უკან პირდაპირი ზონდი შეინახეთ.

როცა დანიშნულებაა მთავარი, ჰკითხეთ მარშრუტიზაციის ცხრილს ადაპტერების სიის ნაცვლად. ნაგულისხმევი კარიბჭის ევრისტიკები ტყდება მრავალქსელურ მანქანებზე და იმ გვირაბებზე, რომლებიც საკუთარ კარიბჭეს აყენებენ.

იდენტობა: შეამოწმეთ შორეული მხარე

ციკლი, რომელიც ყოველ რამდენიმე წამში ICMP ექოს აგზავნის შორეულ მხარეს, ამ ტიპის ყველაზე იაფი შემოწმებაა და სასარგებლო მიმართულებით მარცხდება. მიმართეთ ის მისამართზე, რომელიც მხოლოდ კერძო ქსელის შიგნით არსებობს, რადგან საჯარო მისამართი პასუხობს ნებისმიერი მუშა აღმავალი არხით და არაფერს ამტკიცებს. სადაც ICMP იფილტრება, სერვისის პორტზე მოკლე TCP კავშირი იგივე საქმეს ასრულებს.

სერვერის მხარის შემოწმებას ზუსტად ერთი სიგნალი აქვს: კავშირის წყაროს მისამართი. დიაპაზონების ინვენტარის შენახვა მოვლის სამუშაოა და მას არ შეუძლია გვირაბის გამოყოფა ნებისმიერი სხვა ქსელისგან, რომელიც შემთხვევით იმავე ბლოკს იყენებს.

უხეში პოლიტიკა ამას გაუძლებს. იდენტობა ვერ გაუძლებს, ამიტომ დაამოწმეთ კლიენტი იმის ნაცვლად, რომ ენდოთ, საიდან თითქოს მოდის მისი პაკეტები.

ჩაწერეთ კატეგორია და არა განაჩენი

შეინახეთ მარცხის კატეგორიები ცალ-ცალკე ჟურნალში: საერთოდ არ არის ინტერფეისი, ინტერფეისი არის, მაგრამ დანიშნულება მიუწვდომელია, დანიშნულება მიწვდომადია, მაგრამ ავთენტიფიკაცია უარყოფილია. ეს სამი განსხვავებული მფლობელია და თითოეული სხვა გამოძიებას ხსნის.

მათი ერთ „VPN გამორთულია“-ში გაერთიანება ანგარიშს უგზავნის გუნდს, რომელსაც მისი გასწორება არ შეუძლია. კატეგორია სასარგებლო გამოსავალია; განაჩენი არის ის, რაც მას არასწორად აქცევს.

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