სახლის VPN-ის გამოტოვება systemd ExecCondition-ით
განზრახ გამოტოვება და გატეხილი მოსამზადებელი ბრძანება სხვადასხვა შედეგია. განსაზღვრეთ დამხმარის გასვლის კოდები, შემდეგ შეამოწმეთ ქსელებს შორის გადასვლა.
სახლის ქსელის VPN-ს საქმე არ აქვს, როცა ლეპტოპი უკვე იმ ქსელშია. მაცდური მოკლე გზა არის მოსამზადებელი ბრძანება, რომელიც არანულოვანი კოდით გადის; ეს ერთეულს ამარცხებს და ყველა პანელს გატეხილად აჩენს. systemd-ს აქვს დირექტივა ზუსტად ასეთი გადაწყვეტილებისთვის და ის განზრახ გამოტოვებას რეალური ხარვეზისგან გამოყოფს. სწორად გაკეთება ძირითადად იმის ჩაწერას ნიშნავს, რას ნიშნავს თითოეული გასვლის კოდი.
რატომ არის წარუმატებელი წინაპირობა არასწორი ფორმა
ExecStartPre არანულოვან გასვლას გაშვების ხარვეზად მიიჩნევს, რაც სწორია სერვისის მოსამზადებელი ბრძანებისთვის. მისი პირობად გამოყენება პოლიტიკურ გადაწყვეტილებას გატეხილი დამოკიდებულებისგან განურჩეველს ხდის. ExecCondition არსებობს იმისთვის, რომ ერთეულმა შეძლოს გაშვებაზე უარის თქმა წარუმატებლად მონიშვნის გარეშე.
ეს განსხვავება მნიშვნელოვანია ღამის სამ საათზე, როცა არავის სურს ისეთი წითელი ერთეულის გარჩევა, რომელიც დიზაინის მიხედვით იქცეოდა. წარუმატებელი ერთეული ასევე მალავს რეალურ ხარვეზებს განზრახ ხარვეზებს შორის.
ჯერ დაწერეთ გასვლის კოდების კონტრაქტი
დაწერეთ კონტრაქტი სკრიპტამდე. ნულოვანი გასვლა ნიშნავს გაგრძელებას, ერთიანი გასვლა — დარჩენილი გაშვების ბრძანებების გამოტოვებას, ხოლო 255 გასვლა — რომ თავად პირობამ ვერ იმუშავა. ორსა და 254-ს შორის კოდები ჩვეულებრივ ასევე გამოტოვებას ნიშნავს, რაც ადვილად დასავიწყებელია, როცა დამხმარი შემთხვევით შეცდომის კოდს აბრუნებს. ქვემოთ მოცემული drop-in დამხმარს ერთეულის ნამდვილ სახელს უკავშირებს.
[Service]
ExecCondition=/usr/local/libexec/should-start-home-vpnსანამ ნაგულისხმევ სემანტიკას ჩათვლით, შეამოწმეთ ეფექტური ერთეული მემკვიდრეობით მიღებული SuccessExitStatus ან stop-post პარამეტრებისთვის. შემდეგ განზრახ გამოსცადეთ სამი შედეგიდან თითოეული.
ქსელის მინიშნება მდებარეობის მტკიცებულება არ არის
მისაწვდომი როუტერის მისამართი ან ცნობილი MAC შეიძლება სწორ ქსელზე მიუთითებდეს და არც ერთი მათგანი ამას არ ამტკიცებს. სხვა ქსელს შეუძლია იმავე მისამართის ხელახლა გამოყენება, ARP მონაცემები შეიძლება მოძველებული იყოს და იდენტიფიკატორების გაყალბება შეიძლება. გამოკვლევას მიუდექით როგორც პოლიტიკასთან შესაბამის ოპტიმიზაციას, და არა როგორც ავთენტიფიკაციის შედეგს.
წინასწარ გადაწყვიტეთ, რას ნიშნავს გაურკვევლობა. VPN-ის ჩართვა გაურკვევლობისას უსაფრთხოა კლიენტისთვის, რომელიც უბრალოდ ვერ დაუკავშირდებოდა; მისი გამოტოვება გაურკვევლობისას უსაფრთხო არ არის. გახადეთ გამოკვლევა შეზღუდული და წაიკითხეთ აქტიური ინტერფეისი, ნაცვლად იმისა, რომ სიაში პირველი ჩათვალოთ. ჩამოკიდებული გამოკვლევა უარესია, ვიდრე „არა“ პასუხის გამცემი, რადგან ერთეული მას ელოდება.
ჩაწერეთ ეს ვარაუდები ერთეულის ფაილის გვერდით, რათა შემდეგმა ადამიანმა იცოდეს, რისი სჯერა დამხმარს. კომენტარი სკრიპტის თავში მათი შენახვის ყველაზე იაფი ადგილია.
მართეთ ქსელებს შორის გადასვლა
პირობა სრულდება სერვისის გაშვებისას და შემდეგ აღარ გადაფასდება. გამოტოვებული ერთეული გამოტოვებული რჩება მას შემდეგაც, რაც ლეპტოპი კაფეში გადადის, ხოლო მოქმედი გვირაბი აწეული რჩება მას შემდეგაც, რაც ლეპტოპი სახლში ბრუნდება. დააკავშირეთ ქსელის ცვლილების სასიცოცხლო ციკლი გაშვებისა და შეჩერების გადაწყვეტილებასთან ცალკე მექანიზმით.
systemctl cat home-vpn.serviceგამოსცადეთ ოთხი შემთხვევა: გაშვება სახლში, გაშვება სახლის გარეთ, გამოკვლევა, რომელიც ვერ იმუშავებს, და გადასვლა ქსელებს შორის, სანამ ერთეული აქტიურია. ჟურნალში თვალსაჩინოდ შეინახეთ გამოტოვების მიზეზი, რათა განზრახ გადაწყვეტილება არასდროს გამოიყურებოდეს ავთენტიფიკაციის ხარვეზად. სერვისის ცნობარი აღწერს გასვლის სემანტიკას და მინიმალურ ვერსიას.