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

კოშკის შეცვლა სულაც არ არის მისამართის შეცვლა

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

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

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

ორი დიზაინი: გადაადგილეთ გვირაბი ან თავიდან ააშენეთ

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

MechanismBehaviour after the source changesWhat the user notices
WireGuardEndpoint updated on the next authenticated packetUsually nothing; the tunnel continues
IKEv2 with MOBIKESecurity association moves to the new addressShort pause, no re-authentication
OpenVPN over UDP with floatPeer address may change without a restartMight survive, depending on timing
Client bound to one addressSession dies and is rebuiltA visible reconnect and a new authentication

ზედა სტრიქონი ხსნის ბევრ დამაბნეველ ანგარიშს. WireGuard-ს არ აქვს გატეხვადი სესია: თითოეული პაკეტი ატარებს პარტნიორის ინდექსს და მოწმდება, ამიტომ ახალი მისამართიდან მოსული ვალიდური პაკეტი განსაზღვრებით სწორედ იმ პარტნიორისაა, და ჩაწერილი ბოლო წერტილი მას მიჰყვება. კლიენტი, რომელიც მთელი მგზავრობის განმავლობაში განუწყვეტლივ აჩვენებს „დაკავშირებულს“, სიმართლეს ამბობს.

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

დააკვირდით მოვლენას და არა მოძრაობას

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

adb shell dumpsys connectivity | grep -E 'NetworkAgentInfo|Default network'
adb shell ip -br addr show
adb logcat -b main -s Vpn:* | head -n 40

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

sudo wg show wg0 endpoints
sudo wg show wg0 latest-handshakes

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

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

როდის არის ხელახალი დაკავშირება სწორი ქცევა

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

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

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

ჩაწერეთ დაკვირვებული თანმიმდევრობა

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

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

და მოერიდეთ გამოთქმას „კოშკის შეცვლა“, თუ მოწყობილობის ჟურნალი ამას ნამდვილად არ ადასტურებს. Android-ის კავშირის დოკუმენტაცია აღწერს იმ უკუგამოძახებებს, რომლებიც ხელმისაწვდომობას ნაგულისხმევი ქსელის ცვლილებისგან გამოყოფს, და სწორედ ეს განსხვავება სჭირდება თქვენს ანგარიშს. დანარჩენი ყველაფერი მართვის შესახებ ამბავია.

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