Systemd თუ NetworkManager: ვინ რთავს VPN-ს ჩატვირთვისას?
სამ მექანიზმს შეუძლია ერთი და იმავე Ubuntu პროფილის აწევა, თითოეულს განსხვავებული ტრიგერით. შეადარეთ ისინი, დატოვეთ ერთი მფლობელი და გააუქმეთ დუბლიკატი.
ორი Ubuntu მანქანა ერთი და იმავე იმიჯიდან, ერთი VPN პროფილი, საპირისპირო შედეგები შესვლისას: ერთზე გვირაბი აწეულია სამუშაო მაგიდის გამოჩენამდე, მეორეზე კი ის არასოდეს ადის. პროფილი აქ ცვლადი არ არის. განსხვავება იმაშია, თუ სამი კომპონენტიდან რომელს მიეცა მისი გაშვების ბრძანება, და ეს სამი ერთ გადამრთველს არ იყოფს.
მათი გვერდიგვერდ შედარება უფრო სწრაფია, ვიდრე გამოცნობა. თითოეული ცნობადი სახით ფუჭდება და სწორედ ეს ხდის შედარებას ღირებულს.
სამი გამშვები სამი განსხვავებული ტრიგერით
შეფუთული openvpn სერვისი უძველესი გზაა. მისი init სკრიპტი ავტოგაშვების სიას კითხულობს ფაილიდან /etc/default/openvpn. თუ ეს სია კომენტარებულია ან ცარიელი დატოვებული, სკრიპტი იმ საქაღალდეში ნაპოვნ ყველა კონფიგურაციას რთავს და არა მხოლოდ იმას, რომელიც თქვენ დაამატეთ. ერთი გვირაბისთვის დამატებულ ფაილს შეუძლია ჩუმად რამდენიმე აამუშაოს.
| Starter | What triggers it | Typical failure |
|---|---|---|
| Init script and templated units | Boot, plus anything in the autostart list | Starts every config, not the one you meant |
| NetworkManager secondary | Activation of the base Wi-Fi or Ethernet profile | Nothing happens until that base link comes up |
| Hand-written unit or wrapper | Whatever its WantedBy and ExecStart say | Runs a different binary or environment than your shell |
მეორე სტრიქონია ის, რომელსაც ხალხი არასწორად აყენებს. NetworkManager ინახავს იმპორტირებულ პროფილს და გაუშვებს მას, მაგრამ მხოლოდ სხვა კავშირის მეორადად, რაც ნიშნავს, რომ ტრიგერი ქსელურ კავშირს ეკუთვნის და არა VPN-ს.
შეადარეთ მოწყობის ღირებულება და მოცვა
init სკრიპტის გზა ერთი სტრიქონი ღირს და მანქანის ყველა კონფიგურაციას ფარავს. ეს როუტერისთვისაა კარგი და არასწორია ლეპტოპისთვის, რომელიც სხვადასხვა ქსელს უერთდება. NetworkManager-ის გზა UUID-ის ძებნა ღირს და გვირაბს ერთ ბაზისურ კავშირზე აბამს. ის სამსახურის SSID-ზე ადის და სასტუმროს ქსელში ქვემოთ რჩება.
ხელით დაწერილი unit ყველაზე ძვირია და ყველაზე მეტ კონტროლს იძლევა, სხვა სერვისებთან მიმართებით რიგის ჩათვლით. მოცვა გადამწყვეტი ფაქტორია. თუ მანქანას ერთი ქსელი და ერთი გვირაბი აქვს, შეფუთული სერვისი პატიოსანი და პროგნოზირებადია. თუ გვირაბი კონკრეტულ Wi-Fi ქსელს უნდა მიჰყვეს, მეორადი სამიდან ერთადერთია, რომელიც ამ პირობას დამატებითი სკრიპტირების გარეშე გამოხატავს.
აირჩიეთ ერთი მფლობელი და მოხსენით დანარჩენები
ორი მფლობელის მიერ გაშვებული პროფილი წარმოქმნის დროს, რომელიც ჩატვირთვებს შორის იცვლება, და ეს უარესია, ვიდრე რომელიმე მექანიზმი ცალკე. აირჩიეთ მფლობელი, შემდეგ გამორთეთ კონკურენტი გზა განზრახ და არა შემთხვევით.
# who is configured to start something?
grep -v '^#' /etc/default/openvpn
systemctl list-units 'openvpn*'
nmcli -g connection.secondaries connection show 'Work Wi-Fi'
# NetworkManager: attach the tunnel to the base link by UUID
TUNNEL=$(nmcli -g UUID connection show 'Corp Tunnel')
nmcli connection modify 'Work Wi-Fi' +connection.secondaries "$TUNNEL"
თუ გასვლაზე შეფუთული გზაა, გააკეთეთ სწორი თანმიმდევრობით: დააყენეთ AUTOSTART მნიშვნელობაზე none, გაუშვით systemctl daemon-reload, რომ გენერირებულმა unit-ებმა ახალი სია აიღონ, შემდეგ გამორთეთ ის შაბლონური ინსტანცია, რომელიც აღარ გინდათ. გადატვირთვის გამოტოვება ძველ unit-ებს აქტიურად ტოვებს და ჩანს, თითქოს ცვლილებას ეფექტი არ ჰქონდა.
ჩამოკიდებული გაჩერება ცალკე პრობლემაა შეზღუდული პასუხით. TimeoutStopSec ზღუდავს, რამდენს ელოდება systemd SIGKILL-ის გაგზავნამდე. drop-in ფაილი სწორი ადგილია ამის დასაყენებლად, რადგან შეფუთული unit-ის რედაქტირება ცვლილებას შემდეგ განახლებაზე კარგავს.
შეამოწმეთ, რა რეალურად გაეშვა
გადატვირთეთ და წაიკითხეთ მტკიცებულებები კონფიგურაციის ფაილის ნდობის ნაცვლად. გვირაბის მფლობელი unit აქტიურ მდგომარეობას და ჩატვირთვას შესაბამის დაწყების დროის ნიშანს აჩვენებს, ხოლო VPN ინტერფეისი თქვენს შესვლამდე იარსებებს.
systemctl is-enabled openvpn-client@office
systemctl status openvpn-client@office --no-pager
nmcli -f GENERAL.STATE,connection.secondaries connection show 'Work Wi-Fi'
ip -brief link show tun0
აქ კიდევ ერთი შემოწმება ჯდება: დარწმუნდით, რომ unit-ის ExecStart მიუთითებს იმ ბინარზე, რომელზეც ფიქრობთ. ლოკალურად აწყობილი კლიენტი ან snap პაკეტი ხშირად მოითხოვს აშკარა გზას ან snap run გარს, რადგან systemd თქვენი ჭურვის ძებნის წესს არ მემკვიდრეობს. command -v openvpn-ის unit ფაილთან შედარება ამას წამებში წყვეტს.
დაწერეთ არჩეული მფლობელი მანქანის ჩანაწერებში, პროფილის სახელის გვერდით. შემდეგი ადამიანი, ვინც დაკარგულ გვირაბს გამართავს, ამ სტრიქონიდან დაიწყებს და არა შედარების გამეორებიდან.