WireGuard აგზავნის მონაცემებს, მაგრამ პასუხს არ იღებს: რომელი მხარე?
მზარდი გაგზავნის მრიცხველი მიმართულებაა და არა დიაგნოზი. სანამ რაიმეს შეცვლით, გადაწყვიტეთ, მოთხოვნა გვირაბიდან არასოდეს გავიდა თუ პასუხი არასოდეს დაბრუნდა.
გაგზავნის მრიცხველები, რომლებიც იზრდება, სანამ მიღების მრიცხველი ნულზე რჩება, აღწერენ მიმართულებას და არა დიაგნოზს. იგივე ჩვენება ჩნდება მაშინ, როცა პარტნიორმა ხელის ჩამორთმევა არასოდეს დაასრულა, როცა დანიშნულებამ არასწორი პარტნიორი აირჩია, როცა შორეულ მხარეს დაბრუნების მარშრუტი არ აქვს და როცა ფილტრი სახლისკენ მიმავალ გზაზე პასუხს აგდებს. თითოეული მათგანი სხვადასხვა ადგილას შესწორდება.
სამუშაოს რომ ამოკლებს, ის შედარებაა მოთხოვნასა და პასუხს შორის, რომელთაგან პირველი გვირაბიდან არასოდეს გასულა, მეორე კი არასოდეს დაბრუნებულა. სწორ ინტერფეისზე ერთი ჩაწერა წყვეტს ორივეს შორის.
მრიცხველები მოცულობას აღწერენ და არა ხარვეზის მიმართულებას
WireGuard-ის მრიცხველები აფიქსირებენ, რა გადასცა ინტერფეისმა პარტნიორს და რა მიიღო მისგან. ისინი არ ამბობენ, რომელი დანიშნულება, რომელი პარტნიორი ან გაცვლის რომელი ნახევარი ჩავარდა. ფონური ტრაფიკი ჯამებს კიდევ ნაკლებად ინფორმატიულს ხდის, რადგან ზოგი ბაიტი კავშირის შემანარჩუნებელი შეტყობინება ან დაუკავშირებელი ნაკადი შეიძლება იყოს. წაიკითხეთ ისინი, როგორც ნიშანი იმისა, რომ ინტერფეისი აქტიურია, შემდეგ კი შეწყვიტეთ მათი მტკიცებულებად განხილვა.
პირველი სასარგებლო ფაქტი ისაა, არის თუ არა ხელის ჩამორთმევა მიმდინარე. მის გარეშე ამ პარტნიორისთვის არაფერი დაშიფრულა და მიღების მრიცხველს მოძრაობის მიზეზი არ აქვს.
პარტნიორის არჩევა თუ პასუხის გზა: ორი განმარტება
პირველი განმარტება ისაა, რომ პაკეტი ვერასოდეს მიაღწია განზრახ პარტნიორს, რადგან მარშრუტი სხვა ადგილისკენ მიუთითებდა ან პარტნიორის დაშვებული პრეფიქსები დანიშნულებას არ ფარავდა. მეორე ისაა, რომ პაკეტი მივიდა, პასუხი კი ვერ დაბრუნდა, რაც შორეულ ბოლოში მარშრუტიზაციის პრობლემაა. ცხრილი მათ გამოყოფს იმის მიხედვით, თუ რას დააკვირდებოდით თითოეულ წერტილში.
| Observation | Points to |
|---|---|
| No handshake while transmit climbs | Peer selection or endpoint |
| Handshake current, request visible on the server | Reply path or far-side route |
| Request never visible on the server | Allowed prefixes or local route |
| Both packets visible, nothing reaches the client | Return filter or translation |
წაიკითხეთ ცხრილი ზემოდან. ხელის ჩამორთმევის არქონა გიგზავნით გასაღებებთან, ბოლო წერტილებთან და გარე გზასთან, რადგან ჯერ სხვა არაფერია შესამოწმებელი. მიმდინარე ხელის ჩამორთმევა, როცა მოთხოვნა სერვერზე ჩანს, პრობლემას დაბრუნების მიმართულებაში გადააქვს, სადაც თავად დანიშნულების მარშრუტთა ცხრილი წყვეტს. ის მოთხოვნა, რომელიც სერვერზე არასოდეს ჩნდება, არჩევანის პრობლემაა, და ორივე პარტნიორის დაშვებული პრეფიქსები პირველია, რაც უნდა შევადაროთ.
ამ ოთხი სტრიქონიდან ორი კლიენტზე სწორდება და ორი სერვერზე. იმის ცოდნა, რომელ წყვილში ხართ, სამუშაოს უმეტესი ნაწილია.
სად ქრებიან პასუხები
პასუხი ტოვებს დანიშნულებას, აღწევს სერვერის გვირაბის ინტერფეისამდე და იშიფრება იმ პარტნიორისთვის, რომლის დაშვებული მისამართები კლიენტის შიდა მისამართს ემთხვევა. თუ ეს თანხვედრა ჩავარდა, პასუხი ჩუმად უგულვებელყოფილია, რაც კლიენტის მხრიდან ზუსტად ქსელურ ხარვეზს ჰგავს. თუ პასუხი დაშიფრულია და კლიენტის საკუთარი ფილტრი უარყოფს მას, სიმპტომი კვლავ იგივეა. ორივე შემთხვევას ჩაწერა სჭირდება და არა მრიცხველი.
ამ შეცდომის ყველაზე ძლიერი ფორმაა სერვერი, რომელიც კლიენტისთვის პაკეტებს გადასცემს, მაგრამ კლიენტის შიდა დიაპაზონში დაბრუნების მარშრუტი არ აქვს. ის იღებს მოთხოვნას, პასუხს თავის ნაგულისხმევ კარიბჭისკენ აგზავნის და გვირაბი ვერასოდეს ხედავს მას. სერვერზე დამატებული ფართო თარგმნის წესი მალავს ამ ხარვეზს მარშრუტის შეკეთების ნაცვლად.
გამოსცადეთ ერთი დანიშნულება თავიდან ბოლომდე
აირჩიეთ ერთი დანიშნულება პარტნიორის დიაპაზონში და გამოსცადეთ ის, სანამ ხელის ჩამორთმევა აშკარად მიმდინარეა. ქვემოთ მოცემული ბრძანებები კითხულობენ პარტნიორის მდგომარეობას, არჩეულ მარშრუტს და გაცვლის ორივე მხარეს. ჩაწერა შეასრულეთ იმ ინტერფეისზე, რომელსაც დაშიფრული პაკეტები რეალურად იყენებენ.
wg show wg0 latest-handshakes
wg show wg0 transfer
ip route get 10.60.9.5
sudo tcpdump -ni wg0 host 10.60.9.5
ჩაწერა, რომელიც გვირაბის ინტერფეისზე მოთხოვნას აჩვენებს და არაფერი ბრუნდება, სერვერის მხრიდან მიღებული პასუხია, და დანიშნულების მარშრუტთა ცხრილი შემდეგი დასათვალიერებელი ადგილია. თუ საერთოდ არაფერი ჩნდება, პაკეტმა სხვა გზა აირჩია, ამიტომ ლოკალური მარშრუტი ეჭვმიტანილია. ორივე ჩაწერაში ხილული გაცვლა, რომელსაც პროგრამაში წინსვლა არ მოჰყვება, კითხვას პაკეტის ზომაზე ან ფილტრზე გადააქვს, რომელსაც ინტერფეისის სტატისტიკა არასოდეს აჩვენებს. გამოცდაში შეინახეთ ერთი დანიშნულება და ერთი კლიენტი, რადგან მეორე ცვლადი მტკიცებულებას კვლავ შთაბეჭდილებად აქცევს.
თუ სახელები ჩავარდა, სანამ დაშვებული მისამართი მუშაობს, პასუხი DNS-შია და არა გვირაბში. თუ მხოლოდ დიდი გადაცემები ჩერდება, პაკეტის ზომა ცალკე შეამოწმეთ.