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

ერთი და იმავე ლაბორატორიის აშენების ორი გზა და როდის იმარჯვებს თითოეული

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

AspectNamespace labHost-route lab
IsolationFull stack per roleShares the host stack
CleanupDelete named namespacesManual route and rule removal
RealismStrong for routingNeeded for GUI clients

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

ერთი კონტექსტი თითო როლზე, განზრახ დაკავშირებული

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

ip netns add client
ip netns add gateway
ip link add veth-c type veth peer name veth-g
ip link set veth-c netns client

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

გადაგზავნის როლი ის ადგილია, სადაც ლაბორატორიები საინტერესო ხდება

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

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

ჩაწერეთ საბაზისო ხაზი, შემდეგ გატეხეთ ერთი მარშრუტი

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

ip netns list
ip -n client route get 10.0.0.5
ip -n gateway -s link show veth-g

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

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

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

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

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