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

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

ორი რესურსი და გადატვირთვა, რომელსაც ისინი ეკუთვნიან

OpenVPN საკუთარ გადატვირთვას აცხადებს ორ ჩვეულებრივ სიტუაციაში. გამოკვეთილი SIGUSR1 ამას აკეთებს, და მკვდარი პარტნიორით გამოწვეული ping-restart იგივეს აკეთებს. ორივე პროცესს ცოცხლად ტოვებს და კავშირის დაყენებას ხელახლა უშვებს, და სწორედ იქ იმსახურებს პარამეტრები თავიანთ ადგილს.

EventTUN/TAP deviceKey and auth filesAddresses and routesup/down hooks
Soft reset, from SIGUSR1 or from a ping-restart the daemon sends itselfsurvives only with persist-tunsurvive only with persist-keysurvive with the device, otherwise rebuiltrun again only when restart hooks are enabled
Configuration reload, SIGHUPrecreatedre-read from diskrebuilt once the device returnsrun again
Service stoplostre-read at the next startremovedrun at the next start

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

რატომ არსებობენ ეს პარამეტრები საერთოდ

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

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

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

წაიკითხეთ პირველი შეცდომა და არა ბოლო

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

კაუჭებს თავისი გადამრთველი აქვთ. OpenVPN-ის სახელმძღვანელო persist პარამეტრებს აკავშირებს up-restart-ს, რომელიც წყვეტს, გაუშვას თუ არა up და down სკრიპტები ხელახლა გადატვირთვის შემდეგ. ამიტომ ზემოთ დარჩენილი ინტერფეისი არაფერს გეუბნებათ იმაზე, განახლდა თუ არა თქვენი resolver-ის ინტეგრაცია.

# which restart path just happened?
journalctl -u openvpn-client@office --since '10 min ago' | grep -E 'SIGUSR1|ping-restart|Restart pause|NOTE:'

# did the interface survive, and do its routes still exist?
ip -brief link show tun0
ip route show dev tun0

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

შენარჩუნებული ინტერფეისი kill switch არ არის

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

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

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

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