დაამატეთ პოლიტიკის წესი ip rule-ით და ის მუშაობს მანამ, სანამ კავშირი გაქრება; იმ მომენტში ის უბრალოდ აღარ არსებობს. არაფერი ჩავარდნილა ხმამაღლა: ბირთვის მდგომარეობა შეიცვალა და არცერთ კონფიგურაციის მფლობელს არ იცოდა, რომ წესი უნდა არსებობდეს. ეს არის მთელი განსხვავება გადარჩენილ და არაგადარჩენილ წესს შორის. systemd-networkd-ის მქონე ჰოსტზე გადაწყვეტა არის წესისთვის მფლობელის მიცემა და არა ბრძანების ხელახლა გაშვება ყოველი გადაბმის შემდეგ.

წესი არსებობს მხოლოდ მაშინ, როცა ვინმე მას ფლობს

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

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

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

წაიკითხეთ ვერსია, სანამ პარამეტრს დაეყრდნობით

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

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

systemctl --version | head -1
networkctl --version | head -1
grep -R "ManageForeign" /etc/systemd/ /usr/lib/systemd/ 2>/dev/null

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

გამოაცხადეთ წესი და ცხრილი, რომელზეც ის მიუთითებს

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

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

[RoutingPolicyRule]
Family=ipv4
IPProtocol=tcp
SourcePort=443
Table=100
Priority=1000

[Route]
Destination=10.80.0.0/24
Gateway=10.80.0.1
Table=100

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

აირჩიეთ ერთი მფლობელი ინტერფეისისთვის

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

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

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

ივარჯიშეთ სასიცოცხლო ციკლის მოვლენებზე

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

sudo networkctl reload
ip rule show
ip route show table 100
sudo systemctl restart systemd-networkd

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

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