მხოლოდ ერთი მართვის კლიენტი: რატომ აგდებს თქვენი მონიტორი გრაფიკულ ინტერფეისს
მართვის სოკეტი იღებს ერთ კავშირს ერთდროულად. მეორე აბონენტი ან ვერ უერთდება, ან ართმევს კონტროლს იმ კომპონენტს, რომელიც ფლობს მოთხოვნებს.
სამაგიდო გრაფიკული ინტერფეისი ფლობს მართვის კავშირს, ამიტომ მონიტორინგის სკრიპტი, რომელიც ცდილობს საკუთარის გახსნას, არაფერს კითხულობს ან, უარესი, ინტერფეისი წყვეტს მოთხოვნებზე პასუხს. ჩვეულებრივი დასკვნაა, რომ დემონი არასტაბილურია. საზოგადოების დემონში შეზღუდვა განზრახ არის: მართვის ინტერფეისი ემსახურება ერთ დაკავშირებულ მართვის კლიენტს ერთდროულად, და ეს რიცხვი არავითარ კავშირში არ არის იმასთან, რამდენი მომხმარებლის გადატანა შეუძლია VPN-ს.
ერთი სოკეტი, ერთი მფლობელი
მართვის არხი იღებს ერთ დაკავშირებულ კლიენტს. როცა მეორე მოდის, სანამ პირველი აქტიურია, ის ელოდება ან უარყოფილია, და არ არსებობს პარალელური აბონენტის რეჟიმი, რომელიც ოპციის მიღმა იმალება. მიმდინარე მფლობელის გათიშვა საშუალებას აძლევს დემონს მიიღოს შემდეგი, და ეს გადაცემაა, არა მეორე არხი.
ეს ყოველ დამატებით ხელსაწყოს კონკურენტად აქცევს. თუ კავშირს ინტერფეისი ფლობს, გამოკითხვის სკრიპტი ან ვერ უერთდება, ან ახერხებს მხოლოდ მას შემდეგ, რაც ინტერფეისი დანებდა, და თანმიმდევრობა მეორდება შემდეგ ხელახალ დაკავშირებაზე. თუ სკრიპტი პირველი უერთდება, ინტერფეისი კარგავს თავის მართვის გზას და მისი მოთხოვნები წყვეტს მუშაობას. არც ერთი ხელსაწყო არ იუწყება კონფლიქტზე, რადგან თითოეული მხოლოდ საკუთარ წარუმატებელ ბრძანებას ხედავს.
| What you need | Mechanism that fits | What it cannot do |
|---|---|---|
| Periodic list of connected clients | Status file written on an interval | Deliver events as they happen |
| Interactive prompts and session control | The single management connection | Serve two controllers at once |
| Multiple consumers of either | One owner process that fans out | Exist without you writing it |
გადაწყვიტეთ, რომელი კომპონენტი ფლობს კონტროლს
აირჩიეთ ერთი მფლობელი ინტერაქტიული არხისთვის და დატოვეთ ის ერთადერთად, რაც უკავშირდება. ინტერფეისი, რომელიც მართავს კავშირს, სკრიპტი, რომელიც პასუხობს ავთენტიფიკაციის მოთხოვნებს, და კონტროლერი, რომელიც ასრულებს სესიებს, ყველა მფლობელად ითვლება, და მხოლოდ ერთს შეუძლია ამ როლის ტარება.
როცა ინტერფეისი ფლობს კავშირს, გამოიყენეთ ის ინტეგრაცია, რომელსაც ის გთავაზობთ, ნაცვლად მასთან ბრძოლისა. მფლობელთან შეჯიბრი სოკეტისთვის წარმოშობს შუალედურ ხარვეზებს, რომლებიც მომხმარებლებს შემთხვევითი ჩანს, და გამმართავი ჩვეულებრივ ხედავს მხოლოდ შეჯიბრის მეორე ნახევარს. ჩაიწერეთ, რომელი პროცესი უკავშირდება პირველი გადატვირთვის შემდეგ, რადგან ეს რიგი ყოველ ჯერზე წყვეტს, ვინ იმარჯვებს. ინტერფეისამდე დაწყებული მონიტორი შეინარჩუნებს არხს, სანამ ინტერფეისი დანებდება.
გამოიყენეთ მდგომარეობის კადრები შემგროვებლებისთვის
მონიტორინგის უმეტეს საჭიროებას სია სჭირდება, არა საუბარი. პერიოდული მდგომარეობის ფაილი პასუხობს ამას მართვის არხის შეხების გარეშე, და აგრძელებს მუშაობას, სანამ ინტერფეისი დაკავშირებული რჩება.
status /run/openvpn/server.status 10
management /run/openvpn/server.sock unix
ინტერვალი სიახლის ბიუჯეტია, ამიტომ დააყენეთ ის იმის მიხედვით, რაც პანელს ნამდვილად სჭირდება, და არა ყველაზე პატარა მნიშვნელობაზე, რომელიც უსაფრთხოდ ჩანს. რამდენიმე წამში დაწერილი კადრი იაფია; სკრიპტი, რომელიც რამდენიმე წამში ხელახლა უკავშირდება მართვის სოკეტს, არ არის იაფი, რადგან ყოველი ხელახალი დაკავშირება მფლობელს ეჯიბრება.
კადრი არ არის ისტორია და არ არის მოვლენათა ნაკადი. კავშირები, რომლებიც ერთი ინტერვალის განმავლობაში მოდიან და მიდიან, არასოდეს ჩანს, ამიტომ აუდიტის მოთხოვნა ვერ დაკმაყოფილდება ფაილის გამოკითხვით, რომელიც თავის თავს გადაწერს. თუ უნდა იცოდეთ, დაუკავშირდა თუ არა მომხმარებელი საერთოდ, კადრი არასწორი იარაღია.
განშტოება დიზაინია, არა რეჟიმი
თუ რამდენიმე მომხმარებელს ნამდვილად სჭირდება მართვის ცოცხალი მონაცემები, დააყენეთ ერთი სანდო კომპონენტი სოკეტის წინ და მისცეთ უფლება გამოაქვეყნოს ბევრად შერჩეული დაკვირვებები დანარჩენებისთვის. ეს კომპონენტი ფლობს ხელახალ დაკავშირებას, ავთენტიფიკაციის მოთხოვნებს და გადაწყვეტილებას იმაზე, რისი გამჟღავნებაა უსაფრთხო.
ააშენეთ ის განზრახ: განსაზღვრეთ, რომელი შეკითხვებია დაშვებული, ჩაწერეთ ვინ იკითხა და თავიდან აიცილეთ განშტოების შრის შემთხვევით დისტანციურ მართვის პანელად გადაქცევა. დემონს არ აქვს მრავალკლიენტიანი რეჟიმი ჩასართავად და არც ერთი კონფიგურაციის ხაზი არ ქმნის მას. მოეპყარით მფლობელს უსაფრთხოების საზღვრის ნაწილად, რადგან ის ფლობს ინტერფეისს, რომელსაც შეუძლია ადამიანების გათიშვა. მისი გადატვირთვა უნდა იყოს რუტინული ოპერაცია დოკუმენტირებული აღდგენის გზით.
მოეპყარით სოკეტს პრივილეგიად, არა მეტრიკად
მართვის ინტერფეისს შეუძლია მომხმარებლების გათიშვა, მდგომარეობის შეცვლა და იმ მოვლენების კითხვა, სადაც ადამიანები სახელდებიან. მისი პაროლი ავთენტიფიცირებს კლიენტს და არ შიფრავს ტრანსპორტს, ამიტომ ქსელის მსმენელი საუბარს ავლენს ყველასთვის, ვისაც შეუძლია მისი დაკვირვება.
უპირატესობა მიანიჭეთ ლოკალურ სოკეტს ან მკაცრად შეზღუდულ მსმენელს და შეამოწმეთ, რომელ პროცესს მიმართავს რეალურად თქვენი შემგროვებელი, რადგან სერვერის პროდუქტები მოაქვთ საკუთარი მართვის API-ები, რომლებიც სხვაგვარად იქცევიან. არასწორ დემონზე მიმართული შემგროვებელი იძლევა თავდაჯერებულ და მცდარ დასკვნებს. დაადასტურეთ გზა და მფლობელი პროცესი, სანამ დაიწყებთ შეკითხვის გამართვას, რომელიც არაფერს აბრუნებს.