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

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

გაფრთხილება რიგის შესახებ არ არის

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

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

იპოვეთ ორივე განმარტება რეალურ გაშვებაში

დაიწყეთ იმით, რაც დემონმა რეალურად მიიღო, და არა იმ პროფილით, რომელიც შეასწორეთ. ps -ef და ერთეულის ExecStart აჩვენებენ ბრძანების სტრიქონს, სადაც კონტეინერის შესასვლელი წერტილიდან ან გარსიდან შეიძლება დაემატოს --up; დისტრიბუტივის init ფაილმა შეიძლება იგივე გააკეთოს. systemctl cat openvpn-server@server ავლენს, რასაც თავად სერვისი ამატებს, და კონფიგურაციის კატალოგში რეკურსიული grep პოულობს ფაილის დონის განმარტებებს. დუბლიკატები ჩვეულებრივ სხვადასხვა ფენიდან მოდის, და სწორედ ამიტომ ერთი ფაილის შესწორება არაფერს ცვლის.

სკრიპტის სხვა კატალოგში კოპირება ან მისი გადარქმევა ასევე არ აშორებს მითითებას. პარსერი ითვლის განმარტებებს და არა ფაილებს.

დაე, ერთმა hook-მა დაიმფლოს სამუშაო

გამძლე გამოსავალი არის ერთი გამგზავნი, რომელიც ორივე მოქმედებას გააზრებული რიგით ასრულებს. მოკლე shell სკრიპტი set -eu-ით, რომელიც იძახებს საჭირო ინტეგრაციას და შემდეგ ლოკალურ მოქმედებას და გადასცემს "$@"-ს, რათა არგუმენტების საზღვრები შენარჩუნდეს, ქცევას ერთ შესამოწმებელ ადგილას ინახავს. არგუმენტების გადაცემა მხოლოდ ინახავს მათ; ის არ ამტკიცებს, რომ ორი დამხმარე ერთსა და იმავე ინტერფეისს ელოდება, ამიტომ წაიკითხეთ თითოეულის ხელშეკრულება. გადაწყვიტეთ, რა უნდა გააკეთოს წარუმატებლობამ და საჭიროა თუ არა ნაწილობრივი ცვლილებების უკუქცევა.

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

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

დაადასტურეთ ინტეგრაცია და არა მხოლოდ სიჩუმე

დუბლიკატი გაფრთხილების მოშორება იოლი ნაწილია; ინტეგრაცია მაინც უნდა მუშაობდეს. დაკავშირების შემდეგ შეამოწმეთ გადამწყვეტის მდგომარეობა resolvectl status-ით ან /etc/resolv.conf-ის წაკითხვით, და დაადასტურეთ მარშრუტები ip route-ით. შემდეგ გათიშეთ და ხელახლა დაუკავშირდით, რადგან ნაჩქარევად ჩაკეტილი hook ჩვეულებრივ რაღაცას ტოვებს წინა სეანსიდან. journalctl -u openvpn-server@server -b აჩვენებს, მუშაობდა თუ არა თქვენი გამგზავნი და რა დაბეჭდა.

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

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

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